Merge tag 'staging-4.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 26 Jun 2015 22:46:08 +0000 (15:46 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 26 Jun 2015 22:46:08 +0000 (15:46 -0700)
Pull staging driver updates from Greg KH:
 "Here's the big, really big, staging tree patches for 4.2-rc1.

  Loads of stuff in here, almost all just coding style fixes / churn,
  and a few new drivers as well, one of which I just disabled from the
  build a few minutes ago due to way too many build warnings.

  Other than the one "disable this driver" patch, all of these have been
  in linux-next for quite a while with no reported issues"

* tag 'staging-4.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (1163 commits)
  staging: wilc1000: disable driver due to build warnings
  Staging: rts5208: fix CHANGE_LINK_STATE value
  Staging: sm750fb: ddk750_swi2c.c: Insert spaces before parenthesis
  Staging: sm750fb: ddk750_swi2c.c: Place braces on correct lines
  Staging: sm750fb: ddk750_swi2c.c: Insert spaces around operators
  Staging: sm750fb: ddk750_swi2c.c: Replace spaces with tabs
  Staging: sm750fb: ddk750_swi2c.h: Shorten lines to under 80 characters
  Staging: sm750fb: ddk750_swi2c.h: Replace spaces with tabs
  Staging: sm750fb: modedb.h: Shorten lines to under 80 characters
  Staging: sm750fb: modedb.h: Replace spaces with tabs
  staging: comedi: addi_apci_3120: rename 'this_board' variables
  staging: comedi: addi_apci_1516: rename 'this_board' variables
  staging: comedi: ni_atmio: cleanup ni_getboardtype()
  staging: comedi: vmk80xx: sanity check context used to get the boardinfo
  staging: comedi: vmk80xx: rename 'boardinfo' variables
  staging: comedi: dt3000: rename 'this_board' variables
  staging: comedi: adv_pci_dio: rename 'this_board' variables
  staging: comedi: cb_pcidas64: rename 'thisboard' variables
  staging: comedi: cb_pcidas: rename 'thisboard' variables
  staging: comedi: me4000: rename 'thisboard' variables
  ...

14 files changed:
1  2 
Documentation/devicetree/bindings/vendor-prefixes.txt
MAINTAINERS
drivers/media/pci/dt3155/dt3155.c
drivers/platform/goldfish/goldfish_pipe.c
drivers/staging/android/lowmemorykiller.c
drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
drivers/staging/lustre/lustre/ptlrpc/service.c
drivers/staging/media/bcm2048/radio-bcm2048.c
drivers/staging/panel/panel.c
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
drivers/staging/rts5208/rtsx.c
drivers/staging/vt6655/device_main.c
drivers/staging/vt6656/main_usb.c
tools/Makefile

index 58d69302ddfb01ede8054ce2ed1244d036dcb248,b90ea454fc668f96afd20578d285b77525395c62..8e8f4bc6fcf14100a81c9cffc38b29b90a29a351
@@@ -40,7 -40,6 +40,7 @@@ calxeda       Calxed
  capella       Capella Microsystems, Inc
  cavium        Cavium, Inc.
  cdns  Cadence Design Systems Inc.
 +ceva  Ceva, Inc.
  chipidea      Chipidea, Inc
  chipone               ChipOne
  chipspark     ChipSPARK
@@@ -53,17 -52,14 +53,17 @@@ cnxt       Conexant Systems, Inc
  cortina       Cortina Systems, Inc.
  cosmic        Cosmic Circuits
  crystalfontz  Crystalfontz America, Inc.
 +cubietech     Cubietech, Ltd.
  dallas        Maxim Integrated Products (formerly Dallas Semiconductor)
  davicom       DAVICOM Semiconductor, Inc.
 +delta Delta Electronics, Inc.
  denx  Denx Software Engineering
  digi  Digi International Inc.
  digilent      Diglent, Inc.
  dlg   Dialog Semiconductor
  dlink D-Link Corporation
  dmo   Data Modul AG
 +ea    Embedded Artists AB
  ebv   EBV Elektronik
  edt   Emerging Display Technologies
  elan  Elan Microelectronic Corp.
@@@ -94,11 -90,9 +94,11 @@@ gumstix     Gumstix, Inc
  gw    Gateworks Corporation
  hannstar      HannStar Display Corporation
  haoyu Haoyu Microelectronic Co. Ltd.
 +hardkernel    Hardkernel Co., Ltd
  himax Himax Technologies, Inc.
  hisilicon     Hisilicon Limited.
  hit   Hitachi Ltd.
 +hitex Hitex Development Tools
  honeywell     Honeywell
  hp    Hewlett Packard
  i2se  I2SE GmbH
@@@ -123,6 -117,7 +123,7 @@@ lltc       Linear Technology Corporatio
  marvell       Marvell Technology Group Ltd.
  maxim Maxim Integrated Products
  mediatek      MediaTek Inc.
+ melexis       Melexis N.V.
  merrii        Merrii Technology Co., Ltd.
  micrel        Micrel Inc.
  microchip     Microchip Technology Inc.
@@@ -165,10 -160,8 +166,10 @@@ radxa    Radx
  raidsonic     RaidSonic Technology GmbH
  ralink        Mediatek/Ralink Technology Corp.
  ramtron       Ramtron International
 +raspberrypi   Raspberry Pi Foundation
  realtek Realtek Semiconductor Corp.
  renesas       Renesas Electronics Corporation
 +richtek       Richtek Technology Corporation
  ricoh Ricoh Co. Ltd.
  rockchip      Fuzhou Rockchip Electronics Co., Ltd
  samsung       Samsung Semiconductor
@@@ -189,7 -182,6 +190,7 @@@ skyworks   Skyworks Solutions, Inc
  smsc  Standard Microsystems Corporation
  snps  Synopsys, Inc.
  solidrun      SolidRun
 +solomon        Solomon Systech Limited
  sony  Sony Corporation
  spansion      Spansion Inc.
  sprd  Spreadtrum Communications Inc.
@@@ -198,7 -190,6 +199,7 @@@ ste        ST-Ericsso
  stericsson    ST-Ericsson
  synology      Synology, Inc.
  tbs   TBS Technologies
 +tcl   Toby Churchill Ltd.
  thine THine Electronics, Inc.
  ti    Texas Instruments
  tlm   Trusted Logic Mobility
@@@ -212,7 -203,6 +213,7 @@@ variscite  Variscite Ltd
  via   VIA Technologies, Inc.
  virtio        Virtual I/O Device Specification, developed by the OASIS consortium
  voipac        Voipac Technologies s.r.o.
 +wexler        Wexler
  winbond Winbond Electronics corp.
  wlf   Wolfson Microelectronics
  wm    Wondermedia Technologies, Inc.
@@@ -222,4 -212,3 +223,4 @@@ xillybus   Xillybus Ltd
  xlnx  Xilinx
  zyxel ZyXEL Communications Corp.
  zarlink       Zarlink Semiconductor
 +zte   ZTE Corp.
diff --combined MAINTAINERS
index e4b32dcc2494b9690992cc9d264f78fe4980601a,ad98c7ffa4b243001dd290464f015b40b81e7c30..35c5d7223b8c89a20ce1d02176bf1f69ed8a7009
@@@ -259,7 -259,7 +259,7 @@@ S: Maintaine
  F:    drivers/platform/x86/acer-wmi.c
  
  ACPI
 -M:    Rafael J. Wysocki <rjw@rjwysocki.net>
 +M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
  M:    Len Brown <lenb@kernel.org>
  L:    linux-acpi@vger.kernel.org
  W:    https://01.org/linux-acpi
@@@ -280,7 -280,7 +280,7 @@@ F: tools/power/acpi
  ACPI COMPONENT ARCHITECTURE (ACPICA)
  M:    Robert Moore <robert.moore@intel.com>
  M:    Lv Zheng <lv.zheng@intel.com>
 -M:    Rafael J. Wysocki <rafael.j.wysocki@intel.com>
 +M:    "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
  L:    linux-acpi@vger.kernel.org
  L:    devel@acpica.org
  W:    https://acpica.org/
@@@ -445,7 -445,6 +445,7 @@@ F: drivers/input/misc/adxl34x.
  
  ADVANSYS SCSI DRIVER
  M:    Matthew Wilcox <matthew@wil.cx>
 +M:    Hannes Reinecke <hare@suse.de>
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
  F:    Documentation/scsi/advansys.txt
@@@ -632,7 -631,7 +632,7 @@@ F: drivers/iommu/amd_iommu*.[ch
  F:    include/linux/amd-iommu.h
  
  AMD KFD
 -M:    Oded Gabbay <oded.gabbay@amd.com>
 +M:    Oded Gabbay <oded.gabbay@gmail.com>
  L:    dri-devel@lists.freedesktop.org
  T:    git git://people.freedesktop.org/~gabbayo/linux.git
  S:    Supported
@@@ -653,6 -652,7 +653,6 @@@ M: Tom Lendacky <thomas.lendacky@amd.co
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/amd/xgbe/
 -F:    drivers/net/phy/amd-xgbe-phy.c
  
  AMS (Apple Motion Sensor) DRIVER
  M:    Michael Hanselmann <linux-kernel@hansmi.ch>
@@@ -732,7 -732,7 +732,7 @@@ ANDROID DRIVER
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  M:    Arve Hjønnevåg <arve@android.com>
  M:    Riley Andrews <riandrews@android.com>
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/gregkh/staging.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
  L:    devel@driverdev.osuosl.org
  S:    Supported
  F:    drivers/android/
@@@ -922,13 -922,6 +922,13 @@@ M:       Krzysztof Halasa <khalasa@piap.pl
  S:    Maintained
  F:    arch/arm/mach-cns3xxx/
  
 +ARM/CAVIUM THUNDER NETWORK DRIVER
 +M:    Sunil Goutham <sgoutham@cavium.com>
 +M:    Robert Richter <rric@kernel.org>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Supported
 +F:    drivers/net/ethernet/cavium/
 +
  ARM/CIRRUS LOGIC CLPS711X ARM ARCHITECTURE
  M:    Alexander Shiyan <shc_work@mail.ru>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -984,7 -977,6 +984,7 @@@ L: linux-arm-kernel@lists.infradead.or
  T:    git git://github.com/ulli-kroll/linux.git
  S:    Maintained
  F:    arch/arm/mach-gemini/
 +F:    drivers/rtc/rtc-gemini.c
  
  ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
  M:    Barry Song <baohua@kernel.org>
@@@ -1043,7 -1035,7 +1043,7 @@@ F:      arch/arm/include/asm/hardware/dec212
  F:    arch/arm/mach-footbridge/
  
  ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
 -M:    Shawn Guo <shawn.guo@linaro.org>
 +M:    Shawn Guo <shawnguo@kernel.org>
  M:    Sascha Hauer <kernel@pengutronix.de>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -1052,11 -1044,9 +1052,11 @@@ F:    arch/arm/mach-imx
  F:    arch/arm/mach-mxs/
  F:    arch/arm/boot/dts/imx*
  F:    arch/arm/configs/imx*_defconfig
 +F:    drivers/clk/imx/
 +F:    include/soc/imx/
  
  ARM/FREESCALE VYBRID ARM ARCHITECTURE
 -M:    Shawn Guo <shawn.guo@linaro.org>
 +M:    Shawn Guo <shawnguo@kernel.org>
  M:    Sascha Hauer <kernel@pengutronix.de>
  R:    Stefan Agner <stefan@agner.ch>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1199,12 -1189,6 +1199,12 @@@ M:    Lennert Buytenhek <kernel@wantstofly
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  
 +ARM/LPC18XX ARCHITECTURE
 +M:    Joachim Eastwood <manabian@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +N:    lpc18xx
 +
  ARM/MAGICIAN MACHINE SUPPORT
  M:    Philipp Zabel <philipp.zabel@gmail.com>
  S:    Maintained
@@@ -1252,13 -1236,6 +1252,13 @@@ W:    http://www.digriz.org.uk/ts78xx/kern
  S:    Maintained
  F:    arch/arm/mach-orion5x/ts78xx-*
  
 +ARM/Mediatek RTC DRIVER
 +M:    Eddie Huang <eddie.huang@mediatek.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +L:    linux-mediatek@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    drivers/rtc/rtc-mt6397.c
 +
  ARM/Mediatek SoC support
  M:    Matthias Brugger <matthias.bgg@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1408,7 -1385,6 +1408,7 @@@ L:      linux-samsung-soc@vger.kernel.org (m
  S:    Maintained
  F:    arch/arm/boot/dts/s3c*
  F:    arch/arm/boot/dts/exynos*
 +F:    arch/arm64/boot/dts/exynos/
  F:    arch/arm/plat-samsung/
  F:    arch/arm/mach-s3c24*/
  F:    arch/arm/mach-s3c64xx/
@@@ -1512,22 -1488,12 +1512,22 @@@ F:   drivers/phy/phy-stih407-usb.
  F:    drivers/phy/phy-stih41x-usb.c
  F:    drivers/pinctrl/pinctrl-st.c
  F:    drivers/reset/sti/
 +F:    drivers/rtc/rtc-st-lpc.c
  F:    drivers/tty/serial/st-asc.c
  F:    drivers/usb/dwc3/dwc3-st.c
  F:    drivers/usb/host/ehci-st.c
  F:    drivers/usb/host/ohci-st.c
 +F:    drivers/watchdog/st_lpc_wdt.c
  F:    drivers/ata/ahci_st.c
  
 +ARM/STM32 ARCHITECTURE
 +M:    Maxime Coquelin <mcoquelin.stm32@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mcoquelin/stm32.git
 +N:    stm32
 +F:    drivers/clocksource/armv7m_systick.c
 +
  ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1574,13 -1540,6 +1574,13 @@@ F:    drivers/rtc/rtc-ab3100.
  F:    drivers/rtc/rtc-coh901331.c
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
  
 +ARM/UNIPHIER ARCHITECTURE
 +M:    Masahiro Yamada <yamada.masahiro@socionext.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-uniphier/
 +N:    uniphier
 +
  ARM/Ux500 ARM ARCHITECTURE
  M:    Linus Walleij <linus.walleij@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1658,15 -1617,6 +1658,15 @@@ S:    Maintaine
  F:    arch/arm/mach-pxa/z2.c
  F:    arch/arm/mach-pxa/include/mach/z2.h
  
 +ARM/ZTE ARCHITECTURE
 +M:    Jun Nie <jun.nie@linaro.org>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-zx/
 +F:    drivers/clk/zte/
 +F:    Documentation/devicetree/bindings/arm/zte.txt
 +F:    Documentation/devicetree/bindings/clock/zx296702-clk.txt
 +
  ARM/ZYNQ ARCHITECTURE
  M:    Michal Simek <michal.simek@xilinx.com>
  R:    Sören Brinkmann <soren.brinkmann@xilinx.com>
@@@ -1684,12 -1634,11 +1684,12 @@@ F:   drivers/i2c/busses/i2c-cadence.
  F:    drivers/mmc/host/sdhci-of-arasan.c
  F:    drivers/edac/synopsys_edac.c
  
 -ARM SMMU DRIVER
 +ARM SMMU DRIVERS
  M:    Will Deacon <will.deacon@arm.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    drivers/iommu/arm-smmu.c
 +F:    drivers/iommu/arm-smmu-v3.c
  F:    drivers/iommu/io-pgtable-arm.c
  
  ARM64 PORT (AARCH64 ARCHITECTURE)
@@@ -1920,14 -1869,6 +1920,14 @@@ W:    http://www.attotech.co
  S:    Supported
  F:    drivers/scsi/esas2r
  
 +ATUSB IEEE 802.15.4 RADIO DRIVER
 +M:    Stefan Schmidt <stefan@osg.samsung.com>
 +L:    linux-wpan@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/ieee802154/atusb.c
 +F:    drivers/net/ieee802154/atusb.h
 +F:    drivers/net/ieee802154/at86rf230.h
 +
  AUDIT SUBSYSTEM
  M:    Paul Moore <paul@paul-moore.com>
  M:    Eric Paris <eparis@redhat.com>
@@@ -2032,14 -1973,6 +2032,14 @@@ W:    http://bcache.evilpiepirate.or
  S:    Maintained:
  F:    drivers/md/bcache/
  
 +BDISP ST MEDIA DRIVER
 +M:    Fabien Dessenne <fabien.dessenne@st.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +W:    http://linuxtv.org
 +S:    Supported
 +F:    drivers/media/platform/sti/bdisp
 +
  BEFS FILE SYSTEM
  S:    Orphan
  F:    Documentation/filesystems/befs.txt
@@@ -2124,7 -2057,6 +2124,7 @@@ M:      Jens Axboe <axboe@kernel.dk
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
  S:    Maintained
  F:    block/
 +F:    kernel/trace/blktrace.c
  
  BLOCK2MTD DRIVER
  M:    Joern Engel <joern@lazybastard.org>
@@@ -2261,7 -2193,6 +2261,7 @@@ S:      Maintaine
  F:    arch/arm/mach-bcm/*brcmstb*
  F:    arch/arm/boot/dts/bcm7*.dts*
  F:    drivers/bus/brcmstb_gisb.c
 +N:    brcmstb
  
  BROADCOM BMIPS MIPS ARCHITECTURE
  M:    Kevin Cernekee <cernekee@gmail.com>
@@@ -2319,13 -2250,6 +2319,13 @@@ N:    bcm9583
  N:    bcm583*
  N:    bcm113*
  
 +BROADCOM BRCMSTB GPIO DRIVER
 +M:    Gregory Fong <gregory.0xf0@gmail.com>
 +L:    bcm-kernel-feedback-list@broadcom.com>
 +S:    Supported
 +F:    drivers/gpio/gpio-brcmstb.c
 +F:    Documentation/devicetree/bindings/gpio/brcm,brcmstb-gpio.txt
 +
  BROADCOM KONA GPIO DRIVER
  M:    Ray Jui <rjui@broadcom.com>
  L:    bcm-kernel-feedback-list@broadcom.com
@@@ -2333,12 -2257,6 +2333,12 @@@ S:    Supporte
  F:    drivers/gpio/gpio-bcm-kona.c
  F:    Documentation/devicetree/bindings/gpio/gpio-bcm-kona.txt
  
 +BROADCOM STB NAND FLASH DRIVER
 +M:    Brian Norris <computersforpeace@gmail.com>
 +L:    linux-mtd@lists.infradead.org
 +S:    Maintained
 +F:    drivers/mtd/nand/brcmnand/
 +
  BROADCOM SPECIFIC AMBA DRIVER (BCMA)
  M:    Rafał Miłecki <zajec5@gmail.com>
  L:    linux-wireless@vger.kernel.org
@@@ -2518,17 -2436,6 +2518,17 @@@ S:    Maintaine
  F:    drivers/iio/light/cm*
  F:    Documentation/devicetree/bindings/i2c/trivial-devices.txt
  
 +CAVIUM LIQUIDIO NETWORK DRIVER
 +M:     Derek Chickles <derek.chickles@caviumnetworks.com>
 +M:     Satanand Burla <satananda.burla@caviumnetworks.com>
 +M:     Felix Manlunas <felix.manlunas@caviumnetworks.com>
 +M:     Raghu Vatsavayi <raghu.vatsavayi@caviumnetworks.com>
 +L:     netdev@vger.kernel.org
 +W:     http://www.cavium.com
 +S:     Supported
 +F:     drivers/net/ethernet/cavium/
 +F:     drivers/net/ethernet/cavium/liquidio/
 +
  CC2520 IEEE-802.15.4 RADIO DRIVER
  M:    Varka Bhadram <varkabhadram@gmail.com>
  L:    linux-wpan@vger.kernel.org
@@@ -2540,6 -2447,7 +2540,6 @@@ F:      Documentation/devicetree/bindings/ne
  CELL BROADBAND ENGINE ARCHITECTURE
  M:    Arnd Bergmann <arnd@arndb.de>
  L:    linuxppc-dev@lists.ozlabs.org
 -L:    cbe-oss-dev@lists.ozlabs.org
  W:    http://www.ibm.com/developerworks/power/cell/
  S:    Supported
  F:    arch/powerpc/include/asm/cell*.h
@@@ -2549,7 -2457,7 +2549,7 @@@ F:      arch/powerpc/oprofile/*cell
  F:    arch/powerpc/platforms/cell/
  
  CEPH DISTRIBUTED FILE SYSTEM CLIENT
 -M:    Yan, Zheng <zyan@redhat.com>
 +M:    "Yan, Zheng" <zyan@redhat.com>
  M:    Sage Weil <sage@redhat.com>
  L:    ceph-devel@vger.kernel.org
  W:    http://ceph.com/
@@@ -2695,13 -2603,6 +2695,13 @@@ L:    linux-scsi@vger.kernel.or
  S:    Supported
  F:    drivers/scsi/fnic/
  
 +CISCO SCSI HBA DRIVER
 +M:    Narsimhulu Musini <nmusini@cisco.com>
 +M:    Sesidhar Baddela <sebaddel@cisco.com>
 +L:    linux-scsi@vger.kernel.org
 +S:    Supported
 +F:    drivers/scsi/snic/
 +
  CMPC ACPI DRIVER
  M:    Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
  M:    Daniel Oliveira Nascimento <don@syst.com.br>
@@@ -2709,14 -2610,6 +2709,14 @@@ L:    platform-driver-x86@vger.kernel.or
  S:    Supported
  F:    drivers/platform/x86/classmate-laptop.c
  
 +COBALT MEDIA DRIVER
 +M:    Hans Verkuil <hans.verkuil@cisco.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +W:    http://linuxtv.org
 +S:    Supported
 +F:    drivers/media/pci/cobalt/
 +
  COCCINELLE/Semantic Patches (SmPL)
  M:    Julia Lawall <Julia.Lawall@lip6.fr>
  M:    Gilles Muller <Gilles.Muller@lip6.fr>
@@@ -2863,7 -2756,7 +2863,7 @@@ S:      Maintaine
  F:    drivers/net/ethernet/ti/cpmac.c
  
  CPU FREQUENCY DRIVERS
 -M:    Rafael J. Wysocki <rjw@rjwysocki.net>
 +M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
  M:    Viresh Kumar <viresh.kumar@linaro.org>
  L:    linux-pm@vger.kernel.org
  S:    Maintained
@@@ -2902,7 -2795,7 +2902,7 @@@ F:      drivers/cpuidle/cpuidle-exynos.
  F:    arch/arm/mach-exynos/pm.c
  
  CPUIDLE DRIVERS
 -M:    Rafael J. Wysocki <rjw@rjwysocki.net>
 +M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
  M:    Daniel Lezcano <daniel.lezcano@linaro.org>
  L:    linux-pm@vger.kernel.org
  S:    Maintained
@@@ -2988,15 -2881,6 +2988,15 @@@ S:    Maintaine
  F:    drivers/media/common/cx2341x*
  F:    include/media/cx2341x*
  
 +CX24120 MEDIA DRIVER
 +M:    Jemma Denson <jdenson@gmail.com>
 +M:    Patrick Boettcher <patrick.boettcher@posteo.de>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/cx24120*
 +
  CX88 VIDEO4LINUX DRIVER
  M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    linux-media@vger.kernel.org
@@@ -3071,7 -2955,7 +3071,7 @@@ M:      Michael Neuling <mikey@neuling.org
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Supported
  F:    drivers/misc/cxl/
 -F:    include/misc/cxl.h
 +F:    include/misc/cxl*
  F:    include/uapi/misc/cxl.h
  F:    Documentation/powerpc/cxl.txt
  F:    Documentation/powerpc/cxl.txt
@@@ -3207,9 -3091,9 +3207,9 @@@ S:      Maintaine
  F:    drivers/platform/x86/dell-smo8800.c
  
  DELL LAPTOP SMM DRIVER
 -M:    Guenter Roeck <linux@roeck-us.net>
 +M:    Pali Rohár <pali.rohar@gmail.com>
  S:    Maintained
 -F:    drivers/char/i8k.c
 +F:    drivers/hwmon/dell-smm-hwmon.c
  F:    include/uapi/linux/i8k.h
  
  DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas)
@@@ -3404,8 -3288,6 +3404,8 @@@ F:      drivers/hwmon/dme1737.
  DMI/SMBIOS SUPPORT
  M:    Jean Delvare <jdelvare@suse.de>
  S:    Maintained
 +T:    quilt http://jdelvare.nerim.net/devel/linux/jdelvare-dmi/
 +F:    Documentation/ABI/testing/sysfs-firmware-dmi-tables
  F:    drivers/firmware/dmi-id.c
  F:    drivers/firmware/dmi_scan.c
  F:    include/linux/dmi.h
@@@ -3450,17 -3332,16 +3450,17 @@@ F:   drivers/block/drbd
  F:    lib/lru_cache.c
  F:    Documentation/blockdev/drbd/
  
 -DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS
 +DRIVER CORE, KOBJECTS, DEBUGFS, KERNFS AND SYSFS
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git
  S:    Supported
  F:    Documentation/kobject.txt
  F:    drivers/base/
 -F:    fs/sysfs/
  F:    fs/debugfs/
 -F:    include/linux/kobj*
 +F:    fs/kernfs/
 +F:    fs/sysfs/
  F:    include/linux/debugfs.h
 +F:    include/linux/kobj*
  F:    lib/kobj*
  
  DRM DRIVERS
@@@ -3566,14 -3447,6 +3566,14 @@@ L:    netdev@vger.kernel.or
  S:    Maintained
  F:    drivers/net/wan/dscc4.c
  
 +DT3155 MEDIA DRIVER
 +M:    Hans Verkuil <hverkuil@xs4all.nl>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +W:    http://linuxtv.org
 +S:    Odd Fixes
 +F:    drivers/media/pci/dt3155/
 +
  DVB_USB_AF9015 MEDIA DRIVER
  M:    Antti Palosaari <crope@iki.fi>
  L:    linux-media@vger.kernel.org
@@@ -3856,7 -3729,7 +3856,7 @@@ S:      Maintaine
  F:    drivers/edac/ie31200_edac.c
  
  EDAC-MPC85XX
 -M:    Johannes Thumshirn <johannes.thumshirn@men.de>
 +M:    Johannes Thumshirn <morbidrsa@gmail.com>
  L:    linux-edac@vger.kernel.org
  W:    bluesmoke.sourceforge.net
  S:    Maintained
@@@ -3883,13 -3756,6 +3883,13 @@@ W:    bluesmoke.sourceforge.ne
  S:    Maintained
  F:    drivers/edac/sb_edac.c
  
 +EDAC-XGENE
 +APPLIED MICRO (APM) X-GENE SOC EDAC
 +M:     Loc Ho <lho@apm.com>
 +S:     Supported
 +F:     drivers/edac/xgene_edac.c
 +F:     Documentation/devicetree/bindings/edac/apm-xgene-edac.txt
 +
  EDIROL UA-101/UA-1000 DRIVER
  M:    Clemens Ladisch <clemens@ladisch.de>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
@@@ -4138,7 -4004,7 +4138,7 @@@ F:      include/uapi/scsi/fc
  
  FILE LOCKING (flock() and fcntl()/lockf())
  M:    Jeff Layton <jlayton@poochiereds.net>
 -M:    J. Bruce Fields <bfields@fieldses.org>
 +M:    "J. Bruce Fields" <bfields@fieldses.org>
  L:    linux-fsdevel@vger.kernel.org
  S:    Maintained
  F:    include/linux/fcntl.h
@@@ -4334,7 -4200,7 +4334,7 @@@ F:      sound/soc/fsl/imx
  F:    sound/soc/fsl/mpc8610_hpcd.c
  
  FREESCALE QORIQ MANAGEMENT COMPLEX DRIVER
 -M:    J. German Rivera <German.Rivera@freescale.com>
 +M:    "J. German Rivera" <German.Rivera@freescale.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    drivers/staging/fsl-mc/
@@@ -4616,7 -4482,7 +4616,7 @@@ S:      Maintaine
  F:    drivers/media/usb/gspca/
  
  GUID PARTITION TABLE (GPT)
 -M:    Davidlohr Bueso <davidlohr@hp.com>
 +M:    Davidlohr Bueso <dave@stgolabs.net>
  L:    linux-efi@vger.kernel.org
  S:    Maintained
  F:    block/partitions/efi.*
@@@ -4628,17 -4494,6 +4628,17 @@@ T:    git git://linuxtv.org/media_tree.gi
  S:    Maintained
  F:    drivers/media/usb/stk1160/
  
 +H8/300 ARCHITECTURE
 +M:    Yoshinori Sato <ysato@users.sourceforge.jp>
 +L:    uclinux-h8-devel@lists.sourceforge.jp
 +W:    http://uclinux-h8.sourceforge.jp
 +T:    git git://git.sourceforge.jp/gitroot/uclinux-h8/linux.git
 +S:    Maintained
 +F:    arch/h8300/
 +F:    drivers/clocksource/h8300_*.c
 +F:    drivers/clk/h8300/
 +F:    drivers/irqchip/irq-renesas-h8*.c
 +
  HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
  M:    Frank Seidel <frank@f-seidel.de>
  L:    platform-driver-x86@vger.kernel.org
@@@ -4788,18 -4643,6 +4788,18 @@@ F:    drivers/hid
  F:    include/linux/hid*
  F:    include/uapi/linux/hid*
  
 +HID SENSOR HUB DRIVERS
 +M:    Jiri Kosina <jkosina@suse.cz>
 +M:    Jonathan Cameron <jic23@kernel.org>
 +M:    Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
 +L:    linux-input@vger.kernel.org
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/hid/hid-sensor*
 +F:    drivers/hid/hid-sensor-*
 +F:    drivers/iio/*/hid-*
 +F:    include/linux/hid-sensor-*
 +
  HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS
  M:    Thomas Gleixner <tglx@linutronix.de>
  L:    linux-kernel@vger.kernel.org
@@@ -4906,7 -4749,7 +4906,7 @@@ S:      Maintaine
  F:    fs/hugetlbfs/
  
  Hyper-V CORE AND DRIVERS
 -M:    K. Y. Srinivasan <kys@microsoft.com>
 +M:    "K. Y. Srinivasan" <kys@microsoft.com>
  M:    Haiyang Zhang <haiyangz@microsoft.com>
  L:    devel@linuxdriverproject.org
  S:    Maintained
@@@ -5036,23 -4879,13 +5036,23 @@@ M:   Marcelo Henrique Cerri <mhcerri@linu
  M:    Fionnuala Gunter <fin@linux.vnet.ibm.com>
  L:    linux-crypto@vger.kernel.org
  S:    Supported
 -F:    drivers/crypto/nx/
 +F:    drivers/crypto/nx/Makefile
 +F:    drivers/crypto/nx/Kconfig
 +F:    drivers/crypto/nx/nx-aes*
 +F:    drivers/crypto/nx/nx-sha*
 +F:    drivers/crypto/nx/nx.*
 +F:    drivers/crypto/nx/nx_csbcpb.h
 +F:    drivers/crypto/nx/nx_debugfs.h
  
  IBM Power 842 compression accelerator
  M:    Dan Streetman <ddstreet@us.ibm.com>
  S:    Supported
 -F:    drivers/crypto/nx/nx-842.c
 -F:    include/linux/nx842.h
 +F:    drivers/crypto/nx/Makefile
 +F:    drivers/crypto/nx/Kconfig
 +F:    drivers/crypto/nx/nx-842*
 +F:    include/linux/sw842.h
 +F:    crypto/842.c
 +F:    lib/842/
  
  IBM Power Linux RAID adapter
  M:    Brian King <brking@us.ibm.com>
@@@ -5261,6 -5094,7 +5261,6 @@@ F:      include/linux/input
  INPUT MULTITOUCH (MT) PROTOCOL
  M:    Henrik Rydberg <rydberg@bitmath.org>
  L:    linux-input@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rydberg/input-mt.git
  S:    Odd fixes
  F:    Documentation/input/multi-touch-protocol.txt
  F:    drivers/input/input-mt.c
@@@ -5268,7 -5102,7 +5268,7 @@@ K:      \b(ABS|SYN)_MT
  
  INTEL ASoC BDW/HSW DRIVERS
  M:    Jie Yang <yang.jie@linux.intel.com>
 -L:    alsa-devel@alsa-project.org
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
  F:    sound/soc/intel/sst-haswell*
  F:    sound/soc/intel/sst-dsp*
@@@ -5445,7 -5279,6 +5445,7 @@@ M:      Tomas Winkler <tomas.winkler@intel.c
  L:    linux-kernel@vger.kernel.org
  S:    Supported
  F:    include/uapi/linux/mei.h
 +F:    include/linux/mei_cl_bus.h
  F:    drivers/misc/mei/*
  F:    Documentation/misc-devices/mei/*
  
@@@ -6511,15 -6344,6 +6511,15 @@@ W:    http://linuxtv.or
  S:    Maintained
  F:    drivers/media/radio/radio-maxiradio*
  
 +MEDIA DRIVERS FOR RENESAS - VSP1
 +M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 +L:    linux-media@vger.kernel.org
 +L:    linux-sh@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Supported
 +F:    Documentation/devicetree/bindings/media/renesas,vsp1.txt
 +F:    drivers/media/platform/vsp1/
 +
  MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
  M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  P:    LinuxTV.org Project
@@@ -6542,12 -6366,6 +6542,12 @@@ F:    include/uapi/linux/meye.
  F:    include/uapi/linux/ivtv*
  F:    include/uapi/linux/uvcvideo.h
  
 +MEDIATEK MT7601U WIRELESS LAN DRIVER
 +M:    Jakub Kicinski <kubakici@wp.pl>
 +L:    linux-wireless@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/wireless/mediatek/mt7601u/
 +
  MEGARAID SCSI/SAS DRIVERS
  M:    Kashyap Desai <kashyap.desai@avagotech.com>
  M:    Sumit Saxena <sumit.saxena@avagotech.com>
@@@ -6594,14 -6412,14 +6594,14 @@@ F:   include/linux/mtd
  F:    include/uapi/mtd/
  
  MEN A21 WATCHDOG DRIVER
 -M:    Johannes Thumshirn <johannes.thumshirn@men.de>
 +M:    Johannes Thumshirn <morbidrsa@gmail.com>
  L:    linux-watchdog@vger.kernel.org
 -S:    Supported
 +S:    Maintained
  F:    drivers/watchdog/mena21_wdt.c
  
  MEN CHAMELEON BUS (mcb)
 -M:    Johannes Thumshirn <johannes.thumshirn@men.de>
 -S:    Supported
 +M:    Johannes Thumshirn <morbidrsa@gmail.com>
 +S:    Maintained
  F:    drivers/mcb/
  F:    include/linux/mcb.h
  
@@@ -6861,7 -6679,7 +6861,7 @@@ F:      drivers/net/ethernet/natsemi/natsemi
  NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER
  M:    Daniel Mack <zonque@gmail.com>
  S:    Maintained
 -L:    alsa-devel@alsa-project.org
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  W:    http://www.native-instruments.com
  F:    sound/usb/caiaq/
  
@@@ -7279,7 -7097,7 +7279,7 @@@ F:      arch/arm/mach-omap2/prm
  OMAP AUDIO SUPPORT
  M:    Peter Ujfalusi <peter.ujfalusi@ti.com>
  M:    Jarkko Nikula <jarkko.nikula@bitmer.com>
 -L:    alsa-devel@alsa-project.org (subscribers-only)
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  L:    linux-omap@vger.kernel.org
  S:    Maintained
  F:    sound/soc/omap/
@@@ -7574,16 -7392,13 +7574,16 @@@ S:   Maintaine
  F:    Documentation/mn10300/
  F:    arch/mn10300/
  
 -PARALLEL PORT SUPPORT
 +PARALLEL PORT SUBSYSTEM
 +M:    Sudip Mukherjee <sudipm.mukherjee@gmail.com>
 +M:    Sudip Mukherjee <sudip@vectorindia.org>
  L:    linux-parport@lists.infradead.org (subscribers-only)
 -S:    Orphan
 +S:    Maintained
  F:    drivers/parport/
  F:    include/linux/parport*.h
  F:    drivers/char/ppdev.c
  F:    include/uapi/linux/ppdev.h
 +F:    Documentation/parport*.txt
  
  PARAVIRT_OPS INTERFACE
  M:    Jeremy Fitzhardinge <jeremy@goop.org>
@@@ -7779,14 -7594,6 +7779,14 @@@ L:    linux-pci@vger.kernel.or
  S:    Maintained
  F:    drivers/pci/host/*spear*
  
 +PCI MSI DRIVER FOR APPLIEDMICRO XGENE
 +M:    Duc Dang <dhdang@apm.com>
 +L:    linux-pci@vger.kernel.org
 +L:    linux-arm-kernel@lists.infradead.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/pci/xgene-pci-msi.txt
 +F:    drivers/pci/host/pci-xgene-msi.c
 +
  PCMCIA SUBSYSTEM
  P:    Linux PCMCIA Team
  L:    linux-pcmcia@lists.infradead.org
@@@ -7827,6 -7634,7 +7827,6 @@@ F:      kernel/delayacct.
  
  PERFORMANCE EVENTS SUBSYSTEM
  M:    Peter Zijlstra <a.p.zijlstra@chello.nl>
 -M:    Paul Mackerras <paulus@samba.org>
  M:    Ingo Molnar <mingo@redhat.com>
  M:    Arnaldo Carvalho de Melo <acme@kernel.org>
  L:    linux-kernel@vger.kernel.org
@@@ -7984,7 -7792,7 +7984,7 @@@ F:      include/linux/power_supply.
  F:    drivers/power/
  
  PNP SUPPORT
 -M:    Rafael J. Wysocki <rafael.j.wysocki@intel.com>
 +M:    "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
  S:    Maintained
  F:    drivers/pnp/
  
@@@ -8053,13 -7861,14 +8053,13 @@@ F:   drivers/net/wireless/prism54
  PS3 NETWORK SUPPORT
  M:    Geoff Levand <geoff@infradead.org>
  L:    netdev@vger.kernel.org
 -L:    cbe-oss-dev@lists.ozlabs.org
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    drivers/net/ethernet/toshiba/ps3_gelic_net.*
  
  PS3 PLATFORM SUPPORT
  M:    Geoff Levand <geoff@infradead.org>
  L:    linuxppc-dev@lists.ozlabs.org
 -L:    cbe-oss-dev@lists.ozlabs.org
  S:    Maintained
  F:    arch/powerpc/boot/ps3*
  F:    arch/powerpc/include/asm/lv1call.h
@@@ -8073,8 -7882,7 +8073,8 @@@ F:      sound/ppc/snd_ps3
  
  PS3VRAM DRIVER
  M:    Jim Paris <jim@jtan.com>
 -L:    cbe-oss-dev@lists.ozlabs.org
 +M:    Geoff Levand <geoff@infradead.org>
 +L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    drivers/block/ps3vram.c
  
@@@ -8338,6 -8146,8 +8338,6 @@@ P:      rt2x00 projec
  M:    Stanislaw Gruszka <sgruszka@redhat.com>
  M:    Helmut Schaa <helmut.schaa@googlemail.com>
  L:    linux-wireless@vger.kernel.org
 -L:    users@rt2x00.serialmonkey.com (moderated for non-subscribers)
 -W:    http://rt2x00.serialmonkey.com/
  S:    Maintained
  F:    drivers/net/wireless/rt2x00/
  
@@@ -8427,7 -8237,6 +8427,7 @@@ M:      Alessandro Zummo <a.zummo@towertech.
  M:    Alexandre Belloni <alexandre.belloni@free-electrons.com>
  L:    rtc-linux@googlegroups.com
  Q:    http://patchwork.ozlabs.org/project/rtc-linux/list/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git
  S:    Maintained
  F:    Documentation/rtc.txt
  F:    drivers/rtc/
@@@ -8728,20 -8537,14 +8728,20 @@@ L:   linux-fbdev@vger.kernel.or
  S:    Maintained
  F:    drivers/video/fbdev/s3c-fb.c
  
 -SAMSUNG MULTIFUNCTION DEVICE DRIVERS
 +SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
  M:    Sangbeom Kim <sbkim73@samsung.com>
 +M:    Krzysztof Kozlowski <k.kozlowski@samsung.com>
  L:    linux-kernel@vger.kernel.org
 +L:    linux-samsung-soc@vger.kernel.org
  S:    Supported
  F:    drivers/mfd/sec*.c
  F:    drivers/regulator/s2m*.c
  F:    drivers/regulator/s5m*.c
 +F:    drivers/clk/clk-s2mps11.c
 +F:    drivers/rtc/rtc-s5m.c
  F:    include/linux/mfd/samsung/
 +F:    Documentation/devicetree/bindings/regulator/s5m8767-regulator.txt
 +F:    Documentation/devicetree/bindings/mfd/s2mp*.txt
  
  SAMSUNG S5P/EXYNOS4 SOC SERIES CAMERA SUBSYSTEM DRIVERS
  M:    Kyungmin Park <kyungmin.park@samsung.com>
@@@ -8990,7 -8793,7 +8990,7 @@@ F:      drivers/mmc/host/sdhci-spear.
  
  SECURITY SUBSYSTEM
  M:    James Morris <james.l.morris@oracle.com>
 -M:    Serge E. Hallyn <serge@hallyn.com>
 +M:    "Serge E. Hallyn" <serge@hallyn.com>
  L:    linux-security-module@vger.kernel.org (suggested Cc:)
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
  W:    http://kernsec.org/
@@@ -9210,7 -9013,7 +9210,7 @@@ F:      arch/arm/mach-davinci
  F:    drivers/i2c/busses/i2c-davinci.c
  
  TI DAVINCI SERIES MEDIA DRIVER
 -M:    Lad, Prabhakar <prabhakar.csengg@gmail.com>
 +M:    "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
  L:    linux-media@vger.kernel.org
  W:    http://linuxtv.org/
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
@@@ -9220,7 -9023,7 +9220,7 @@@ F:      drivers/media/platform/davinci
  F:    include/media/davinci/
  
  TI AM437X VPFE DRIVER
 -M:    Lad, Prabhakar <prabhakar.csengg@gmail.com>
 +M:    "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
  L:    linux-media@vger.kernel.org
  W:    http://linuxtv.org/
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
@@@ -9229,7 -9032,7 +9229,7 @@@ S:      Maintaine
  F:    drivers/media/platform/am437x/
  
  OV2659 OMNIVISION SENSOR DRIVER
 -M:    Lad, Prabhakar <prabhakar.csengg@gmail.com>
 +M:    "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
  L:    linux-media@vger.kernel.org
  W:    http://linuxtv.org/
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
@@@ -9558,6 -9361,7 +9558,6 @@@ F:      drivers/net/ethernet/toshiba/spider_
  SPU FILE SYSTEM
  M:    Jeremy Kerr <jk@ozlabs.org>
  L:    linuxppc-dev@lists.ozlabs.org
 -L:    cbe-oss-dev@lists.ozlabs.org
  W:    http://www.ibm.com/developerworks/power/cell/
  S:    Supported
  F:    Documentation/filesystems/spufs.txt
@@@ -9696,6 -9500,15 +9696,15 @@@ M:    Forest Bond <forest@alittletooquiet.
  S:    Odd Fixes
  F:    drivers/staging/vt665?/
  
+ STAGING - WILC1000 WIFI DRIVER
+ M:    Johnny Kim <johnny.kim@atmel.com>
+ M:    Rachel Kim <rachel.kim@atmel.com>
+ M:    Dean Lee <dean.lee@atmel.com>
+ M:    Chris Park <chris.park@atmel.com>
+ L:    linux-wireless@vger.kernel.org
+ S:    Supported
+ F:    drivers/staging/wilc1000/
  STAGING - XGI Z7,Z9,Z11 PCI DISPLAY DRIVER
  M:    Arnaud Patard <arnaud.patard@rtp-net.org>
  S:    Odd Fixes
@@@ -9779,13 -9592,6 +9788,13 @@@ F:    arch/arc
  F:    Documentation/devicetree/bindings/arc/
  F:    drivers/tty/serial/arc_uart.c
  
 +SYSTEM CONFIGURATION (SYSCON)
 +M:    Lee Jones <lee.jones@linaro.org>
 +M:    Arnd Bergmann <arnd@arndb.de>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git
 +S:    Supported
 +F:    drivers/mfd/syscon.c
 +
  SYSV FILESYSTEM
  M:    Christoph Hellwig <hch@infradead.org>
  S:    Maintained
@@@ -9794,7 -9600,7 +9803,7 @@@ F:      fs/sysv
  F:    include/linux/sysv_fs.h
  
  TARGET SUBSYSTEM
 -M:    Nicholas A. Bellinger <nab@linux-iscsi.org>
 +M:    "Nicholas A. Bellinger" <nab@linux-iscsi.org>
  L:    linux-scsi@vger.kernel.org
  L:    target-devel@vger.kernel.org
  W:    http://www.linux-iscsi.org
@@@ -9936,7 -9742,7 +9945,7 @@@ F:      include/linux/if_team.
  F:    include/uapi/linux/if_team.h
  
  TECHNOLOGIC SYSTEMS TS-5500 PLATFORM SUPPORT
 -M:    Savoir-faire Linux Inc. <kernel@savoirfairelinux.com>
 +M:    "Savoir-faire Linux Inc." <kernel@savoirfairelinux.com>
  S:    Maintained
  F:    arch/x86/platform/ts5500/
  
@@@ -10127,12 -9933,6 +10136,12 @@@ L:  netdev@vger.kernel.or
  S:    Maintained
  F:    drivers/net/ethernet/ti/netcp*
  
 +TI TAS571X FAMILY ASoC CODEC DRIVER
 +M:    Kevin Cernekee <cernekee@chromium.org>
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Odd Fixes
 +F:    sound/soc/codecs/tas571x*
 +
  TI TWL4030 SERIES SOC CODEC DRIVER
  M:    Peter Ujfalusi <peter.ujfalusi@ti.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
@@@ -10226,7 -10026,7 +10235,7 @@@ F:   include/linux/toshiba.
  F:    include/uapi/linux/toshiba.h
  
  TMIO MMC DRIVER
 -M:    Ian Molton <ian.molton@codethink.co.uk>
 +M:    Ian Molton <ian@mnementh.co.uk>
  L:    linux-mmc@vger.kernel.org
  S:    Maintained
  F:    drivers/mmc/host/tmio_mmc*
@@@ -10782,15 -10582,6 +10791,15 @@@ F: drivers/block/virtio_blk.
  F:    include/linux/virtio_*.h
  F:    include/uapi/linux/virtio_*.h
  
 +VIRTIO GPU DRIVER
 +M:    David Airlie <airlied@linux.ie>
 +M:    Gerd Hoffmann <kraxel@redhat.com>
 +L:    dri-devel@lists.freedesktop.org
 +L:    virtualization@lists.linux-foundation.org
 +S:    Maintained
 +F:    drivers/gpu/drm/virtio/
 +F:    include/uapi/linux/virtio_gpu.h
 +
  VIRTIO HOST (VHOST)
  M:    "Michael S. Tsirkin" <mst@redhat.com>
  L:    kvm@vger.kernel.org
@@@ -11113,7 -10904,7 +11122,7 @@@ M:   Andy Lutomirski <luto@amacapital.net
  L:    linux-kernel@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/vdso
  S:    Maintained
 -F:    arch/x86/vdso/
 +F:    arch/x86/entry/vdso/
  
  XC2028/3028 TUNER DRIVER
  M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
index 89d0dc705e4a7a497b01638cab673aafe940ec67,0000000000000000000000000000000000000000..8df6345189272eef437eefeff52600fe322db7cc
mode 100644,000000..100644
--- /dev/null
@@@ -1,632 -1,0 +1,631 @@@
- #include <linux/version.h>
 +/***************************************************************************
 + *   Copyright (C) 2006-2010 by Marin Mitov                                *
 + *   mitov@issp.bas.bg                                                     *
 + *                                                                         *
 + *   This program is free software; you can redistribute it and/or modify  *
 + *   it under the terms of the GNU General Public License as published by  *
 + *   the Free Software Foundation; either version 2 of the License, or     *
 + *   (at your option) any later version.                                   *
 + *                                                                         *
 + *   This program is distributed in the hope that it will be useful,       *
 + *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 + *   GNU General Public License for more details.                          *
 + *                                                                         *
 + ***************************************************************************/
 +
 +#include <linux/module.h>
 +#include <linux/stringify.h>
 +#include <linux/delay.h>
 +#include <linux/kthread.h>
 +#include <linux/slab.h>
 +#include <media/v4l2-dev.h>
 +#include <media/v4l2-ioctl.h>
 +#include <media/v4l2-common.h>
 +#include <media/videobuf2-dma-contig.h>
 +
 +#include "dt3155.h"
 +
 +#define DT3155_DEVICE_ID 0x1223
 +
 +/**
 + * read_i2c_reg - reads an internal i2c register
 + *
 + * @addr:     dt3155 mmio base address
 + * @index:    index (internal address) of register to read
 + * @data:     pointer to byte the read data will be placed in
 + *
 + * returns:   zero on success or error code
 + *
 + * This function starts reading the specified (by index) register
 + * and busy waits for the process to finish. The result is placed
 + * in a byte pointed by data.
 + */
 +static int read_i2c_reg(void __iomem *addr, u8 index, u8 *data)
 +{
 +      u32 tmp = index;
 +
 +      iowrite32((tmp << 17) | IIC_READ, addr + IIC_CSR2);
 +      mmiowb();
 +      udelay(45); /* wait at least 43 usec for NEW_CYCLE to clear */
 +      if (ioread32(addr + IIC_CSR2) & NEW_CYCLE)
 +              return -EIO; /* error: NEW_CYCLE not cleared */
 +      tmp = ioread32(addr + IIC_CSR1);
 +      if (tmp & DIRECT_ABORT) {
 +              /* reset DIRECT_ABORT bit */
 +              iowrite32(DIRECT_ABORT, addr + IIC_CSR1);
 +              return -EIO; /* error: DIRECT_ABORT set */
 +      }
 +      *data = tmp >> 24;
 +      return 0;
 +}
 +
 +/**
 + * write_i2c_reg - writes to an internal i2c register
 + *
 + * @addr:     dt3155 mmio base address
 + * @index:    index (internal address) of register to read
 + * @data:     data to be written
 + *
 + * returns:   zero on success or error code
 + *
 + * This function starts writing the specified (by index) register
 + * and busy waits for the process to finish.
 + */
 +static int write_i2c_reg(void __iomem *addr, u8 index, u8 data)
 +{
 +      u32 tmp = index;
 +
 +      iowrite32((tmp << 17) | IIC_WRITE | data, addr + IIC_CSR2);
 +      mmiowb();
 +      udelay(65); /* wait at least 63 usec for NEW_CYCLE to clear */
 +      if (ioread32(addr + IIC_CSR2) & NEW_CYCLE)
 +              return -EIO; /* error: NEW_CYCLE not cleared */
 +      if (ioread32(addr + IIC_CSR1) & DIRECT_ABORT) {
 +              /* reset DIRECT_ABORT bit */
 +              iowrite32(DIRECT_ABORT, addr + IIC_CSR1);
 +              return -EIO; /* error: DIRECT_ABORT set */
 +      }
 +      return 0;
 +}
 +
 +/**
 + * write_i2c_reg_nowait - writes to an internal i2c register
 + *
 + * @addr:     dt3155 mmio base address
 + * @index:    index (internal address) of register to read
 + * @data:     data to be written
 + *
 + * This function starts writing the specified (by index) register
 + * and then returns.
 + */
 +static void write_i2c_reg_nowait(void __iomem *addr, u8 index, u8 data)
 +{
 +      u32 tmp = index;
 +
 +      iowrite32((tmp << 17) | IIC_WRITE | data, addr + IIC_CSR2);
 +      mmiowb();
 +}
 +
 +/**
 + * wait_i2c_reg - waits the read/write to finish
 + *
 + * @addr:     dt3155 mmio base address
 + *
 + * returns:   zero on success or error code
 + *
 + * This function waits reading/writing to finish.
 + */
 +static int wait_i2c_reg(void __iomem *addr)
 +{
 +      if (ioread32(addr + IIC_CSR2) & NEW_CYCLE)
 +              udelay(65); /* wait at least 63 usec for NEW_CYCLE to clear */
 +      if (ioread32(addr + IIC_CSR2) & NEW_CYCLE)
 +              return -EIO; /* error: NEW_CYCLE not cleared */
 +      if (ioread32(addr + IIC_CSR1) & DIRECT_ABORT) {
 +              /* reset DIRECT_ABORT bit */
 +              iowrite32(DIRECT_ABORT, addr + IIC_CSR1);
 +              return -EIO; /* error: DIRECT_ABORT set */
 +      }
 +      return 0;
 +}
 +
 +static int
 +dt3155_queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt,
 +              unsigned int *nbuffers, unsigned int *num_planes,
 +              unsigned int sizes[], void *alloc_ctxs[])
 +
 +{
 +      struct dt3155_priv *pd = vb2_get_drv_priv(vq);
 +      unsigned size = pd->width * pd->height;
 +
 +      if (vq->num_buffers + *nbuffers < 2)
 +              *nbuffers = 2 - vq->num_buffers;
 +      if (fmt && fmt->fmt.pix.sizeimage < size)
 +              return -EINVAL;
 +      *num_planes = 1;
 +      sizes[0] = fmt ? fmt->fmt.pix.sizeimage : size;
 +      alloc_ctxs[0] = pd->alloc_ctx;
 +      return 0;
 +}
 +
 +static int dt3155_buf_prepare(struct vb2_buffer *vb)
 +{
 +      struct dt3155_priv *pd = vb2_get_drv_priv(vb->vb2_queue);
 +
 +      vb2_set_plane_payload(vb, 0, pd->width * pd->height);
 +      return 0;
 +}
 +
 +static int dt3155_start_streaming(struct vb2_queue *q, unsigned count)
 +{
 +      struct dt3155_priv *pd = vb2_get_drv_priv(q);
 +      struct vb2_buffer *vb = pd->curr_buf;
 +      dma_addr_t dma_addr;
 +
 +      pd->sequence = 0;
 +      dma_addr = vb2_dma_contig_plane_dma_addr(vb, 0);
 +      iowrite32(dma_addr, pd->regs + EVEN_DMA_START);
 +      iowrite32(dma_addr + pd->width, pd->regs + ODD_DMA_START);
 +      iowrite32(pd->width, pd->regs + EVEN_DMA_STRIDE);
 +      iowrite32(pd->width, pd->regs + ODD_DMA_STRIDE);
 +      /* enable interrupts, clear all irq flags */
 +      iowrite32(FLD_START_EN | FLD_END_ODD_EN | FLD_START |
 +                      FLD_END_EVEN | FLD_END_ODD, pd->regs + INT_CSR);
 +      iowrite32(FIFO_EN | SRST | FLD_CRPT_ODD | FLD_CRPT_EVEN |
 +                FLD_DN_ODD | FLD_DN_EVEN | CAP_CONT_EVEN | CAP_CONT_ODD,
 +                                                      pd->regs + CSR1);
 +      wait_i2c_reg(pd->regs);
 +      write_i2c_reg(pd->regs, CONFIG, pd->config);
 +      write_i2c_reg(pd->regs, EVEN_CSR, CSR_ERROR | CSR_DONE);
 +      write_i2c_reg(pd->regs, ODD_CSR, CSR_ERROR | CSR_DONE);
 +
 +      /*  start the board  */
 +      write_i2c_reg(pd->regs, CSR2, pd->csr2 | BUSY_EVEN | BUSY_ODD);
 +      return 0;
 +}
 +
 +static void dt3155_stop_streaming(struct vb2_queue *q)
 +{
 +      struct dt3155_priv *pd = vb2_get_drv_priv(q);
 +      struct vb2_buffer *vb;
 +
 +      spin_lock_irq(&pd->lock);
 +      /* stop the board */
 +      write_i2c_reg_nowait(pd->regs, CSR2, pd->csr2);
 +      iowrite32(FIFO_EN | SRST | FLD_CRPT_ODD | FLD_CRPT_EVEN |
 +                FLD_DN_ODD | FLD_DN_EVEN, pd->regs + CSR1);
 +      /* disable interrupts, clear all irq flags */
 +      iowrite32(FLD_START | FLD_END_EVEN | FLD_END_ODD, pd->regs + INT_CSR);
 +      spin_unlock_irq(&pd->lock);
 +
 +      /*
 +       * It is not clear whether the DMA stops at once or whether it
 +       * will finish the current frame or field first. To be on the
 +       * safe side we wait a bit.
 +       */
 +      msleep(45);
 +
 +      spin_lock_irq(&pd->lock);
 +      if (pd->curr_buf) {
 +              vb2_buffer_done(pd->curr_buf, VB2_BUF_STATE_ERROR);
 +              pd->curr_buf = NULL;
 +      }
 +
 +      while (!list_empty(&pd->dmaq)) {
 +              vb = list_first_entry(&pd->dmaq, typeof(*vb), done_entry);
 +              list_del(&vb->done_entry);
 +              vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
 +      }
 +      spin_unlock_irq(&pd->lock);
 +}
 +
 +static void dt3155_buf_queue(struct vb2_buffer *vb)
 +{
 +      struct dt3155_priv *pd = vb2_get_drv_priv(vb->vb2_queue);
 +
 +      /*  pd->vidq.streaming = 1 when dt3155_buf_queue() is invoked  */
 +      spin_lock_irq(&pd->lock);
 +      if (pd->curr_buf)
 +              list_add_tail(&vb->done_entry, &pd->dmaq);
 +      else
 +              pd->curr_buf = vb;
 +      spin_unlock_irq(&pd->lock);
 +}
 +
 +static const struct vb2_ops q_ops = {
 +      .queue_setup = dt3155_queue_setup,
 +      .wait_prepare = vb2_ops_wait_prepare,
 +      .wait_finish = vb2_ops_wait_finish,
 +      .buf_prepare = dt3155_buf_prepare,
 +      .start_streaming = dt3155_start_streaming,
 +      .stop_streaming = dt3155_stop_streaming,
 +      .buf_queue = dt3155_buf_queue,
 +};
 +
 +static irqreturn_t dt3155_irq_handler_even(int irq, void *dev_id)
 +{
 +      struct dt3155_priv *ipd = dev_id;
 +      struct vb2_buffer *ivb;
 +      dma_addr_t dma_addr;
 +      u32 tmp;
 +
 +      tmp = ioread32(ipd->regs + INT_CSR) & (FLD_START | FLD_END_ODD);
 +      if (!tmp)
 +              return IRQ_NONE;  /* not our irq */
 +      if ((tmp & FLD_START) && !(tmp & FLD_END_ODD)) {
 +              iowrite32(FLD_START_EN | FLD_END_ODD_EN | FLD_START,
 +                                                      ipd->regs + INT_CSR);
 +              return IRQ_HANDLED; /* start of field irq */
 +      }
 +      tmp = ioread32(ipd->regs + CSR1) & (FLD_CRPT_EVEN | FLD_CRPT_ODD);
 +      if (tmp) {
 +              iowrite32(FIFO_EN | SRST | FLD_CRPT_ODD | FLD_CRPT_EVEN |
 +                                              FLD_DN_ODD | FLD_DN_EVEN |
 +                                              CAP_CONT_EVEN | CAP_CONT_ODD,
 +                                                      ipd->regs + CSR1);
 +              mmiowb();
 +      }
 +
 +      spin_lock(&ipd->lock);
 +      if (ipd->curr_buf && !list_empty(&ipd->dmaq)) {
 +              v4l2_get_timestamp(&ipd->curr_buf->v4l2_buf.timestamp);
 +              ipd->curr_buf->v4l2_buf.sequence = ipd->sequence++;
 +              ipd->curr_buf->v4l2_buf.field = V4L2_FIELD_NONE;
 +              vb2_buffer_done(ipd->curr_buf, VB2_BUF_STATE_DONE);
 +
 +              ivb = list_first_entry(&ipd->dmaq, typeof(*ivb), done_entry);
 +              list_del(&ivb->done_entry);
 +              ipd->curr_buf = ivb;
 +              dma_addr = vb2_dma_contig_plane_dma_addr(ivb, 0);
 +              iowrite32(dma_addr, ipd->regs + EVEN_DMA_START);
 +              iowrite32(dma_addr + ipd->width, ipd->regs + ODD_DMA_START);
 +              iowrite32(ipd->width, ipd->regs + EVEN_DMA_STRIDE);
 +              iowrite32(ipd->width, ipd->regs + ODD_DMA_STRIDE);
 +              mmiowb();
 +      }
 +
 +      /* enable interrupts, clear all irq flags */
 +      iowrite32(FLD_START_EN | FLD_END_ODD_EN | FLD_START |
 +                      FLD_END_EVEN | FLD_END_ODD, ipd->regs + INT_CSR);
 +      spin_unlock(&ipd->lock);
 +      return IRQ_HANDLED;
 +}
 +
 +static const struct v4l2_file_operations dt3155_fops = {
 +      .owner = THIS_MODULE,
 +      .open = v4l2_fh_open,
 +      .release = vb2_fop_release,
 +      .unlocked_ioctl = video_ioctl2,
 +      .read = vb2_fop_read,
 +      .mmap = vb2_fop_mmap,
 +      .poll = vb2_fop_poll
 +};
 +
 +static int dt3155_querycap(struct file *filp, void *p,
 +                         struct v4l2_capability *cap)
 +{
 +      struct dt3155_priv *pd = video_drvdata(filp);
 +
 +      strcpy(cap->driver, DT3155_NAME);
 +      strcpy(cap->card, DT3155_NAME " frame grabber");
 +      sprintf(cap->bus_info, "PCI:%s", pci_name(pd->pdev));
 +      cap->device_caps = V4L2_CAP_VIDEO_CAPTURE |
 +              V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
 +      cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
 +      return 0;
 +}
 +
 +static int dt3155_enum_fmt_vid_cap(struct file *filp,
 +                                 void *p, struct v4l2_fmtdesc *f)
 +{
 +      if (f->index)
 +              return -EINVAL;
 +      f->pixelformat = V4L2_PIX_FMT_GREY;
 +      strcpy(f->description, "8-bit Greyscale");
 +      return 0;
 +}
 +
 +static int dt3155_fmt_vid_cap(struct file *filp, void *p, struct v4l2_format *f)
 +{
 +      struct dt3155_priv *pd = video_drvdata(filp);
 +
 +      f->fmt.pix.width = pd->width;
 +      f->fmt.pix.height = pd->height;
 +      f->fmt.pix.pixelformat = V4L2_PIX_FMT_GREY;
 +      f->fmt.pix.field = V4L2_FIELD_NONE;
 +      f->fmt.pix.bytesperline = f->fmt.pix.width;
 +      f->fmt.pix.sizeimage = f->fmt.pix.width * f->fmt.pix.height;
 +      f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
 +      return 0;
 +}
 +
 +static int dt3155_g_std(struct file *filp, void *p, v4l2_std_id *norm)
 +{
 +      struct dt3155_priv *pd = video_drvdata(filp);
 +
 +      *norm = pd->std;
 +      return 0;
 +}
 +
 +static int dt3155_s_std(struct file *filp, void *p, v4l2_std_id norm)
 +{
 +      struct dt3155_priv *pd = video_drvdata(filp);
 +
 +      if (pd->std == norm)
 +              return 0;
 +      if (vb2_is_busy(&pd->vidq))
 +              return -EBUSY;
 +      pd->std = norm;
 +      if (pd->std & V4L2_STD_525_60) {
 +              pd->csr2 = VT_60HZ;
 +              pd->width = 640;
 +              pd->height = 480;
 +      } else {
 +              pd->csr2 = VT_50HZ;
 +              pd->width = 768;
 +              pd->height = 576;
 +      }
 +      return 0;
 +}
 +
 +static int dt3155_enum_input(struct file *filp, void *p,
 +                           struct v4l2_input *input)
 +{
 +      if (input->index > 3)
 +              return -EINVAL;
 +      if (input->index)
 +              snprintf(input->name, sizeof(input->name), "VID%d",
 +                       input->index);
 +      else
 +              strlcpy(input->name, "J2/VID0", sizeof(input->name));
 +      input->type = V4L2_INPUT_TYPE_CAMERA;
 +      input->std = V4L2_STD_ALL;
 +      input->status = 0;
 +      return 0;
 +}
 +
 +static int dt3155_g_input(struct file *filp, void *p, unsigned int *i)
 +{
 +      struct dt3155_priv *pd = video_drvdata(filp);
 +
 +      *i = pd->input;
 +      return 0;
 +}
 +
 +static int dt3155_s_input(struct file *filp, void *p, unsigned int i)
 +{
 +      struct dt3155_priv *pd = video_drvdata(filp);
 +
 +      if (i > 3)
 +              return -EINVAL;
 +      pd->input = i;
 +      write_i2c_reg(pd->regs, AD_ADDR, AD_CMD_REG);
 +      write_i2c_reg(pd->regs, AD_CMD, (i << 6) | (i << 4) | SYNC_LVL_3);
 +      return 0;
 +}
 +
 +static const struct v4l2_ioctl_ops dt3155_ioctl_ops = {
 +      .vidioc_querycap = dt3155_querycap,
 +      .vidioc_enum_fmt_vid_cap = dt3155_enum_fmt_vid_cap,
 +      .vidioc_try_fmt_vid_cap = dt3155_fmt_vid_cap,
 +      .vidioc_g_fmt_vid_cap = dt3155_fmt_vid_cap,
 +      .vidioc_s_fmt_vid_cap = dt3155_fmt_vid_cap,
 +      .vidioc_reqbufs = vb2_ioctl_reqbufs,
 +      .vidioc_create_bufs = vb2_ioctl_create_bufs,
 +      .vidioc_querybuf = vb2_ioctl_querybuf,
 +      .vidioc_expbuf = vb2_ioctl_expbuf,
 +      .vidioc_qbuf = vb2_ioctl_qbuf,
 +      .vidioc_dqbuf = vb2_ioctl_dqbuf,
 +      .vidioc_streamon = vb2_ioctl_streamon,
 +      .vidioc_streamoff = vb2_ioctl_streamoff,
 +      .vidioc_g_std = dt3155_g_std,
 +      .vidioc_s_std = dt3155_s_std,
 +      .vidioc_enum_input = dt3155_enum_input,
 +      .vidioc_g_input = dt3155_g_input,
 +      .vidioc_s_input = dt3155_s_input,
 +};
 +
 +static int dt3155_init_board(struct dt3155_priv *pd)
 +{
 +      struct pci_dev *pdev = pd->pdev;
 +      int i;
 +      u8 tmp = 0;
 +
 +      pci_set_master(pdev); /* dt3155 needs it */
 +
 +      /*  resetting the adapter  */
 +      iowrite32(ADDR_ERR_ODD | ADDR_ERR_EVEN | FLD_CRPT_ODD | FLD_CRPT_EVEN |
 +                      FLD_DN_ODD | FLD_DN_EVEN, pd->regs + CSR1);
 +      mmiowb();
 +      msleep(20);
 +
 +      /*  initializing adapter registers  */
 +      iowrite32(FIFO_EN | SRST, pd->regs + CSR1);
 +      mmiowb();
 +      iowrite32(0xEEEEEE01, pd->regs + EVEN_PIXEL_FMT);
 +      iowrite32(0xEEEEEE01, pd->regs + ODD_PIXEL_FMT);
 +      iowrite32(0x00000020, pd->regs + FIFO_TRIGER);
 +      iowrite32(0x00000103, pd->regs + XFER_MODE);
 +      iowrite32(0, pd->regs + RETRY_WAIT_CNT);
 +      iowrite32(0, pd->regs + INT_CSR);
 +      iowrite32(1, pd->regs + EVEN_FLD_MASK);
 +      iowrite32(1, pd->regs + ODD_FLD_MASK);
 +      iowrite32(0, pd->regs + MASK_LENGTH);
 +      iowrite32(0x0005007C, pd->regs + FIFO_FLAG_CNT);
 +      iowrite32(0x01010101, pd->regs + IIC_CLK_DUR);
 +      mmiowb();
 +
 +      /* verifying that we have a DT3155 board (not just a SAA7116 chip) */
 +      read_i2c_reg(pd->regs, DT_ID, &tmp);
 +      if (tmp != DT3155_ID)
 +              return -ENODEV;
 +
 +      /* initialize AD LUT */
 +      write_i2c_reg(pd->regs, AD_ADDR, 0);
 +      for (i = 0; i < 256; i++)
 +              write_i2c_reg(pd->regs, AD_LUT, i);
 +
 +      /* initialize ADC references */
 +      /* FIXME: pos_ref & neg_ref depend on VT_50HZ */
 +      write_i2c_reg(pd->regs, AD_ADDR, AD_CMD_REG);
 +      write_i2c_reg(pd->regs, AD_CMD, VIDEO_CNL_1 | SYNC_CNL_1 | SYNC_LVL_3);
 +      write_i2c_reg(pd->regs, AD_ADDR, AD_POS_REF);
 +      write_i2c_reg(pd->regs, AD_CMD, 34);
 +      write_i2c_reg(pd->regs, AD_ADDR, AD_NEG_REF);
 +      write_i2c_reg(pd->regs, AD_CMD, 0);
 +
 +      /* initialize PM LUT */
 +      write_i2c_reg(pd->regs, CONFIG, pd->config | PM_LUT_PGM);
 +      for (i = 0; i < 256; i++) {
 +              write_i2c_reg(pd->regs, PM_LUT_ADDR, i);
 +              write_i2c_reg(pd->regs, PM_LUT_DATA, i);
 +      }
 +      write_i2c_reg(pd->regs, CONFIG, pd->config | PM_LUT_PGM | PM_LUT_SEL);
 +      for (i = 0; i < 256; i++) {
 +              write_i2c_reg(pd->regs, PM_LUT_ADDR, i);
 +              write_i2c_reg(pd->regs, PM_LUT_DATA, i);
 +      }
 +      write_i2c_reg(pd->regs, CONFIG, pd->config); /*  ACQ_MODE_EVEN  */
 +
 +      /* select channel 1 for input and set sync level */
 +      write_i2c_reg(pd->regs, AD_ADDR, AD_CMD_REG);
 +      write_i2c_reg(pd->regs, AD_CMD, VIDEO_CNL_1 | SYNC_CNL_1 | SYNC_LVL_3);
 +
 +      /* disable all irqs, clear all irq flags */
 +      iowrite32(FLD_START | FLD_END_EVEN | FLD_END_ODD,
 +                      pd->regs + INT_CSR);
 +
 +      return 0;
 +}
 +
 +static struct video_device dt3155_vdev = {
 +      .name = DT3155_NAME,
 +      .fops = &dt3155_fops,
 +      .ioctl_ops = &dt3155_ioctl_ops,
 +      .minor = -1,
 +      .release = video_device_release_empty,
 +      .tvnorms = V4L2_STD_ALL,
 +};
 +
 +static int dt3155_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 +{
 +      int err;
 +      struct dt3155_priv *pd;
 +
 +      err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
 +      if (err)
 +              return -ENODEV;
 +      pd = devm_kzalloc(&pdev->dev, sizeof(*pd), GFP_KERNEL);
 +      if (!pd)
 +              return -ENOMEM;
 +
 +      err = v4l2_device_register(&pdev->dev, &pd->v4l2_dev);
 +      if (err)
 +              return err;
 +      pd->vdev = dt3155_vdev;
 +      pd->vdev.v4l2_dev = &pd->v4l2_dev;
 +      video_set_drvdata(&pd->vdev, pd);  /* for use in video_fops */
 +      pd->pdev = pdev;
 +      pd->std = V4L2_STD_625_50;
 +      pd->csr2 = VT_50HZ;
 +      pd->width = 768;
 +      pd->height = 576;
 +      INIT_LIST_HEAD(&pd->dmaq);
 +      mutex_init(&pd->mux);
 +      pd->vdev.lock = &pd->mux; /* for locking v4l2_file_operations */
 +      pd->vidq.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 +      pd->vidq.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
 +      pd->vidq.io_modes = VB2_MMAP | VB2_DMABUF | VB2_READ;
 +      pd->vidq.ops = &q_ops;
 +      pd->vidq.mem_ops = &vb2_dma_contig_memops;
 +      pd->vidq.drv_priv = pd;
 +      pd->vidq.min_buffers_needed = 2;
 +      pd->vidq.gfp_flags = GFP_DMA32;
 +      pd->vidq.lock = &pd->mux; /* for locking v4l2_file_operations */
 +      pd->vdev.queue = &pd->vidq;
 +      err = vb2_queue_init(&pd->vidq);
 +      if (err < 0)
 +              goto err_v4l2_dev_unreg;
 +      pd->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev);
 +      if (IS_ERR(pd->alloc_ctx)) {
 +              dev_err(&pdev->dev, "Can't allocate buffer context");
 +              err = PTR_ERR(pd->alloc_ctx);
 +              goto err_v4l2_dev_unreg;
 +      }
 +      spin_lock_init(&pd->lock);
 +      pd->config = ACQ_MODE_EVEN;
 +      err = pci_enable_device(pdev);
 +      if (err)
 +              goto err_free_ctx;
 +      err = pci_request_region(pdev, 0, pci_name(pdev));
 +      if (err)
 +              goto err_pci_disable;
 +      pd->regs = pci_iomap(pdev, 0, pci_resource_len(pd->pdev, 0));
 +      if (!pd->regs) {
 +              err = -ENOMEM;
 +              goto err_free_reg;
 +      }
 +      err = dt3155_init_board(pd);
 +      if (err)
 +              goto err_iounmap;
 +      err = request_irq(pd->pdev->irq, dt3155_irq_handler_even,
 +                                      IRQF_SHARED, DT3155_NAME, pd);
 +      if (err)
 +              goto err_iounmap;
 +      err = video_register_device(&pd->vdev, VFL_TYPE_GRABBER, -1);
 +      if (err)
 +              goto err_free_irq;
 +      dev_info(&pdev->dev, "/dev/video%i is ready\n", pd->vdev.minor);
 +      return 0;  /*   success   */
 +
 +err_free_irq:
 +      free_irq(pd->pdev->irq, pd);
 +err_iounmap:
 +      pci_iounmap(pdev, pd->regs);
 +err_free_reg:
 +      pci_release_region(pdev, 0);
 +err_pci_disable:
 +      pci_disable_device(pdev);
 +err_free_ctx:
 +      vb2_dma_contig_cleanup_ctx(pd->alloc_ctx);
 +err_v4l2_dev_unreg:
 +      v4l2_device_unregister(&pd->v4l2_dev);
 +      return err;
 +}
 +
 +static void dt3155_remove(struct pci_dev *pdev)
 +{
 +      struct v4l2_device *v4l2_dev = pci_get_drvdata(pdev);
 +      struct dt3155_priv *pd = container_of(v4l2_dev, struct dt3155_priv,
 +                                            v4l2_dev);
 +
 +      video_unregister_device(&pd->vdev);
 +      free_irq(pd->pdev->irq, pd);
 +      vb2_queue_release(&pd->vidq);
 +      v4l2_device_unregister(&pd->v4l2_dev);
 +      pci_iounmap(pdev, pd->regs);
 +      pci_release_region(pdev, 0);
 +      pci_disable_device(pdev);
 +      vb2_dma_contig_cleanup_ctx(pd->alloc_ctx);
 +}
 +
 +static const struct pci_device_id pci_ids[] = {
 +      { PCI_DEVICE(PCI_VENDOR_ID_INTEL, DT3155_DEVICE_ID) },
 +      { 0, /* zero marks the end */ },
 +};
 +MODULE_DEVICE_TABLE(pci, pci_ids);
 +
 +static struct pci_driver pci_driver = {
 +      .name = DT3155_NAME,
 +      .id_table = pci_ids,
 +      .probe = dt3155_probe,
 +      .remove = dt3155_remove,
 +};
 +
 +module_pci_driver(pci_driver);
 +
 +MODULE_DESCRIPTION("video4linux pci-driver for dt3155 frame grabber");
 +MODULE_AUTHOR("Marin Mitov <mitov@issp.bas.bg>");
 +MODULE_VERSION(DT3155_VERSION);
 +MODULE_LICENSE("GPL");
index a6558409ba45350a2449e8eb6b47b5bf6c4def61,aad16bc9e630753f4f0b1f506b3c86ffec32e6c7..e7a29e2750c6aeb274047b37a9d32eb3fe70961d
@@@ -158,8 -158,8 +158,8 @@@ static u32 goldfish_cmd_status(struct g
        struct goldfish_pipe_dev *dev = pipe->dev;
  
        spin_lock_irqsave(&dev->lock, flags);
-       gf_write64((u64)(unsigned long)pipe, dev->base + PIPE_REG_CHANNEL,
-                               dev->base + PIPE_REG_CHANNEL_HIGH);
+       gf_write_ptr(pipe, dev->base + PIPE_REG_CHANNEL,
+                    dev->base + PIPE_REG_CHANNEL_HIGH);
        writel(cmd, dev->base + PIPE_REG_COMMAND);
        status = readl(dev->base + PIPE_REG_STATUS);
        spin_unlock_irqrestore(&dev->lock, flags);
@@@ -172,8 -172,8 +172,8 @@@ static void goldfish_cmd(struct goldfis
        struct goldfish_pipe_dev *dev = pipe->dev;
  
        spin_lock_irqsave(&dev->lock, flags);
-       gf_write64((u64)(unsigned long)pipe, dev->base + PIPE_REG_CHANNEL,
-                               dev->base + PIPE_REG_CHANNEL_HIGH);
+       gf_write_ptr(pipe, dev->base + PIPE_REG_CHANNEL,
+                    dev->base + PIPE_REG_CHANNEL_HIGH);
        writel(cmd, dev->base + PIPE_REG_COMMAND);
        spin_unlock_irqrestore(&dev->lock, flags);
  }
@@@ -282,7 -282,7 +282,7 @@@ static ssize_t goldfish_pipe_read_write
                return -EIO;
  
        /* Null reads or writes succeeds */
 -      if (unlikely(bufflen) == 0)
 +      if (unlikely(bufflen == 0))
                return 0;
  
        /* Check the buffer range for access */
                spin_lock_irqsave(&dev->lock, irq_flags);
                if (access_with_param(dev, CMD_WRITE_BUFFER + cmd_offset,
                                address, avail, pipe, &status)) {
-                       gf_write64((u64)(unsigned long)pipe,
-                                  dev->base + PIPE_REG_CHANNEL,
-                                  dev->base + PIPE_REG_CHANNEL_HIGH);
+                       gf_write_ptr(pipe, dev->base + PIPE_REG_CHANNEL,
+                                    dev->base + PIPE_REG_CHANNEL_HIGH);
                        writel(avail, dev->base + PIPE_REG_SIZE);
-                       gf_write64(address, dev->base + PIPE_REG_ADDRESS,
-                               dev->base + PIPE_REG_ADDRESS_HIGH);
+                       gf_write_ptr((void *)address,
+                                    dev->base + PIPE_REG_ADDRESS,
+                                    dev->base + PIPE_REG_ADDRESS_HIGH);
                        writel(CMD_WRITE_BUFFER + cmd_offset,
                                        dev->base + PIPE_REG_COMMAND);
                        status = readl(dev->base + PIPE_REG_STATUS);
index 2345ee7342d9bfb428f672c7cb3af2cc56cc89f6,defddf5f80dddf8f32f1504f94eadc3ffe19f908..872bd603fd0d8b8ae207be9e2d67e71c5b5e04ed
@@@ -156,20 -156,27 +156,27 @@@ static unsigned long lowmem_scan(struc
                             p->pid, p->comm, oom_score_adj, tasksize);
        }
        if (selected) {
-               lowmem_print(1, "send sigkill to %d (%s), adj %hd, size %d\n",
-                            selected->pid, selected->comm,
-                            selected_oom_score_adj, selected_tasksize);
-               lowmem_deathpending_timeout = jiffies + HZ;
+               task_lock(selected);
+               if (!selected->mm) {
+                       /* Already exited, cannot do mark_tsk_oom_victim() */
+                       task_unlock(selected);
+                       goto out;
+               }
                /*
                 * FIXME: lowmemorykiller shouldn't abuse global OOM killer
                 * infrastructure. There is no real reason why the selected
                 * task should have access to the memory reserves.
                 */
 -              mark_tsk_oom_victim(selected);
 +              mark_oom_victim(selected);
+               task_unlock(selected);
+               lowmem_print(1, "send sigkill to %d (%s), adj %hd, size %d\n",
+                            selected->pid, selected->comm,
+                            selected_oom_score_adj, selected_tasksize);
+               lowmem_deathpending_timeout = jiffies + HZ;
                send_sig(SIGKILL, selected, 0);
                rem += selected_tasksize;
        }
+ out:
        lowmem_print(4, "lowmem_scan %lu, %x, return %lu\n",
                     sc->nr_to_scan, sc->gfp_mask, rem);
        rcu_read_unlock();
index c41b5575df05e38d7c5d5cdd3503d136affaabab,48454a576b7ad80e43faa3e7be11aa0b089fbb97..4eb24a11b02a33ece27e487c1b1f81e6ceebfb45
   * Author: Eric Barton <eric@bartonsoftware.com>
   */
  
- #include "o2iblnd.h"
  #include <asm/div64.h>
+ #include <asm/page.h>
+ #include "o2iblnd.h"
  
  static lnd_t the_o2iblnd = {
-       .lnd_type       = O2IBLND,
-       .lnd_startup    = kiblnd_startup,
-       .lnd_shutdown   = kiblnd_shutdown,
-       .lnd_ctl        = kiblnd_ctl,
-       .lnd_query      = kiblnd_query,
-       .lnd_send       = kiblnd_send,
-       .lnd_recv       = kiblnd_recv,
+       .lnd_type     = O2IBLND,
+       .lnd_startup  = kiblnd_startup,
+       .lnd_shutdown = kiblnd_shutdown,
+       .lnd_ctl      = kiblnd_ctl,
+       .lnd_query    = kiblnd_query,
+       .lnd_send     = kiblnd_send,
+       .lnd_recv     = kiblnd_recv,
  };
  
- kib_data_t          kiblnd_data;
+ kib_data_t kiblnd_data;
  
  static __u32 kiblnd_cksum(void *ptr, int nob)
  {
-       char  *c  = ptr;
-       __u32  sum = 0;
+       char *c = ptr;
+       __u32 sum = 0;
  
        while (nob-- > 0)
                sum = ((sum << 1) | (sum >> 31)) + *c++;
@@@ -138,10 -139,10 +139,10 @@@ static int kiblnd_msgtype2size(int type
  
  static int kiblnd_unpack_rd(kib_msg_t *msg, int flip)
  {
-       kib_rdma_desc_t   *rd;
-       int             nob;
-       int             n;
-       int             i;
+       kib_rdma_desc_t *rd;
+       int nob;
+       int n;
+       int i;
  
        LASSERT(msg->ibm_type == IBLND_MSG_GET_REQ ||
                 msg->ibm_type == IBLND_MSG_PUT_ACK);
@@@ -210,10 -211,10 +211,10 @@@ void kiblnd_pack_msg(lnet_ni_t *ni, kib
  int kiblnd_unpack_msg(kib_msg_t *msg, int nob)
  {
        const int hdr_size = offsetof(kib_msg_t, ibm_u);
-       __u32     msg_cksum;
-       __u16     version;
-       int       msg_nob;
-       int       flip;
+       __u32 msg_cksum;
+       __u16 version;
+       int msg_nob;
+       int flip;
  
        /* 6 bytes are enough to have received magic + version */
        if (nob < 6) {
  
  int kiblnd_create_peer(lnet_ni_t *ni, kib_peer_t **peerp, lnet_nid_t nid)
  {
-       kib_peer_t      *peer;
-       kib_net_t       *net = ni->ni_data;
-       int             cpt = lnet_cpt_of_nid(nid);
-       unsigned long   flags;
+       kib_peer_t *peer;
+       kib_net_t *net = ni->ni_data;
+       int cpt = lnet_cpt_of_nid(nid);
+       unsigned long flags;
  
        LASSERT(net != NULL);
        LASSERT(nid != LNET_NID_ANY);
@@@ -385,9 -386,9 +386,9 @@@ kib_peer_t *kiblnd_find_peer_locked(lne
  {
        /* the caller is responsible for accounting the additional reference
         * that this creates */
-       struct list_head       *peer_list = kiblnd_nid2peerlist(nid);
-       struct list_head       *tmp;
-       kib_peer_t       *peer;
+       struct list_head *peer_list = kiblnd_nid2peerlist(nid);
+       struct list_head *tmp;
+       kib_peer_t *peer;
  
        list_for_each(tmp, peer_list) {
  
@@@ -422,10 -423,10 +423,10 @@@ void kiblnd_unlink_peer_locked(kib_peer
  static int kiblnd_get_peer_info(lnet_ni_t *ni, int index,
                                lnet_nid_t *nidp, int *count)
  {
-       kib_peer_t          *peer;
-       struct list_head            *ptmp;
-       int                 i;
-       unsigned long     flags;
+       kib_peer_t *peer;
+       struct list_head *ptmp;
+       int i;
+       unsigned long flags;
  
        read_lock_irqsave(&kiblnd_data.kib_global_lock, flags);
  
  
  static void kiblnd_del_peer_locked(kib_peer_t *peer)
  {
-       struct list_head           *ctmp;
-       struct list_head           *cnxt;
-       kib_conn_t         *conn;
+       struct list_head *ctmp;
+       struct list_head *cnxt;
+       kib_conn_t *conn;
  
        if (list_empty(&peer->ibp_conns)) {
                kiblnd_unlink_peer_locked(peer);
  static int kiblnd_del_peer(lnet_ni_t *ni, lnet_nid_t nid)
  {
        LIST_HEAD(zombies);
-       struct list_head            *ptmp;
-       struct list_head            *pnxt;
-       kib_peer_t          *peer;
-       int                 lo;
-       int                 hi;
-       int                 i;
-       unsigned long     flags;
-       int                 rc = -ENOENT;
+       struct list_head *ptmp;
+       struct list_head *pnxt;
+       kib_peer_t *peer;
+       int lo;
+       int hi;
+       int i;
+       unsigned long flags;
+       int rc = -ENOENT;
  
        write_lock_irqsave(&kiblnd_data.kib_global_lock, flags);
  
  
  static kib_conn_t *kiblnd_get_conn_by_idx(lnet_ni_t *ni, int index)
  {
-       kib_peer_t          *peer;
-       struct list_head            *ptmp;
-       kib_conn_t          *conn;
-       struct list_head            *ctmp;
-       int                 i;
-       unsigned long     flags;
+       kib_peer_t *peer;
+       struct list_head *ptmp;
+       kib_conn_t *conn;
+       struct list_head *ctmp;
+       int i;
+       unsigned long flags;
  
        read_lock_irqsave(&kiblnd_data.kib_global_lock, flags);
  
@@@ -593,7 -594,7 +594,7 @@@ int kiblnd_translate_mtu(int value
  
  static void kiblnd_setup_mtu_locked(struct rdma_cm_id *cmid)
  {
-       int        mtu;
+       int mtu;
  
        /* XXX There is no path record for iWARP, set by netdev->change_mtu? */
        if (cmid->route.path_rec == NULL)
  
  static int kiblnd_get_completion_vector(kib_conn_t *conn, int cpt)
  {
-       cpumask_t       *mask;
-       int             vectors;
-       int             off;
-       int             i;
-       lnet_nid_t      nid = conn->ibc_peer->ibp_nid;
+       cpumask_t *mask;
+       int vectors;
+       int off;
+       int i;
+       lnet_nid_t nid = conn->ibc_peer->ibp_nid;
  
        vectors = conn->ibc_cmid->device->num_comp_vectors;
        if (vectors <= 1)
@@@ -642,18 -643,17 +643,18 @@@ kib_conn_t *kiblnd_create_conn(kib_peer
         * she must dispose of 'cmid'.  (Actually I'd block forever if I tried
         * to destroy 'cmid' here since I'm called from the CM which still has
         * its ref on 'cmid'). */
-       rwlock_t                *glock = &kiblnd_data.kib_global_lock;
-       kib_net_t             *net = peer->ibp_ni->ni_data;
-       kib_dev_t             *dev;
+       rwlock_t *glock = &kiblnd_data.kib_global_lock;
+       kib_net_t *net = peer->ibp_ni->ni_data;
+       kib_dev_t *dev;
        struct ib_qp_init_attr *init_qp_attr;
-       struct kib_sched_info   *sched;
-       struct ib_cq_init_attr  cq_attr = {};
-       kib_conn_t              *conn;
-       struct ib_cq            *cq;
-       unsigned long           flags;
-       int                     cpt;
-       int                     rc;
-       int                     i;
+       struct kib_sched_info *sched;
++      struct ib_cq_init_attr cq_attr = {};
+       kib_conn_t *conn;
+       struct ib_cq *cq;
+       unsigned long flags;
+       int cpt;
+       int rc;
+       int i;
  
        LASSERT(net != NULL);
        LASSERT(!in_interrupt());
  
        kiblnd_map_rx_descs(conn);
  
 +      cq_attr.cqe = IBLND_CQ_ENTRIES(version);
 +      cq_attr.comp_vector = kiblnd_get_completion_vector(conn, cpt);
        cq = ib_create_cq(cmid->device,
                          kiblnd_cq_completion, kiblnd_cq_event, conn,
 -                        IBLND_CQ_ENTRIES(version),
 -                        kiblnd_get_completion_vector(conn, cpt));
 +                        &cq_attr);
        if (IS_ERR(cq)) {
                CERROR("Can't create CQ: %ld, cqe: %d\n",
                       PTR_ERR(cq), IBLND_CQ_ENTRIES(version));
  void kiblnd_destroy_conn(kib_conn_t *conn)
  {
        struct rdma_cm_id *cmid = conn->ibc_cmid;
-       kib_peer_t      *peer = conn->ibc_peer;
-       int             rc;
+       kib_peer_t *peer = conn->ibc_peer;
+       int rc;
  
        LASSERT(!in_interrupt());
        LASSERT(atomic_read(&conn->ibc_refcount) == 0);
  
  int kiblnd_close_peer_conns_locked(kib_peer_t *peer, int why)
  {
-       kib_conn_t           *conn;
-       struct list_head             *ctmp;
-       struct list_head             *cnxt;
-       int                  count = 0;
+       kib_conn_t *conn;
+       struct list_head *ctmp;
+       struct list_head *cnxt;
+       int count = 0;
  
        list_for_each_safe(ctmp, cnxt, &peer->ibp_conns) {
                conn = list_entry(ctmp, kib_conn_t, ibc_list);
  int kiblnd_close_stale_conns_locked(kib_peer_t *peer,
                                     int version, __u64 incarnation)
  {
-       kib_conn_t           *conn;
-       struct list_head             *ctmp;
-       struct list_head             *cnxt;
-       int                  count = 0;
+       kib_conn_t *conn;
+       struct list_head *ctmp;
+       struct list_head *cnxt;
+       int count = 0;
  
        list_for_each_safe(ctmp, cnxt, &peer->ibp_conns) {
                conn = list_entry(ctmp, kib_conn_t, ibc_list);
  
  static int kiblnd_close_matching_conns(lnet_ni_t *ni, lnet_nid_t nid)
  {
-       kib_peer_t           *peer;
-       struct list_head             *ptmp;
-       struct list_head             *pnxt;
-       int                  lo;
-       int                  hi;
-       int                  i;
-       unsigned long      flags;
-       int                  count = 0;
+       kib_peer_t *peer;
+       struct list_head *ptmp;
+       struct list_head *pnxt;
+       int lo;
+       int hi;
+       int i;
+       unsigned long flags;
+       int count = 0;
  
        write_lock_irqsave(&kiblnd_data.kib_global_lock, flags);
  
  int kiblnd_ctl(lnet_ni_t *ni, unsigned int cmd, void *arg)
  {
        struct libcfs_ioctl_data *data = arg;
-       int                    rc = -EINVAL;
+       int rc = -EINVAL;
  
        switch (cmd) {
        case IOC_LIBCFS_GET_PEER: {
-               lnet_nid_t   nid = 0;
-               int       count = 0;
+               lnet_nid_t nid = 0;
+               int count = 0;
  
                rc = kiblnd_get_peer_info(ni, data->ioc_count,
                                          &nid, &count);
-               data->ioc_nid    = nid;
-               data->ioc_count  = count;
+               data->ioc_nid   = nid;
+               data->ioc_count = count;
                break;
        }
  
  
  void kiblnd_query(lnet_ni_t *ni, lnet_nid_t nid, unsigned long *when)
  {
-       unsigned long   last_alive = 0;
-       unsigned long   now = cfs_time_current();
-       rwlock_t        *glock = &kiblnd_data.kib_global_lock;
-       kib_peer_t      *peer;
-       unsigned long   flags;
+       unsigned long last_alive = 0;
+       unsigned long now = cfs_time_current();
+       rwlock_t *glock = &kiblnd_data.kib_global_lock;
+       kib_peer_t *peer;
+       unsigned long flags;
  
        read_lock_irqsave(glock, flags);
  
  
  void kiblnd_free_pages(kib_pages_t *p)
  {
-       int     npages = p->ibp_npages;
-       int     i;
+       int npages = p->ibp_npages;
+       int i;
  
        for (i = 0; i < npages; i++) {
                if (p->ibp_pages[i] != NULL)
  
  int kiblnd_alloc_pages(kib_pages_t **pp, int cpt, int npages)
  {
-       kib_pages_t     *p;
-       int             i;
+       kib_pages_t *p;
+       int i;
  
        LIBCFS_CPT_ALLOC(p, lnet_cpt_table(), cpt,
                         offsetof(kib_pages_t, ibp_pages[npages]));
  void kiblnd_unmap_rx_descs(kib_conn_t *conn)
  {
        kib_rx_t *rx;
-       int       i;
+       int i;
  
        LASSERT(conn->ibc_rxs != NULL);
        LASSERT(conn->ibc_hdev != NULL);
  
  void kiblnd_map_rx_descs(kib_conn_t *conn)
  {
-       kib_rx_t       *rx;
-       struct page    *pg;
-       int          pg_off;
-       int          ipg;
-       int          i;
+       kib_rx_t *rx;
+       struct page *pg;
+       int pg_off;
+       int ipg;
+       int i;
  
-       for (pg_off = ipg = i = 0;
-            i < IBLND_RX_MSGS(conn->ibc_version); i++) {
+       for (pg_off = ipg = i = 0; i < IBLND_RX_MSGS(conn->ibc_version); i++) {
                pg = conn->ibc_rx_pages->ibp_pages[ipg];
                rx = &conn->ibc_rxs[i];
  
  
                CDEBUG(D_NET, "rx %d: %p %#llx(%#llx)\n",
                       i, rx->rx_msg, rx->rx_msgaddr,
-                      lnet_page2phys(pg) + pg_off);
+                      (__u64)(page_to_phys(pg) + pg_off));
  
                pg_off += IBLND_MSG_SIZE;
                LASSERT(pg_off <= PAGE_SIZE);
  
  static void kiblnd_unmap_tx_pool(kib_tx_pool_t *tpo)
  {
-       kib_hca_dev_t  *hdev = tpo->tpo_hdev;
-       kib_tx_t       *tx;
-       int          i;
+       kib_hca_dev_t *hdev = tpo->tpo_hdev;
+       kib_tx_t *tx;
+       int i;
  
        LASSERT(tpo->tpo_pool.po_allocated == 0);
  
  static kib_hca_dev_t *kiblnd_current_hdev(kib_dev_t *dev)
  {
        kib_hca_dev_t *hdev;
-       unsigned long  flags;
-       int         i = 0;
+       unsigned long flags;
+       int i = 0;
  
        read_lock_irqsave(&kiblnd_data.kib_global_lock, flags);
        while (dev->ibd_failover) {
  
  static void kiblnd_map_tx_pool(kib_tx_pool_t *tpo)
  {
-       kib_pages_t    *txpgs = tpo->tpo_tx_pages;
-       kib_pool_t     *pool  = &tpo->tpo_pool;
-       kib_net_t      *net   = pool->po_owner->ps_net;
-       kib_dev_t      *dev;
-       struct page    *page;
-       kib_tx_t       *tx;
-       int          page_offset;
-       int          ipage;
-       int          i;
+       kib_pages_t *txpgs = tpo->tpo_tx_pages;
+       kib_pool_t *pool = &tpo->tpo_pool;
+       kib_net_t *net = pool->po_owner->ps_net;
+       kib_dev_t *dev;
+       struct page *page;
+       kib_tx_t *tx;
+       int page_offset;
+       int ipage;
+       int i;
  
        LASSERT(net != NULL);
  
  
  struct ib_mr *kiblnd_find_dma_mr(kib_hca_dev_t *hdev, __u64 addr, __u64 size)
  {
-       __u64   index;
+       __u64 index;
  
        LASSERT(hdev->ibh_mrs[0] != NULL);
  
@@@ -1313,7 -1311,7 +1313,7 @@@ struct ib_mr *kiblnd_find_rd_dma_mr(kib
  {
        struct ib_mr *prev_mr;
        struct ib_mr *mr;
-       int        i;
+       int i;
  
        LASSERT(hdev->ibh_mrs[0] != NULL);
  
@@@ -1384,18 -1382,18 +1384,18 @@@ static int kiblnd_create_fmr_pool(kib_f
                                  kib_fmr_pool_t **pp_fpo)
  {
        /* FMR pool for RDMA */
-       kib_dev_t              *dev = fps->fps_net->ibn_dev;
-       kib_fmr_pool_t    *fpo;
+       kib_dev_t *dev = fps->fps_net->ibn_dev;
+       kib_fmr_pool_t *fpo;
        struct ib_fmr_pool_param param = {
                .max_pages_per_fmr = LNET_MAX_PAYLOAD/PAGE_SIZE,
-               .page_shift     = PAGE_SHIFT,
-               .access     = (IB_ACCESS_LOCAL_WRITE |
-                                     IB_ACCESS_REMOTE_WRITE),
-               .pool_size         = fps->fps_pool_size,
+               .page_shift        = PAGE_SHIFT,
+               .access            = (IB_ACCESS_LOCAL_WRITE |
+                                     IB_ACCESS_REMOTE_WRITE),
+               .pool_size         = fps->fps_pool_size,
                .dirty_watermark   = fps->fps_flush_trigger,
                .flush_function    = NULL,
-               .flush_arg       = NULL,
-               .cache       = !!*kiblnd_tunables.kib_fmr_cache};
+               .flush_arg         = NULL,
+               .cache             = !!*kiblnd_tunables.kib_fmr_cache};
        int rc;
  
        LIBCFS_CPT_ALLOC(fpo, lnet_cpt_table(), fps->fps_cpt, sizeof(*fpo));
@@@ -1456,7 -1454,7 +1456,7 @@@ static int kiblnd_init_fmr_poolset(kib_
                                   int flush_trigger)
  {
        kib_fmr_pool_t *fpo;
-       int          rc;
+       int rc;
  
        memset(fps, 0, sizeof(kib_fmr_poolset_t));
  
@@@ -1487,11 -1485,11 +1487,11 @@@ static int kiblnd_fmr_pool_is_idle(kib_
  void kiblnd_fmr_pool_unmap(kib_fmr_t *fmr, int status)
  {
        LIST_HEAD(zombies);
-       kib_fmr_pool_t    *fpo = fmr->fmr_pool;
+       kib_fmr_pool_t *fpo = fmr->fmr_pool;
        kib_fmr_poolset_t *fps = fpo->fpo_owner;
-       unsigned long    now = cfs_time_current();
-       kib_fmr_pool_t    *tmp;
-       int             rc;
+       unsigned long now = cfs_time_current();
+       kib_fmr_pool_t *tmp;
+       int rc;
  
        rc = ib_fmr_pool_unmap(fmr->fmr_pfmr);
        LASSERT(rc == 0);
@@@ -1527,9 -1525,9 +1527,9 @@@ int kiblnd_fmr_pool_map(kib_fmr_poolset
                        __u64 iov, kib_fmr_t *fmr)
  {
        struct ib_pool_fmr *pfmr;
-       kib_fmr_pool_t     *fpo;
-       __u64          version;
-       int              rc;
+       kib_fmr_pool_t *fpo;
+       __u64 version;
+       int rc;
  
   again:
        spin_lock(&fps->fps_lock);
@@@ -1660,13 -1658,13 +1660,13 @@@ static int kiblnd_init_poolset(kib_pool
                               kib_ps_node_init_t nd_init,
                               kib_ps_node_fini_t nd_fini)
  {
-       kib_pool_t      *pool;
-       int             rc;
+       kib_pool_t *pool;
+       int rc;
  
        memset(ps, 0, sizeof(kib_poolset_t));
  
-       ps->ps_cpt          = cpt;
-       ps->ps_net        = net;
+       ps->ps_cpt          = cpt;
+       ps->ps_net          = net;
        ps->ps_pool_create  = po_create;
        ps->ps_pool_destroy = po_destroy;
        ps->ps_node_init    = nd_init;
@@@ -1700,9 -1698,9 +1700,9 @@@ static int kiblnd_pool_is_idle(kib_pool
  void kiblnd_pool_free_node(kib_pool_t *pool, struct list_head *node)
  {
        LIST_HEAD(zombies);
-       kib_poolset_t  *ps = pool->po_owner;
-       kib_pool_t     *tmp;
-       unsigned long      now = cfs_time_current();
+       kib_poolset_t *ps = pool->po_owner;
+       kib_pool_t *tmp;
+       unsigned long now = cfs_time_current();
  
        spin_lock(&ps->ps_lock);
  
  
  struct list_head *kiblnd_pool_alloc_node(kib_poolset_t *ps)
  {
-       struct list_head            *node;
-       kib_pool_t          *pool;
-       int                 rc;
+       struct list_head *node;
+       kib_pool_t *pool;
+       int rc;
  
   again:
        spin_lock(&ps->ps_lock);
  
  void kiblnd_pmr_pool_unmap(kib_phys_mr_t *pmr)
  {
-       kib_pmr_pool_t      *ppo = pmr->pmr_pool;
-       struct ib_mr    *mr  = pmr->pmr_mr;
+       kib_pmr_pool_t *ppo = pmr->pmr_pool;
+       struct ib_mr *mr = pmr->pmr_mr;
  
        pmr->pmr_mr = NULL;
        kiblnd_pool_free_node(&ppo->ppo_pool, &pmr->pmr_list);
@@@ -1804,9 -1802,9 +1804,9 @@@ int kiblnd_pmr_pool_map(kib_pmr_poolset
                    kib_rdma_desc_t *rd, __u64 *iova, kib_phys_mr_t **pp_pmr)
  {
        kib_phys_mr_t *pmr;
-       struct list_head    *node;
-       int         rc;
-       int         i;
+       struct list_head *node;
+       int rc;
+       int i;
  
        node = kiblnd_pool_alloc_node(&pps->pps_poolset);
        if (node == NULL) {
  static void kiblnd_destroy_pmr_pool(kib_pool_t *pool)
  {
        kib_pmr_pool_t *ppo = container_of(pool, kib_pmr_pool_t, ppo_pool);
-       kib_phys_mr_t  *pmr;
+       kib_phys_mr_t *pmr;
        kib_phys_mr_t *tmp;
  
        LASSERT(pool->po_allocated == 0);
@@@ -1883,10 -1881,10 +1883,10 @@@ static inline int kiblnd_pmr_pool_size(
  static int kiblnd_create_pmr_pool(kib_poolset_t *ps, int size,
                                  kib_pool_t **pp_po)
  {
-       struct kib_pmr_pool     *ppo;
-       struct kib_pool         *pool;
-       kib_phys_mr_t           *pmr;
-       int                     i;
+       struct kib_pmr_pool *ppo;
+       struct kib_pool *pool;
+       kib_phys_mr_t *pmr;
+       int i;
  
        LIBCFS_CPT_ALLOC(ppo, lnet_cpt_table(),
                         ps->ps_cpt, sizeof(kib_pmr_pool_t));
  
  static void kiblnd_destroy_tx_pool(kib_pool_t *pool)
  {
-       kib_tx_pool_t  *tpo = container_of(pool, kib_tx_pool_t, tpo_pool);
-       int          i;
+       kib_tx_pool_t *tpo = container_of(pool, kib_tx_pool_t, tpo_pool);
+       int i;
  
        LASSERT(pool->po_allocated == 0);
  
@@@ -1981,9 -1979,9 +1981,9 @@@ static int kiblnd_tx_pool_size(int ncpt
  static int kiblnd_create_tx_pool(kib_poolset_t *ps, int size,
                                 kib_pool_t **pp_po)
  {
-       int         i;
-       int         npg;
-       kib_pool_t    *pool;
+       int i;
+       int npg;
+       kib_pool_t *pool;
        kib_tx_pool_t *tpo;
  
        LIBCFS_CPT_ALLOC(tpo, lnet_cpt_table(), ps->ps_cpt, sizeof(*tpo));
@@@ -2066,19 -2064,19 +2066,19 @@@ static void kiblnd_tx_init(kib_pool_t *
  {
        kib_tx_poolset_t *tps = container_of(pool->po_owner, kib_tx_poolset_t,
                                             tps_poolset);
-       kib_tx_t         *tx  = list_entry(node, kib_tx_t, tx_list);
+       kib_tx_t *tx  = list_entry(node, kib_tx_t, tx_list);
  
        tx->tx_cookie = tps->tps_next_tx_cookie++;
  }
  
  static void kiblnd_net_fini_pools(kib_net_t *net)
  {
-       int     i;
+       int i;
  
        cfs_cpt_for_each(i, lnet_cpt_table()) {
-               kib_tx_poolset_t        *tps;
-               kib_fmr_poolset_t       *fps;
-               kib_pmr_poolset_t       *pps;
+               kib_tx_poolset_t *tps;
+               kib_fmr_poolset_t *fps;
+               kib_pmr_poolset_t *pps;
  
                if (net->ibn_tx_ps != NULL) {
                        tps = net->ibn_tx_ps[i];
  
  static int kiblnd_net_init_pools(kib_net_t *net, __u32 *cpts, int ncpts)
  {
-       unsigned long   flags;
-       int             cpt;
-       int             rc;
-       int             i;
+       unsigned long flags;
+       int cpt;
+       int rc;
+       int i;
  
        read_lock_irqsave(&kiblnd_data.kib_global_lock, flags);
        if (*kiblnd_tunables.kib_map_on_demand == 0 &&
            net->ibn_dev->ibd_hdev->ibh_nmrs == 1) {
-               read_unlock_irqrestore(&kiblnd_data.kib_global_lock,
-                                          flags);
+               read_unlock_irqrestore(&kiblnd_data.kib_global_lock, flags);
                goto create_tx_pool;
        }
  
  static int kiblnd_hdev_get_attr(kib_hca_dev_t *hdev)
  {
        struct ib_device_attr *attr;
-       int                 rc;
+       int rc;
  
        /* It's safe to assume a HCA can handle a page size
         * matching that of the native system */
  
  static void kiblnd_hdev_cleanup_mrs(kib_hca_dev_t *hdev)
  {
-       int     i;
+       int i;
  
        if (hdev->ibh_nmrs == 0 || hdev->ibh_mrs == NULL)
                return;
@@@ -2319,12 -2316,11 +2318,11 @@@ void kiblnd_hdev_destroy(kib_hca_dev_t 
  static int kiblnd_hdev_setup_mrs(kib_hca_dev_t *hdev)
  {
        struct ib_mr *mr;
-       int        i;
-       int        rc;
-       __u64    mm_size;
-       __u64    mr_size;
-       int        acflags = IB_ACCESS_LOCAL_WRITE |
-                               IB_ACCESS_REMOTE_WRITE;
+       int i;
+       int rc;
+       __u64 mm_size;
+       __u64 mr_size;
+       int acflags = IB_ACCESS_LOCAL_WRITE | IB_ACCESS_REMOTE_WRITE;
  
        rc = kiblnd_hdev_get_attr(hdev);
        if (rc != 0)
  
        for (i = 0; i < hdev->ibh_nmrs; i++) {
                struct ib_phys_buf ipb;
-               __u64         iova;
+               __u64 iova;
  
                ipb.size = hdev->ibh_mr_size;
                ipb.addr = i * mr_size;
-               iova     = ipb.addr;
+               iova = ipb.addr;
  
                mr = ib_reg_phys_mr(hdev->ibh_pd, &ipb, 1, acflags, &iova);
                if (IS_ERR(mr)) {
@@@ -2408,10 -2404,10 +2406,10 @@@ static int kiblnd_dummy_callback(struc
  
  static int kiblnd_dev_need_failover(kib_dev_t *dev)
  {
-       struct rdma_cm_id  *cmid;
-       struct sockaddr_in  srcaddr;
-       struct sockaddr_in  dstaddr;
-       int              rc;
+       struct rdma_cm_id *cmid;
+       struct sockaddr_in srcaddr;
+       struct sockaddr_in dstaddr;
+       int rc;
  
        if (dev->ibd_hdev == NULL || /* initializing */
            dev->ibd_hdev->ibh_cmid == NULL || /* listener is dead */
        }
  
        memset(&srcaddr, 0, sizeof(srcaddr));
-       srcaddr.sin_family      = AF_INET;
+       srcaddr.sin_family = AF_INET;
        srcaddr.sin_addr.s_addr = (__force u32)htonl(dev->ibd_ifip);
  
        memset(&dstaddr, 0, sizeof(dstaddr));
@@@ -2466,15 -2462,14 +2464,14 @@@ int kiblnd_dev_failover(kib_dev_t *dev
        LIST_HEAD(zombie_tpo);
        LIST_HEAD(zombie_ppo);
        LIST_HEAD(zombie_fpo);
-       struct rdma_cm_id  *cmid  = NULL;
-       kib_hca_dev_t      *hdev  = NULL;
-       kib_hca_dev_t      *old;
-       struct ib_pd       *pd;
-       kib_net_t         *net;
-       struct sockaddr_in  addr;
-       unsigned long       flags;
-       int              rc = 0;
-       int                 i;
+       struct rdma_cm_id *cmid  = NULL;
+       kib_hca_dev_t *hdev  = NULL;
+       struct ib_pd *pd;
+       kib_net_t *net;
+       struct sockaddr_in addr;
+       unsigned long flags;
+       int rc = 0;
+       int i;
  
        LASSERT(*kiblnd_tunables.kib_dev_failover > 1 ||
                 dev->ibd_can_failover ||
  
        write_lock_irqsave(&kiblnd_data.kib_global_lock, flags);
  
-       old = dev->ibd_hdev;
-       dev->ibd_hdev = hdev; /* take over the refcount */
-       hdev = old;
+       swap(dev->ibd_hdev, hdev); /* take over the refcount */
  
        list_for_each_entry(net, &dev->ibd_nets, ibn_list) {
                cfs_cpt_for_each(i, lnet_cpt_table()) {
@@@ -2616,13 -2609,13 +2611,13 @@@ void kiblnd_destroy_dev(kib_dev_t *dev
  static kib_dev_t *kiblnd_create_dev(char *ifname)
  {
        struct net_device *netdev;
-       kib_dev_t        *dev;
-       __u32         netmask;
-       __u32         ip;
-       int             up;
-       int             rc;
+       kib_dev_t *dev;
+       __u32 netmask;
+       __u32 ip;
+       int up;
+       int rc;
  
-       rc = libcfs_ipif_query(ifname, &up, &ip, &netmask);
+       rc = lnet_ipif_query(ifname, &up, &ip, &netmask);
        if (rc != 0) {
                CERROR("Can't query IPoIB interface %s: %d\n",
                       ifname, rc);
  
  static void kiblnd_base_shutdown(void)
  {
-       struct kib_sched_info   *sched;
-       int                     i;
+       struct kib_sched_info *sched;
+       int i;
  
        LASSERT(list_empty(&kiblnd_data.kib_devs));
  
  
  void kiblnd_shutdown(lnet_ni_t *ni)
  {
-       kib_net_t       *net = ni->ni_data;
-       rwlock_t     *g_lock = &kiblnd_data.kib_global_lock;
-       int            i;
-       unsigned long     flags;
+       kib_net_t *net = ni->ni_data;
+       rwlock_t *g_lock = &kiblnd_data.kib_global_lock;
+       int i;
+       unsigned long flags;
  
        LASSERT(kiblnd_data.kib_init == IBLND_INIT_ALL);
  
@@@ -2806,9 -2799,9 +2801,9 @@@ out
  
  static int kiblnd_base_startup(void)
  {
-       struct kib_sched_info   *sched;
-       int                     rc;
-       int                     i;
+       struct kib_sched_info *sched;
+       int rc;
+       int i;
  
        LASSERT(kiblnd_data.kib_init == IBLND_INIT_NOTHING);
  
  
        kiblnd_data.kib_peer_hash_size = IBLND_PEER_HASH_SIZE;
        LIBCFS_ALLOC(kiblnd_data.kib_peers,
-                    sizeof(struct list_head) *
-                           kiblnd_data.kib_peer_hash_size);
+                    sizeof(struct list_head) * kiblnd_data.kib_peer_hash_size);
        if (kiblnd_data.kib_peers == NULL)
                goto failed;
        for (i = 0; i < kiblnd_data.kib_peer_hash_size; i++)
                goto failed;
  
        cfs_percpt_for_each(sched, i, kiblnd_data.kib_scheds) {
-               int     nthrs;
+               int nthrs;
  
                spin_lock_init(&sched->ibs_lock);
                INIT_LIST_HEAD(&sched->ibs_conns);
  
  static int kiblnd_start_schedulers(struct kib_sched_info *sched)
  {
-       int     rc = 0;
-       int     nthrs;
-       int     i;
+       int rc = 0;
+       int nthrs;
+       int i;
  
        if (sched->ibs_nthreads == 0) {
                if (*kiblnd_tunables.kib_nscheds > 0) {
        }
  
        for (i = 0; i < nthrs; i++) {
-               long    id;
-               char    name[20];
+               long id;
+               char name[20];
  
                id = KIB_THREAD_ID(sched->ibs_cpt, sched->ibs_nthreads + i);
                snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
  static int kiblnd_dev_start_threads(kib_dev_t *dev, int newdev, __u32 *cpts,
                                    int ncpts)
  {
-       int     cpt;
-       int     rc;
-       int     i;
+       int cpt;
+       int rc;
+       int i;
  
        for (i = 0; i < ncpts; i++) {
                struct kib_sched_info *sched;
  
  static kib_dev_t *kiblnd_dev_search(char *ifname)
  {
-       kib_dev_t       *alias = NULL;
-       kib_dev_t       *dev;
-       char            *colon;
-       char            *colon2;
+       kib_dev_t *alias = NULL;
+       kib_dev_t *dev;
+       char *colon;
+       char *colon2;
  
        colon = strchr(ifname, ':');
        list_for_each_entry(dev, &kiblnd_data.kib_devs, ibd_list) {
  
  int kiblnd_startup(lnet_ni_t *ni)
  {
-       char                 *ifname;
-       kib_dev_t               *ibdev = NULL;
-       kib_net_t               *net;
-       struct timeval      tv;
-       unsigned long        flags;
-       int                    rc;
-       int                       newdev;
+       char *ifname;
+       kib_dev_t *ibdev = NULL;
+       kib_net_t *net;
+       struct timeval tv;
+       unsigned long flags;
+       int rc;
+       int newdev;
  
        LASSERT(ni->ni_lnd == &the_o2iblnd);
  
@@@ -3093,7 -3085,7 +3087,7 @@@ static void __exit kiblnd_module_fini(v
  
  static int __init kiblnd_module_init(void)
  {
-       int    rc;
+       int rc;
  
        CLASSERT(sizeof(kib_msg_t) <= IBLND_MSG_SIZE);
        CLASSERT(offsetof(kib_msg_t,
index 344189ac5698a575accbaf7afc5f1ec940651240,0d33154e095a3253205c075e6f79f40404ef66d4..9117f1c15a8e88dbacda3fa2b8e3afb3c94d9690
@@@ -72,10 -72,12 +72,12 @@@ struct mutex ptlrpc_all_services_mutex
  struct ptlrpc_request_buffer_desc *
  ptlrpc_alloc_rqbd(struct ptlrpc_service_part *svcpt)
  {
-       struct ptlrpc_service             *svc = svcpt->scp_service;
+       struct ptlrpc_service *svc = svcpt->scp_service;
        struct ptlrpc_request_buffer_desc *rqbd;
  
-       OBD_CPT_ALLOC_PTR(rqbd, svc->srv_cptable, svcpt->scp_cpt);
+       rqbd = kzalloc_node(sizeof(*rqbd), GFP_NOFS,
+                           cfs_cpt_spread_node(svc->srv_cptable,
+                                               svcpt->scp_cpt));
        if (rqbd == NULL)
                return NULL;
  
@@@ -87,7 -89,7 +89,7 @@@
        OBD_CPT_ALLOC_LARGE(rqbd->rqbd_buffer, svc->srv_cptable,
                            svcpt->scp_cpt, svc->srv_buf_size);
        if (rqbd->rqbd_buffer == NULL) {
-               OBD_FREE_PTR(rqbd);
+               kfree(rqbd);
                return NULL;
        }
  
@@@ -112,17 -114,17 +114,17 @@@ ptlrpc_free_rqbd(struct ptlrpc_request_
        svcpt->scp_nrqbds_total--;
        spin_unlock(&svcpt->scp_lock);
  
-       OBD_FREE_LARGE(rqbd->rqbd_buffer, svcpt->scp_service->srv_buf_size);
-       OBD_FREE_PTR(rqbd);
+       kvfree(rqbd->rqbd_buffer);
+       kfree(rqbd);
  }
  
  int
  ptlrpc_grow_req_bufs(struct ptlrpc_service_part *svcpt, int post)
  {
-       struct ptlrpc_service             *svc = svcpt->scp_service;
+       struct ptlrpc_service *svc = svcpt->scp_service;
        struct ptlrpc_request_buffer_desc *rqbd;
-       int                             rc = 0;
-       int                             i;
+       int rc = 0;
+       int i;
  
        if (svcpt->scp_rqbd_allocating)
                goto try_post;
@@@ -184,7 -186,7 +186,7 @@@ ptlrpc_save_lock(struct ptlrpc_request 
                 struct lustre_handle *lock, int mode, int no_ack)
  {
        struct ptlrpc_reply_state *rs = req->rq_reply_state;
-       int                     idx;
+       int idx;
  
        LASSERT(rs != NULL);
        LASSERT(rs->rs_nlocks < RS_MAX_LOCKS);
@@@ -273,8 -275,8 +275,8 @@@ static void rs_batch_init(struct rs_bat
  static struct ptlrpc_hr_thread *
  ptlrpc_hr_select(struct ptlrpc_service_part *svcpt)
  {
-       struct ptlrpc_hr_partition      *hrp;
-       unsigned int                    rotor;
+       struct ptlrpc_hr_partition *hrp;
+       unsigned int rotor;
  
        if (svcpt->scp_cpt >= 0 &&
            svcpt->scp_service->srv_cptable == ptlrpc_hr.hr_cpt_table) {
@@@ -429,8 -431,8 +431,8 @@@ static in
  ptlrpc_server_post_idle_rqbds(struct ptlrpc_service_part *svcpt)
  {
        struct ptlrpc_request_buffer_desc *rqbd;
-       int                               rc;
-       int                               posted = 0;
+       int rc;
+       int posted = 0;
  
        for (;;) {
                spin_lock(&svcpt->scp_lock);
@@@ -487,11 -489,11 +489,11 @@@ static voi
  ptlrpc_server_nthreads_check(struct ptlrpc_service *svc,
                             struct ptlrpc_service_conf *conf)
  {
-       struct ptlrpc_service_thr_conf  *tc = &conf->psc_thr;
-       unsigned                        init;
-       unsigned                        total;
-       unsigned                        nthrs;
-       int                             weight;
+       struct ptlrpc_service_thr_conf *tc = &conf->psc_thr;
+       unsigned init;
+       unsigned total;
+       unsigned nthrs;
+       int weight;
  
        /*
         * Common code for estimating & validating threads number.
                 * be up to 8 * nthrs_max */
                total = min(tc->tc_nthrs_max * 8, tc->tc_nthrs_user);
                nthrs = total / svc->srv_ncpts;
-               init  = max(init, nthrs);
+               init = max(init, nthrs);
                goto out;
        }
  
  
        nthrs = tc->tc_nthrs_base;
        if (svc->srv_ncpts == 1) {
-               int     i;
+               int i;
  
                /* NB: Increase the base number if it's single partition
                 * and total number of cores/HTs is larger or equal to 4.
        }
  
        if (tc->tc_thr_factor != 0) {
-               int       factor = tc->tc_thr_factor;
+               int factor = tc->tc_thr_factor;
                const int fade = 4;
  
                /*
                 * there are.
                 */
                /* weight is # of HTs */
 -              if (cpumask_weight(topology_thread_cpumask(0)) > 1) {
 +              if (cpumask_weight(topology_sibling_cpumask(0)) > 1) {
                        /* depress thread factor for hyper-thread */
                        factor = factor - (factor >> 1) + (factor >> 3);
                }
@@@ -593,9 -595,9 +595,9 @@@ ptlrpc_service_part_init(struct ptlrpc_
                         struct ptlrpc_service_part *svcpt, int cpt)
  {
        struct ptlrpc_at_array  *array;
-       int                     size;
-       int                     index;
-       int                     rc;
+       int size;
+       int index;
+       int rc;
  
        svcpt->scp_cpt = cpt;
        INIT_LIST_HEAD(&svcpt->scp_threads);
        array = &svcpt->scp_at_array;
  
        size = at_est2timeout(at_max);
-       array->paa_size     = size;
-       array->paa_count    = 0;
+       array->paa_size = size;
+       array->paa_count = 0;
        array->paa_deadline = -1;
  
        /* allocate memory for scp_at_array (ptlrpc_at_array) */
-       OBD_CPT_ALLOC(array->paa_reqs_array,
-                     svc->srv_cptable, cpt, sizeof(struct list_head) * size);
+       array->paa_reqs_array =
+               kzalloc_node(sizeof(struct list_head) * size, GFP_NOFS,
+                            cfs_cpt_spread_node(svc->srv_cptable, cpt));
        if (array->paa_reqs_array == NULL)
                return -ENOMEM;
  
        for (index = 0; index < size; index++)
                INIT_LIST_HEAD(&array->paa_reqs_array[index]);
  
-       OBD_CPT_ALLOC(array->paa_reqs_count,
-                     svc->srv_cptable, cpt, sizeof(__u32) * size);
+       array->paa_reqs_count =
+               kzalloc_node(sizeof(__u32) * size, GFP_NOFS,
+                            cfs_cpt_spread_node(svc->srv_cptable, cpt));
        if (array->paa_reqs_count == NULL)
-               goto failed;
+               goto free_reqs_array;
  
        cfs_timer_init(&svcpt->scp_at_timer, ptlrpc_at_timer, svcpt);
        /* At SOW, service time should be quick; 10s seems generous. If client
        /* We shouldn't be under memory pressure at startup, so
         * fail if we can't allocate all our buffers at this time. */
        if (rc != 0)
-               goto failed;
+               goto free_reqs_count;
  
        return 0;
  
-  failed:
-       if (array->paa_reqs_count != NULL) {
-               OBD_FREE(array->paa_reqs_count, sizeof(__u32) * size);
-               array->paa_reqs_count = NULL;
-       }
-       if (array->paa_reqs_array != NULL) {
-               OBD_FREE(array->paa_reqs_array,
-                        sizeof(struct list_head) * array->paa_size);
-               array->paa_reqs_array = NULL;
-       }
+ free_reqs_count:
+       kfree(array->paa_reqs_count);
+       array->paa_reqs_count = NULL;
+ free_reqs_array:
+       kfree(array->paa_reqs_array);
+       array->paa_reqs_array = NULL;
  
        return -ENOMEM;
  }
   */
  struct ptlrpc_service *
  ptlrpc_register_service(struct ptlrpc_service_conf *conf,
-                       struct proc_dir_entry *proc_entry)
- {
-       struct ptlrpc_service_cpt_conf  *cconf = &conf->psc_cpt;
-       struct ptlrpc_service           *service;
-       struct ptlrpc_service_part      *svcpt;
-       struct cfs_cpt_table            *cptable;
-       __u32                           *cpts = NULL;
-       int                             ncpts;
-       int                             cpt;
-       int                             rc;
-       int                             i;
+                       struct kset *parent,
+                       struct dentry *debugfs_entry)
+ {
+       struct ptlrpc_service_cpt_conf *cconf = &conf->psc_cpt;
+       struct ptlrpc_service *service;
+       struct ptlrpc_service_part *svcpt;
+       struct cfs_cpt_table *cptable;
+       __u32 *cpts = NULL;
+       int ncpts;
+       int cpt;
+       int rc;
+       int i;
  
        LASSERT(conf->psc_buf.bc_nbufs > 0);
        LASSERT(conf->psc_buf.bc_buf_size >=
        } else {
                ncpts = cfs_cpt_number(cptable);
                if (cconf->cc_pattern != NULL) {
-                       struct cfs_expr_list    *el;
+                       struct cfs_expr_list *el;
  
                        rc = cfs_expr_list_parse(cconf->cc_pattern,
                                                 strlen(cconf->cc_pattern),
                        if (rc <= 0) {
                                CERROR("%s: failed to parse CPT array %s: %d\n",
                                       conf->psc_name, cconf->cc_pattern, rc);
-                               if (cpts != NULL)
-                                       OBD_FREE(cpts, sizeof(*cpts) * ncpts);
+                               kfree(cpts);
                                return ERR_PTR(rc < 0 ? rc : -EINVAL);
                        }
                        ncpts = rc;
                }
        }
  
-       OBD_ALLOC(service, offsetof(struct ptlrpc_service, srv_parts[ncpts]));
+       service = kzalloc(offsetof(struct ptlrpc_service, srv_parts[ncpts]),
+                         GFP_NOFS);
        if (service == NULL) {
-               if (cpts != NULL)
-                       OBD_FREE(cpts, sizeof(*cpts) * ncpts);
+               kfree(cpts);
                return ERR_PTR(-ENOMEM);
        }
  
-       service->srv_cptable            = cptable;
-       service->srv_cpts               = cpts;
-       service->srv_ncpts              = ncpts;
+       service->srv_cptable = cptable;
+       service->srv_cpts = cpts;
+       service->srv_ncpts = ncpts;
  
        service->srv_cpt_bits = 0; /* it's zero already, easy to read... */
        while ((1 << service->srv_cpt_bits) < cfs_cpt_number(cptable))
  
        /* public members */
        spin_lock_init(&service->srv_lock);
-       service->srv_name               = conf->psc_name;
-       service->srv_watchdog_factor    = conf->psc_watchdog_factor;
+       service->srv_name = conf->psc_name;
+       service->srv_watchdog_factor = conf->psc_watchdog_factor;
        INIT_LIST_HEAD(&service->srv_list); /* for safety of cleanup */
  
        /* buffer configuration */
-       service->srv_nbuf_per_group     = test_req_buffer_pressure ?
+       service->srv_nbuf_per_group = test_req_buffer_pressure ?
                                          1 : conf->psc_buf.bc_nbufs;
-       service->srv_max_req_size       = conf->psc_buf.bc_req_max_size +
+       service->srv_max_req_size = conf->psc_buf.bc_req_max_size +
                                          SPTLRPC_MAX_PAYLOAD;
-       service->srv_buf_size           = conf->psc_buf.bc_buf_size;
-       service->srv_rep_portal         = conf->psc_buf.bc_rep_portal;
-       service->srv_req_portal         = conf->psc_buf.bc_req_portal;
+       service->srv_buf_size = conf->psc_buf.bc_buf_size;
+       service->srv_rep_portal = conf->psc_buf.bc_rep_portal;
+       service->srv_req_portal = conf->psc_buf.bc_req_portal;
  
        /* Increase max reply size to next power of two */
        service->srv_max_reply_size = 1;
               conf->psc_buf.bc_rep_max_size + SPTLRPC_MAX_PAYLOAD)
                service->srv_max_reply_size <<= 1;
  
-       service->srv_thread_name        = conf->psc_thr.tc_thr_name;
-       service->srv_ctx_tags           = conf->psc_thr.tc_ctx_tags;
-       service->srv_hpreq_ratio        = PTLRPC_SVC_HP_RATIO;
-       service->srv_ops                = conf->psc_ops;
+       service->srv_thread_name = conf->psc_thr.tc_thr_name;
+       service->srv_ctx_tags = conf->psc_thr.tc_ctx_tags;
+       service->srv_hpreq_ratio = PTLRPC_SVC_HP_RATIO;
+       service->srv_ops = conf->psc_ops;
  
        for (i = 0; i < ncpts; i++) {
                if (!conf->psc_thr.tc_cpu_affinity)
                else
                        cpt = cpts != NULL ? cpts[i] : i;
  
-               OBD_CPT_ALLOC(svcpt, cptable, cpt, sizeof(*svcpt));
+               svcpt = kzalloc_node(sizeof(*svcpt), GFP_NOFS,
+                                    cfs_cpt_spread_node(cptable, cpt));
                if (svcpt == NULL) {
                        rc = -ENOMEM;
                        goto failed;
        list_add(&service->srv_list, &ptlrpc_all_services);
        mutex_unlock(&ptlrpc_all_services_mutex);
  
-       if (proc_entry != NULL)
-               ptlrpc_lprocfs_register_service(proc_entry, service);
+       if (parent) {
+               rc = ptlrpc_sysfs_register_service(parent, service);
+               if (rc)
+                       goto failed;
+       }
+       if (!IS_ERR_OR_NULL(debugfs_entry))
+               ptlrpc_ldebugfs_register_service(debugfs_entry, service);
  
        rc = ptlrpc_service_nrs_setup(service);
        if (rc != 0)
@@@ -853,11 -859,11 +859,11 @@@ static void ptlrpc_server_free_request(
  void ptlrpc_server_drop_request(struct ptlrpc_request *req)
  {
        struct ptlrpc_request_buffer_desc *rqbd = req->rq_rqbd;
-       struct ptlrpc_service_part        *svcpt = rqbd->rqbd_svcpt;
-       struct ptlrpc_service             *svc = svcpt->scp_service;
-       int                             refcount;
-       struct list_head                        *tmp;
-       struct list_head                        *nxt;
+       struct ptlrpc_service_part *svcpt = rqbd->rqbd_svcpt;
+       struct ptlrpc_service *svc = svcpt->scp_service;
+       int refcount;
+       struct list_head *tmp;
+       struct list_head *nxt;
  
        if (!atomic_dec_and_test(&req->rq_refcount))
                return;
@@@ -1304,7 -1310,7 +1310,7 @@@ static int ptlrpc_at_send_early_reply(s
        reqcopy = ptlrpc_request_cache_alloc(GFP_NOFS);
        if (reqcopy == NULL)
                return -ENOMEM;
-       OBD_ALLOC_LARGE(reqmsg, req->rq_reqlen);
+       reqmsg = libcfs_kvzalloc(req->rq_reqlen, GFP_NOFS);
        if (!reqmsg) {
                rc = -ENOMEM;
                goto out_free;
@@@ -1368,7 -1374,7 +1374,7 @@@ out_put
        class_export_put(reqcopy->rq_export);
  out:
        sptlrpc_svc_ctx_decref(reqcopy);
-       OBD_FREE_LARGE(reqmsg, req->rq_reqlen);
+       kvfree(reqmsg);
  out_free:
        ptlrpc_request_cache_free(reqcopy);
        return rc;
@@@ -1381,7 -1387,7 +1387,7 @@@ static int ptlrpc_at_check_timed(struc
        struct ptlrpc_at_array *array = &svcpt->scp_at_array;
        struct ptlrpc_request *rq, *n;
        struct list_head work_list;
-       __u32  index, count;
+       __u32 index, count;
        time_t deadline;
        time_t now = get_seconds();
        long delay;
@@@ -1726,10 -1732,10 +1732,10 @@@ static in
  ptlrpc_server_handle_req_in(struct ptlrpc_service_part *svcpt,
                            struct ptlrpc_thread *thread)
  {
-       struct ptlrpc_service   *svc = svcpt->scp_service;
-       struct ptlrpc_request   *req;
-       __u32                   deadline;
-       int                     rc;
+       struct ptlrpc_service *svc = svcpt->scp_service;
+       struct ptlrpc_request *req;
+       __u32 deadline;
+       int rc;
  
        spin_lock(&svcpt->scp_lock);
        if (list_empty(&svcpt->scp_req_incoming)) {
@@@ -1870,11 -1876,11 +1876,11 @@@ ptlrpc_server_handle_request(struct ptl
  {
        struct ptlrpc_service *svc = svcpt->scp_service;
        struct ptlrpc_request *request;
-       struct timeval   work_start;
-       struct timeval   work_end;
-       long               timediff;
-       int                 rc;
-       int                 fail_opc = 0;
+       struct timeval work_start;
+       struct timeval work_end;
+       long timediff;
+       int rc;
+       int fail_opc = 0;
  
        request = ptlrpc_server_request_get(svcpt, false);
        if (request == NULL)
@@@ -2026,10 -2032,10 +2032,10 @@@ static in
  ptlrpc_handle_rs(struct ptlrpc_reply_state *rs)
  {
        struct ptlrpc_service_part *svcpt = rs->rs_svcpt;
-       struct ptlrpc_service     *svc = svcpt->scp_service;
-       struct obd_export        *exp;
-       int                     nlocks;
-       int                     been_handled;
+       struct ptlrpc_service *svc = svcpt->scp_service;
+       struct obd_export *exp;
+       int nlocks;
+       int been_handled;
  
        exp = rs->rs_export;
  
@@@ -2256,10 -2262,10 +2262,10 @@@ ptlrpc_wait_event(struct ptlrpc_service
   */
  static int ptlrpc_main(void *arg)
  {
-       struct ptlrpc_thread            *thread = (struct ptlrpc_thread *)arg;
-       struct ptlrpc_service_part      *svcpt = thread->t_svcpt;
-       struct ptlrpc_service           *svc = svcpt->scp_service;
-       struct ptlrpc_reply_state       *rs;
+       struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
+       struct ptlrpc_service_part *svcpt = thread->t_svcpt;
+       struct ptlrpc_service *svc = svcpt->scp_service;
+       struct ptlrpc_reply_state *rs;
        struct group_info *ginfo = NULL;
        struct lu_env *env;
        int counter = 0, rc = 0;
                        goto out;
        }
  
-       OBD_ALLOC_PTR(env);
+       env = kzalloc(sizeof(*env), GFP_NOFS);
        if (env == NULL) {
                rc = -ENOMEM;
                goto out_srv_fini;
        }
  
        /* Alloc reply state structure for this one */
-       OBD_ALLOC_LARGE(rs, svc->srv_max_reply_size);
+       rs = libcfs_kvzalloc(svc->srv_max_reply_size, GFP_NOFS);
        if (!rs) {
                rc = -ENOMEM;
                goto out_srv_fini;
@@@ -2414,7 -2420,7 +2420,7 @@@ out_srv_fini
  
        if (env != NULL) {
                lu_context_fini(&env->le_ctx);
-               OBD_FREE_PTR(env);
+               kfree(env);
        }
  out:
        CDEBUG(D_RPCTRACE, "service thread [ %p : %u ] %d exiting: rc %d\n",
@@@ -2458,11 -2464,11 +2464,11 @@@ static int hrt_dont_sleep(struct ptlrpc
   */
  static int ptlrpc_hr_main(void *arg)
  {
-       struct ptlrpc_hr_thread         *hrt = (struct ptlrpc_hr_thread *)arg;
-       struct ptlrpc_hr_partition      *hrp = hrt->hrt_partition;
-       LIST_HEAD                       (replies);
-       char                            threadname[20];
-       int                             rc;
+       struct ptlrpc_hr_thread *hrt = (struct ptlrpc_hr_thread *)arg;
+       struct ptlrpc_hr_partition *hrp = hrt->hrt_partition;
+       LIST_HEAD       (replies);
+       char threadname[20];
+       int rc;
  
        snprintf(threadname, sizeof(threadname), "ptlrpc_hr%02d_%03d",
                 hrp->hrp_cpt, hrt->hrt_id);
  
  static void ptlrpc_stop_hr_threads(void)
  {
-       struct ptlrpc_hr_partition      *hrp;
-       int                             i;
-       int                             j;
+       struct ptlrpc_hr_partition *hrp;
+       int i;
+       int j;
  
        ptlrpc_hr.hr_stopping = 1;
  
  
  static int ptlrpc_start_hr_threads(void)
  {
-       struct ptlrpc_hr_partition      *hrp;
-       int                             i;
-       int                             j;
+       struct ptlrpc_hr_partition *hrp;
+       int i;
+       int j;
  
        cfs_percpt_for_each(hrp, i, ptlrpc_hr.hr_partitions) {
-               int     rc = 0;
+               int rc = 0;
  
                for (j = 0; j < hrp->hrp_nthrs; j++) {
                        struct  ptlrpc_hr_thread *hrt = &hrp->hrp_thrs[j];
  
  static void ptlrpc_svcpt_stop_threads(struct ptlrpc_service_part *svcpt)
  {
-       struct l_wait_info      lwi = { 0 };
-       struct ptlrpc_thread    *thread;
-       LIST_HEAD               (zombie);
+       struct l_wait_info lwi = { 0 };
+       struct ptlrpc_thread *thread;
+       LIST_HEAD       (zombie);
  
        CDEBUG(D_INFO, "Stopping threads for service %s\n",
               svcpt->scp_service->srv_name);
                thread = list_entry(zombie.next,
                                        struct ptlrpc_thread, t_link);
                list_del(&thread->t_link);
-               OBD_FREE_PTR(thread);
+               kfree(thread);
        }
  }
  
  void ptlrpc_stop_all_threads(struct ptlrpc_service *svc)
  {
        struct ptlrpc_service_part *svcpt;
-       int                        i;
+       int i;
  
        ptlrpc_service_for_each_part(svcpt, i, svc) {
                if (svcpt->scp_service != NULL)
@@@ -2617,9 -2623,9 +2623,9 @@@ EXPORT_SYMBOL(ptlrpc_stop_all_threads)
  
  int ptlrpc_start_threads(struct ptlrpc_service *svc)
  {
-       int     rc = 0;
-       int     i;
-       int     j;
+       int rc = 0;
+       int i;
+       int j;
  
        /* We require 2 threads min, see note in ptlrpc_server_handle_request */
        LASSERT(svc->srv_nthrs_cpt_init >= PTLRPC_NTHRS_INIT);
@@@ -2648,10 -2654,10 +2654,10 @@@ EXPORT_SYMBOL(ptlrpc_start_threads)
  
  int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
  {
-       struct l_wait_info      lwi = { 0 };
-       struct ptlrpc_thread    *thread;
-       struct ptlrpc_service   *svc;
-       int                     rc;
+       struct l_wait_info lwi = { 0 };
+       struct ptlrpc_thread *thread;
+       struct ptlrpc_service *svc;
+       int rc;
  
        LASSERT(svcpt != NULL);
  
             svcpt->scp_nthrs_running == svc->srv_nthrs_cpt_init - 1))
                return -EMFILE;
  
-       OBD_CPT_ALLOC_PTR(thread, svc->srv_cptable, svcpt->scp_cpt);
+       thread = kzalloc_node(sizeof(*thread), GFP_NOFS,
+                             cfs_cpt_spread_node(svc->srv_cptable,
+                                                 svcpt->scp_cpt));
        if (thread == NULL)
                return -ENOMEM;
        init_waitqueue_head(&thread->t_ctl_waitq);
        spin_lock(&svcpt->scp_lock);
        if (!ptlrpc_threads_increasable(svcpt)) {
                spin_unlock(&svcpt->scp_lock);
-               OBD_FREE_PTR(thread);
+               kfree(thread);
                return -EMFILE;
        }
  
                 * might require unique and contiguous t_id */
                LASSERT(svcpt->scp_nthrs_starting == 1);
                spin_unlock(&svcpt->scp_lock);
-               OBD_FREE_PTR(thread);
+               kfree(thread);
                if (wait) {
                        CDEBUG(D_INFO, "Waiting for creating thread %s #%d\n",
                               svc->srv_thread_name, svcpt->scp_thr_nextid);
                } else {
                        list_del(&thread->t_link);
                        spin_unlock(&svcpt->scp_lock);
-                       OBD_FREE_PTR(thread);
+                       kfree(thread);
                }
                return rc;
        }
  
  int ptlrpc_hr_init(void)
  {
-       struct ptlrpc_hr_partition      *hrp;
-       struct ptlrpc_hr_thread         *hrt;
-       int                             rc;
-       int                             i;
-       int                             j;
-       int                             weight;
+       struct ptlrpc_hr_partition *hrp;
+       struct ptlrpc_hr_thread *hrt;
+       int rc;
+       int i;
+       int j;
+       int weight;
  
        memset(&ptlrpc_hr, 0, sizeof(ptlrpc_hr));
        ptlrpc_hr.hr_cpt_table = cfs_cpt_table;
  
        init_waitqueue_head(&ptlrpc_hr.hr_waitq);
  
 -      weight = cpumask_weight(topology_thread_cpumask(0));
 +      weight = cpumask_weight(topology_sibling_cpumask(0));
  
        cfs_percpt_for_each(hrp, i, ptlrpc_hr.hr_partitions) {
                hrp->hrp_cpt = i;
                hrp->hrp_nthrs /= weight;
  
                LASSERT(hrp->hrp_nthrs > 0);
-               OBD_CPT_ALLOC(hrp->hrp_thrs, ptlrpc_hr.hr_cpt_table, i,
-                             hrp->hrp_nthrs * sizeof(*hrt));
+               hrp->hrp_thrs =
+                       kzalloc_node(hrp->hrp_nthrs * sizeof(*hrt), GFP_NOFS,
+                               cfs_cpt_spread_node(ptlrpc_hr.hr_cpt_table,
+                                                   i));
                if (hrp->hrp_thrs == NULL) {
                        rc = -ENOMEM;
                        goto out;
@@@ -2807,8 -2817,8 +2817,8 @@@ out
  
  void ptlrpc_hr_fini(void)
  {
-       struct ptlrpc_hr_partition      *hrp;
-       int                             i;
+       struct ptlrpc_hr_partition *hrp;
+       int i;
  
        if (ptlrpc_hr.hr_partitions == NULL)
                return;
  
        cfs_percpt_for_each(hrp, i, ptlrpc_hr.hr_partitions) {
                if (hrp->hrp_thrs != NULL) {
-                       OBD_FREE(hrp->hrp_thrs,
-                                hrp->hrp_nthrs * sizeof(hrp->hrp_thrs[0]));
+                       kfree(hrp->hrp_thrs);
                }
        }
  
@@@ -2849,8 -2858,8 +2858,8 @@@ static void ptlrpc_wait_replies(struct 
  static void
  ptlrpc_service_del_atimer(struct ptlrpc_service *svc)
  {
-       struct ptlrpc_service_part      *svcpt;
-       int                             i;
+       struct ptlrpc_service_part *svcpt;
+       int i;
  
        /* early disarm AT timer... */
        ptlrpc_service_for_each_part(svcpt, i, svc) {
  static void
  ptlrpc_service_unlink_rqbd(struct ptlrpc_service *svc)
  {
-       struct ptlrpc_service_part        *svcpt;
+       struct ptlrpc_service_part *svcpt;
        struct ptlrpc_request_buffer_desc *rqbd;
-       struct l_wait_info                lwi;
-       int                               rc;
-       int                               i;
+       struct l_wait_info lwi;
+       int rc;
+       int i;
  
        /* All history will be culled when the next request buffer is
         * freed in ptlrpc_service_purge_all() */
  static void
  ptlrpc_service_purge_all(struct ptlrpc_service *svc)
  {
-       struct ptlrpc_service_part              *svcpt;
-       struct ptlrpc_request_buffer_desc       *rqbd;
-       struct ptlrpc_request                   *req;
-       struct ptlrpc_reply_state               *rs;
-       int                                     i;
+       struct ptlrpc_service_part *svcpt;
+       struct ptlrpc_request_buffer_desc *rqbd;
+       struct ptlrpc_request *req;
+       struct ptlrpc_reply_state *rs;
+       int i;
  
        ptlrpc_service_for_each_part(svcpt, i, svc) {
                if (svcpt->scp_service == NULL)
                                            struct ptlrpc_reply_state,
                                            rs_list);
                        list_del(&rs->rs_list);
-                       OBD_FREE_LARGE(rs, svc->srv_max_reply_size);
+                       kvfree(rs);
                }
        }
  }
  static void
  ptlrpc_service_free(struct ptlrpc_service *svc)
  {
-       struct ptlrpc_service_part      *svcpt;
-       struct ptlrpc_at_array          *array;
-       int                             i;
+       struct ptlrpc_service_part *svcpt;
+       struct ptlrpc_at_array *array;
+       int i;
  
        ptlrpc_service_for_each_part(svcpt, i, svc) {
                if (svcpt->scp_service == NULL)
                cfs_timer_disarm(&svcpt->scp_at_timer);
                array = &svcpt->scp_at_array;
  
-               if (array->paa_reqs_array != NULL) {
-                       OBD_FREE(array->paa_reqs_array,
-                                sizeof(struct list_head) * array->paa_size);
-                       array->paa_reqs_array = NULL;
-               }
-               if (array->paa_reqs_count != NULL) {
-                       OBD_FREE(array->paa_reqs_count,
-                                sizeof(__u32) * array->paa_size);
-                       array->paa_reqs_count = NULL;
-               }
+               kfree(array->paa_reqs_array);
+               array->paa_reqs_array = NULL;
+               kfree(array->paa_reqs_count);
+               array->paa_reqs_count = NULL;
        }
  
        ptlrpc_service_for_each_part(svcpt, i, svc)
-               OBD_FREE_PTR(svcpt);
+               kfree(svcpt);
  
        if (svc->srv_cpts != NULL)
                cfs_expr_list_values_free(svc->srv_cpts, svc->srv_ncpts);
  
-       OBD_FREE(svc, offsetof(struct ptlrpc_service,
-                              srv_parts[svc->srv_ncpts]));
+       kfree(svc);
  }
  
  int ptlrpc_unregister_service(struct ptlrpc_service *service)
        ptlrpc_service_nrs_cleanup(service);
  
        ptlrpc_lprocfs_unregister_service(service);
+       ptlrpc_sysfs_unregister_service(service);
  
        ptlrpc_service_free(service);
  
@@@ -3054,9 -3056,9 +3056,9 @@@ EXPORT_SYMBOL(ptlrpc_unregister_service
   * to be shot, so it's intentionally non-aggressive. */
  int ptlrpc_svcpt_health_check(struct ptlrpc_service_part *svcpt)
  {
-       struct ptlrpc_request           *request = NULL;
-       struct timeval                  right_now;
-       long                            timediff;
+       struct ptlrpc_request *request = NULL;
+       struct timeval right_now;
+       long timediff;
  
        do_gettimeofday(&right_now);
  
  int
  ptlrpc_service_health_check(struct ptlrpc_service *svc)
  {
-       struct ptlrpc_service_part      *svcpt;
-       int                             i;
+       struct ptlrpc_service_part *svcpt;
+       int i;
  
        if (svc == NULL)
                return 0;
index 5e11a78ceef3c50ff6be1e3bcdea90ca5ad56cca,cf9128117a9ecac5d13a168198a576f68f394512..8bc68e2b4052be951bb41ef67068e8da3bc10f40
  #define BCM2048_FREQ_ERROR_FLOOR      -20
  #define BCM2048_FREQ_ERROR_ROOF               20
  
- /* -60 dB is reported as full signal strenght */
+ /* -60 dB is reported as full signal strength */
  #define BCM2048_RSSI_LEVEL_BASE               -60
  #define BCM2048_RSSI_LEVEL_ROOF               -100
  #define BCM2048_RSSI_LEVEL_ROOF_NEG   100
@@@ -2468,7 -2468,7 +2468,7 @@@ static int bcm2048_vidioc_g_tuner(struc
                } else {
                        /*
                         * RSSI level -60 dB is defined to report full
-                        * signal strenght
+                        * signal strength
                         */
                        rssi = bcm2048_get_fm_rssi(bdev);
                        if (rssi >= BCM2048_RSSI_LEVEL_BASE) {
@@@ -2593,7 -2593,7 +2593,7 @@@ static int bcm2048_i2c_driver_probe(str
                                        const struct i2c_device_id *id)
  {
        struct bcm2048_device *bdev;
 -      int err, skip_release = 0;
 +      int err;
  
        bdev = kzalloc(sizeof(*bdev), GFP_KERNEL);
        if (!bdev) {
@@@ -2646,6 -2646,7 +2646,6 @@@ free_sysfs
        bcm2048_sysfs_unregister_properties(bdev, ARRAY_SIZE(attrs));
  free_registration:
        video_unregister_device(&bdev->videodev);
 -      skip_release = 1;
  free_irq:
        if (client->irq)
                free_irq(client->irq, bdev);
index 592a12241b376614539db248765a30da4c87afc0,d670494552531170366d91b266e4501a775a1327..bda208da514e3b5b96da3ad06d7beeda659a8651
@@@ -775,12 -775,10 +775,10 @@@ static void pin_to_bits(int pin, unsign
  /* sleeps that many milliseconds with a reschedule */
  static void long_sleep(int ms)
  {
-       if (in_interrupt()) {
+       if (in_interrupt())
                mdelay(ms);
-       } else {
-               __set_current_state(TASK_INTERRUPTIBLE);
-               schedule_timeout((ms * HZ + 999) / 1000);
-       }
+       else
+               schedule_timeout_interruptible(msecs_to_jiffies(ms));
  }
  
  /* send a serial byte to the LCD panel. The caller is responsible for locking
@@@ -2190,8 -2188,6 +2188,8 @@@ static struct notifier_block panel_noti
  
  static void panel_attach(struct parport *port)
  {
 +      struct pardev_cb panel_cb;
 +
        if (port->number != parport)
                return;
  
                return;
        }
  
 -      pprt = parport_register_device(port, "panel", NULL, NULL,  /* pf, kf */
 -                                     NULL,
 -                                     /*PARPORT_DEV_EXCL */
 -                                     0, (void *)&pprt);
 +      memset(&panel_cb, 0, sizeof(panel_cb));
 +      panel_cb.private = &pprt;
 +      /* panel_cb.flags = 0 should be PARPORT_DEV_EXCL? */
 +
 +      pprt = parport_register_dev_model(port, "panel", &panel_cb, 0);
        if (pprt == NULL) {
                pr_err("%s: port->number=%d parport=%d, parport_register_device() failed\n",
                       __func__, port->number, parport);
@@@ -2253,29 -2248,34 +2251,35 @@@ static void panel_detach(struct parpor
                       __func__, port->number, parport);
                return;
        }
+       if (scan_timer.function != NULL)
+               del_timer_sync(&scan_timer);
  
-       unregister_reboot_notifier(&panel_notifier);
+       if (pprt != NULL) {
+               if (keypad.enabled) {
+                       misc_deregister(&keypad_dev);
+                       keypad_initialized = 0;
+               }
  
-       if (keypad.enabled && keypad_initialized) {
-               misc_deregister(&keypad_dev);
-               keypad_initialized = 0;
-       }
+               if (lcd.enabled) {
+                       panel_lcd_print("\x0cLCD driver " PANEL_VERSION
+                                       "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-");
+                       misc_deregister(&lcd_dev);
+                       lcd.initialized = false;
+               }
  
-       if (lcd.enabled && lcd.initialized) {
-               misc_deregister(&lcd_dev);
-               lcd.initialized = false;
+               /* TODO: free all input signals */
+               parport_release(pprt);
+               parport_unregister_device(pprt);
+               pprt = NULL;
+               unregister_reboot_notifier(&panel_notifier);
        }
-       parport_release(pprt);
-       parport_unregister_device(pprt);
-       pprt = NULL;
  }
  
  static struct parport_driver panel_driver = {
        .name = "panel",
 -      .attach = panel_attach,
 +      .match_port = panel_attach,
        .detach = panel_detach,
 +      .devmodel = true,
  };
  
  /* init function */
@@@ -2402,28 -2402,6 +2406,6 @@@ static int __init panel_init_module(voi
  
  static void __exit panel_cleanup_module(void)
  {
-       if (scan_timer.function != NULL)
-               del_timer_sync(&scan_timer);
-       if (pprt != NULL) {
-               if (keypad.enabled) {
-                       misc_deregister(&keypad_dev);
-                       keypad_initialized = 0;
-               }
-               if (lcd.enabled) {
-                       panel_lcd_print("\x0cLCD driver " PANEL_VERSION
-                                       "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-");
-                       misc_deregister(&lcd_dev);
-                       lcd.initialized = false;
-               }
-               /* TODO: free all input signals */
-               parport_release(pprt);
-               parport_unregister_device(pprt);
-               pprt = NULL;
-       }
        parport_unregister_driver(&panel_driver);
  }
  
index 5ab2f6978209d8ac165d717bdeec16f8c1810c4e,feb596123cc3cfe52b1e322df4f6e8ea32ae2f45..0ae2180a35b77374c1f143a2e2ea8378c6f7af96
@@@ -379,7 -379,7 +379,7 @@@ void rtw_cfg80211_indicate_disconnect(s
                                                GFP_ATOMIC);
                } else {
                        cfg80211_disconnected(padapter->pnetdev, 0, NULL,
 -                                            0, GFP_ATOMIC);
 +                                            0, false, GFP_ATOMIC);
                }
        }
  }
@@@ -1041,7 -1041,7 +1041,7 @@@ static u16 rtw_get_cur_max_rate(struct 
                while (pcur_bss->SupportedRates[i] != 0 &&
                       pcur_bss->SupportedRates[i] != 0xFF) {
                        rate = pcur_bss->SupportedRates[i] & 0x7F;
-                       if (rate>max_rate)
+                       if (rate > max_rate)
                                max_rate = rate;
                        i++;
                }
index aed49bf762b4174c0c76e4851d81c7a8a7af5d41,1bcadba07fd0f93afdfc6950ef381b94bd059451..b4e45436a4b9f261261ff1817a7b5a8184147425
@@@ -230,6 -230,7 +230,6 @@@ static struct scsi_host_template rtsx_h
  
        /* queue commands only, only one command per LUN */
        .can_queue =                    1,
 -      .cmd_per_lun =                  1,
  
        /* unknown initiator id */
        .this_id =                      -1,
@@@ -536,7 -537,7 +536,7 @@@ static int rtsx_polling_thread(void *__
        for (;;) {
  
                set_current_state(TASK_INTERRUPTIBLE);
-               schedule_timeout(POLLING_INTERVAL);
+               schedule_timeout(msecs_to_jiffies(POLLING_INTERVAL));
  
                /* lock the device pointers */
                mutex_lock(&(dev->dev_mutex));
index 458bc340aece9f1af5a20c4cf51ac4feb421353b,0bfc9390bbb5ce6cd07cf25119da60c42ee8b8e2..ed040fbb7df8d319ba39b61acf2009a163bf3745
@@@ -32,7 -32,6 +32,6 @@@
   *   device_free_info - device structure resource free function
   *   device_get_pci_info - get allocated pci io/mem resource
   *   device_print_info - print out resource
-  *   device_intr - interrupt handle function
   *   device_rx_srv - rx service function
   *   device_alloc_rx_buf - rx buffer pre-allocated function
   *   device_free_tx_buf - free tx buffer function
@@@ -148,16 -147,6 +147,6 @@@ static void vt6655_init_info(struct pci
  static void device_free_info(struct vnt_private *pDevice);
  static bool device_get_pci_info(struct vnt_private *, struct pci_dev *pcid);
  static void device_print_info(struct vnt_private *pDevice);
- static  irqreturn_t  device_intr(int irq,  void *dev_instance);
- #ifdef CONFIG_PM
- static int device_notify_reboot(struct notifier_block *, unsigned long event, void *ptr);
- static struct notifier_block device_notifier = {
-       .notifier_call = device_notify_reboot,
-       .next = NULL,
-       .priority = 0,
- };
- #endif
  
  static void device_init_rd0_ring(struct vnt_private *pDevice);
  static void device_init_rd1_ring(struct vnt_private *pDevice);
@@@ -807,6 -796,10 +796,10 @@@ static int device_rx_srv(struct vnt_pri
             pRD = pRD->next) {
                if (works++ > 15)
                        break;
+               if (!pRD->pRDInfo->skb)
+                       break;
                if (vnt_receive_frame(pDevice, pRD)) {
                        if (!device_alloc_rx_buf(pDevice, pRD)) {
                                dev_err(&pDevice->pcid->dev,
@@@ -1053,129 -1046,135 +1046,135 @@@ static void vnt_check_bb_vga(struct vnt
        }
  }
  
- static  irqreturn_t  device_intr(int irq,  void *dev_instance)
+ static void vnt_interrupt_process(struct vnt_private *priv)
  {
-       struct vnt_private *pDevice = dev_instance;
+       struct ieee80211_low_level_stats *low_stats = &priv->low_stats;
        int             max_count = 0;
-       unsigned long dwMIBCounter = 0;
-       unsigned char byOrgPageSel = 0;
-       int             handled = 0;
+       u32 mib_counter;
+       u32 isr;
        unsigned long flags;
  
-       MACvReadISR(pDevice->PortOffset, &pDevice->dwIsr);
+       MACvReadISR(priv->PortOffset, &isr);
  
-       if (pDevice->dwIsr == 0)
-               return IRQ_RETVAL(handled);
+       if (isr == 0)
+               return;
  
-       if (pDevice->dwIsr == 0xffffffff) {
-               pr_debug("dwIsr = 0xffff\n");
-               return IRQ_RETVAL(handled);
+       if (isr == 0xffffffff) {
+               pr_debug("isr = 0xffff\n");
+               return;
        }
  
-       handled = 1;
-       MACvIntDisable(pDevice->PortOffset);
+       MACvIntDisable(priv->PortOffset);
  
-       spin_lock_irqsave(&pDevice->lock, flags);
+       spin_lock_irqsave(&priv->lock, flags);
  
-       /* Make sure current page is 0 */
-       VNSvInPortB(pDevice->PortOffset + MAC_REG_PAGE1SEL, &byOrgPageSel);
-       if (byOrgPageSel == 1)
-               MACvSelectPage0(pDevice->PortOffset);
-       else
-               byOrgPageSel = 0;
+       /* Read low level stats */
+       MACvReadMIBCounter(priv->PortOffset, &mib_counter);
+       low_stats->dot11RTSSuccessCount += mib_counter & 0xff;
+       low_stats->dot11RTSFailureCount += (mib_counter >> 8) & 0xff;
+       low_stats->dot11ACKFailureCount += (mib_counter >> 16) & 0xff;
+       low_stats->dot11FCSErrorCount += (mib_counter >> 24) & 0xff;
  
-       MACvReadMIBCounter(pDevice->PortOffset, &dwMIBCounter);
        /*
         * TBD....
         * Must do this after doing rx/tx, cause ISR bit is slow
         * than RD/TD write back
         * update ISR counter
         */
-       STAvUpdate802_11Counter(&pDevice->s802_11Counter, &pDevice->scStatistic, dwMIBCounter);
-       while (pDevice->dwIsr != 0) {
-               STAvUpdateIsrStatCounter(&pDevice->scStatistic, pDevice->dwIsr);
-               MACvWriteISR(pDevice->PortOffset, pDevice->dwIsr);
+       while (isr && priv->vif) {
+               MACvWriteISR(priv->PortOffset, isr);
  
-               if (pDevice->dwIsr & ISR_FETALERR) {
+               if (isr & ISR_FETALERR) {
                        pr_debug(" ISR_FETALERR\n");
-                       VNSvOutPortB(pDevice->PortOffset + MAC_REG_SOFTPWRCTL, 0);
-                       VNSvOutPortW(pDevice->PortOffset + MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPECTI);
-                       device_error(pDevice, pDevice->dwIsr);
+                       VNSvOutPortB(priv->PortOffset + MAC_REG_SOFTPWRCTL, 0);
+                       VNSvOutPortW(priv->PortOffset +
+                                    MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPECTI);
+                       device_error(priv, isr);
                }
  
-               if (pDevice->dwIsr & ISR_TBTT) {
-                       if (pDevice->vif &&
-                           pDevice->op_mode != NL80211_IFTYPE_ADHOC)
-                               vnt_check_bb_vga(pDevice);
+               if (isr & ISR_TBTT) {
+                       if (priv->op_mode != NL80211_IFTYPE_ADHOC)
+                               vnt_check_bb_vga(priv);
  
-                       pDevice->bBeaconSent = false;
-                       if (pDevice->bEnablePSMode)
-                               PSbIsNextTBTTWakeUp((void *)pDevice);
+                       priv->bBeaconSent = false;
+                       if (priv->bEnablePSMode)
+                               PSbIsNextTBTTWakeUp((void *)priv);
  
-                       if ((pDevice->op_mode == NL80211_IFTYPE_AP ||
-                           pDevice->op_mode == NL80211_IFTYPE_ADHOC) &&
-                           pDevice->vif->bss_conf.enable_beacon) {
-                               MACvOneShotTimer1MicroSec(pDevice->PortOffset,
-                                                         (pDevice->vif->bss_conf.beacon_int - MAKE_BEACON_RESERVED) << 10);
+                       if ((priv->op_mode == NL80211_IFTYPE_AP ||
+                           priv->op_mode == NL80211_IFTYPE_ADHOC) &&
+                           priv->vif->bss_conf.enable_beacon) {
+                               MACvOneShotTimer1MicroSec(priv->PortOffset,
+                                                         (priv->vif->bss_conf.beacon_int - MAKE_BEACON_RESERVED) << 10);
                        }
  
                        /* TODO: adhoc PS mode */
  
                }
  
-               if (pDevice->dwIsr & ISR_BNTX) {
-                       if (pDevice->op_mode == NL80211_IFTYPE_ADHOC) {
-                               pDevice->bIsBeaconBufReadySet = false;
-                               pDevice->cbBeaconBufReadySetCnt = 0;
+               if (isr & ISR_BNTX) {
+                       if (priv->op_mode == NL80211_IFTYPE_ADHOC) {
+                               priv->bIsBeaconBufReadySet = false;
+                               priv->cbBeaconBufReadySetCnt = 0;
                        }
  
-                       pDevice->bBeaconSent = true;
+                       priv->bBeaconSent = true;
                }
  
-               if (pDevice->dwIsr & ISR_RXDMA0)
-                       max_count += device_rx_srv(pDevice, TYPE_RXDMA0);
+               if (isr & ISR_RXDMA0)
+                       max_count += device_rx_srv(priv, TYPE_RXDMA0);
  
-               if (pDevice->dwIsr & ISR_RXDMA1)
-                       max_count += device_rx_srv(pDevice, TYPE_RXDMA1);
+               if (isr & ISR_RXDMA1)
+                       max_count += device_rx_srv(priv, TYPE_RXDMA1);
  
-               if (pDevice->dwIsr & ISR_TXDMA0)
-                       max_count += device_tx_srv(pDevice, TYPE_TXDMA0);
+               if (isr & ISR_TXDMA0)
+                       max_count += device_tx_srv(priv, TYPE_TXDMA0);
  
-               if (pDevice->dwIsr & ISR_AC0DMA)
-                       max_count += device_tx_srv(pDevice, TYPE_AC0DMA);
+               if (isr & ISR_AC0DMA)
+                       max_count += device_tx_srv(priv, TYPE_AC0DMA);
  
-               if (pDevice->dwIsr & ISR_SOFTTIMER1) {
-                       if (pDevice->vif) {
-                               if (pDevice->vif->bss_conf.enable_beacon)
-                                       vnt_beacon_make(pDevice, pDevice->vif);
-                       }
+               if (isr & ISR_SOFTTIMER1) {
+                       if (priv->vif->bss_conf.enable_beacon)
+                               vnt_beacon_make(priv, priv->vif);
                }
  
                /* If both buffers available wake the queue */
-               if (pDevice->vif) {
-                       if (AVAIL_TD(pDevice, TYPE_TXDMA0) &&
-                           AVAIL_TD(pDevice, TYPE_AC0DMA) &&
-                           ieee80211_queue_stopped(pDevice->hw, 0))
-                               ieee80211_wake_queues(pDevice->hw);
-               }
+               if (AVAIL_TD(priv, TYPE_TXDMA0) &&
+                   AVAIL_TD(priv, TYPE_AC0DMA) &&
+                   ieee80211_queue_stopped(priv->hw, 0))
+                       ieee80211_wake_queues(priv->hw);
  
-               MACvReadISR(pDevice->PortOffset, &pDevice->dwIsr);
+               MACvReadISR(priv->PortOffset, &isr);
  
-               MACvReceive0(pDevice->PortOffset);
-               MACvReceive1(pDevice->PortOffset);
+               MACvReceive0(priv->PortOffset);
+               MACvReceive1(priv->PortOffset);
  
-               if (max_count > pDevice->sOpts.int_works)
+               if (max_count > priv->sOpts.int_works)
                        break;
        }
  
-       if (byOrgPageSel == 1)
-               MACvSelectPage1(pDevice->PortOffset);
+       spin_unlock_irqrestore(&priv->lock, flags);
  
-       spin_unlock_irqrestore(&pDevice->lock, flags);
+       MACvIntEnable(priv->PortOffset, IMR_MASK_VALUE);
+ }
+ static void vnt_interrupt_work(struct work_struct *work)
+ {
+       struct vnt_private *priv =
+               container_of(work, struct vnt_private, interrupt_work);
+       if (priv->vif)
+               vnt_interrupt_process(priv);
+ }
  
-       MACvIntEnable(pDevice->PortOffset, IMR_MASK_VALUE);
+ static irqreturn_t vnt_interrupt(int irq,  void *arg)
+ {
+       struct vnt_private *priv = arg;
  
-       return IRQ_RETVAL(handled);
+       if (priv->vif)
+               schedule_work(&priv->interrupt_work);
+       return IRQ_HANDLED;
  }
  
  static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)
@@@ -1267,7 -1266,7 +1266,7 @@@ static int vnt_start(struct ieee80211_h
        if (!device_init_rings(priv))
                return -ENOMEM;
  
-       ret = request_irq(priv->pcid->irq, &device_intr,
+       ret = request_irq(priv->pcid->irq, &vnt_interrupt,
                          IRQF_SHARED, "vt6655", priv);
        if (ret) {
                dev_dbg(&priv->pcid->dev, "failed to start irq\n");
@@@ -1296,6 -1295,8 +1295,8 @@@ static void vnt_stop(struct ieee80211_h
  
        ieee80211_stop_queues(hw);
  
+       cancel_work_sync(&priv->interrupt_work);
        MACbShutdown(priv->PortOffset);
        MACbSoftwareReset(priv->PortOffset);
        CARDbRadioPowerOff(priv);
@@@ -1524,12 -1525,21 +1525,12 @@@ static void vnt_configure(struct ieee80
        struct vnt_private *priv = hw->priv;
        u8 rx_mode = 0;
  
 -      *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_PROMISC_IN_BSS |
 -              FIF_BCN_PRBRESP_PROMISC;
 +      *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC;
  
        VNSvInPortB(priv->PortOffset + MAC_REG_RCR, &rx_mode);
  
        dev_dbg(&priv->pcid->dev, "rx mode in = %x\n", rx_mode);
  
 -      if (changed_flags & FIF_PROMISC_IN_BSS) {
 -              /* unconditionally log net taps */
 -              if (*total_flags & FIF_PROMISC_IN_BSS)
 -                      rx_mode |= RCR_UNICAST;
 -              else
 -                      rx_mode &= ~RCR_UNICAST;
 -      }
 -
        if (changed_flags & FIF_ALLMULTI) {
                if (*total_flags & FIF_ALLMULTI) {
                        unsigned long flags;
@@@ -1600,6 -1610,16 +1601,16 @@@ static int vnt_set_key(struct ieee80211
        return 0;
  }
  
+ static int vnt_get_stats(struct ieee80211_hw *hw,
+                        struct ieee80211_low_level_stats *stats)
+ {
+       struct vnt_private *priv = hw->priv;
+       memcpy(stats, &priv->low_stats, sizeof(*stats));
+       return 0;
+ }
  static u64 vnt_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
  {
        struct vnt_private *priv = hw->priv;
@@@ -1637,6 -1657,7 +1648,7 @@@ static const struct ieee80211_ops vnt_m
        .prepare_multicast      = vnt_prepare_multicast,
        .configure_filter       = vnt_configure,
        .set_key                = vnt_set_key,
+       .get_stats              = vnt_get_stats,
        .get_tsf                = vnt_get_tsf,
        .set_tsf                = vnt_set_tsf,
        .reset_tsf              = vnt_reset_tsf,
@@@ -1762,6 -1783,8 +1774,8 @@@ vt6655_probe(struct pci_dev *pcid, cons
                return -ENODEV;
        }
  
+       INIT_WORK(&priv->interrupt_work, vnt_interrupt_work);
        /* do reset */
        if (!MACbSoftwareReset(priv->PortOffset)) {
                dev_err(&pcid->dev, ": Failed to access MAC hardware..\n");
        wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
                BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
  
 -      priv->hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
 -              IEEE80211_HW_REPORTS_TX_ACK_STATUS |
 -              IEEE80211_HW_SIGNAL_DBM |
 -              IEEE80211_HW_TIMING_BEACON_ONLY;
 +      ieee80211_hw_set(priv->hw, TIMING_BEACON_ONLY);
 +      ieee80211_hw_set(priv->hw, SIGNAL_DBM);
 +      ieee80211_hw_set(priv->hw, RX_INCLUDES_FCS);
 +      ieee80211_hw_set(priv->hw, REPORTS_TX_ACK_STATUS);
  
        priv->hw->max_signal = 100;
  
@@@ -1855,47 -1878,4 +1869,4 @@@ static struct pci_driver device_driver 
  #endif
  };
  
- static int __init vt6655_init_module(void)
- {
-       int ret;
-       ret = pci_register_driver(&device_driver);
- #ifdef CONFIG_PM
-       if (ret >= 0)
-               register_reboot_notifier(&device_notifier);
- #endif
-       return ret;
- }
- static void __exit vt6655_cleanup_module(void)
- {
- #ifdef CONFIG_PM
-       unregister_reboot_notifier(&device_notifier);
- #endif
-       pci_unregister_driver(&device_driver);
- }
- module_init(vt6655_init_module);
- module_exit(vt6655_cleanup_module);
- #ifdef CONFIG_PM
- static int
- device_notify_reboot(struct notifier_block *nb, unsigned long event, void *p)
- {
-       struct pci_dev *pdev = NULL;
-       switch (event) {
-       case SYS_DOWN:
-       case SYS_HALT:
-       case SYS_POWER_OFF:
-               for_each_pci_dev(pdev) {
-                       if (pci_dev_driver(pdev) == &device_driver) {
-                               if (pci_get_drvdata(pdev))
-                                       vt6655_suspend(pdev, PMSG_HIBERNATE);
-                       }
-               }
-       }
-       return NOTIFY_DONE;
- }
- #endif
+ module_pci_driver(device_driver);
index 2ccfbff37c4245a1e126e0b8df68ae73ee08825c,cb8c2db7073422f66367e5546acc25a785c35f90..f97323f19acfd8c988a2fbefb8b7f260ef7ece34
@@@ -522,7 -522,7 +522,7 @@@ static int vnt_start(struct ieee80211_h
  
        priv->rx_buf_sz = MAX_TOTAL_SIZE_WITH_ALL_HEADERS;
  
-       if (vnt_alloc_bufs(priv) == false) {
+       if (!vnt_alloc_bufs(priv)) {
                dev_dbg(&priv->usb->dev, "vnt_alloc_bufs fail...\n");
                return -ENOMEM;
        }
@@@ -785,7 -785,8 +785,7 @@@ static void vnt_configure(struct ieee80
        u8 rx_mode = 0;
        int rc;
  
 -      *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_PROMISC_IN_BSS |
 -              FIF_BCN_PRBRESP_PROMISC;
 +      *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC;
  
        rc = vnt_control_in(priv, MESSAGE_TYPE_READ, MAC_REG_RCR,
                MESSAGE_REQUEST_MACREG, sizeof(u8), &rx_mode);
  
        dev_dbg(&priv->usb->dev, "rx mode in = %x\n", rx_mode);
  
 -      if (changed_flags & FIF_PROMISC_IN_BSS) {
 -              /* unconditionally log net taps */
 -              if (*total_flags & FIF_PROMISC_IN_BSS)
 -                      rx_mode |= RCR_UNICAST;
 -              else
 -                      rx_mode &= ~RCR_UNICAST;
 -      }
 -
        if (changed_flags & FIF_ALLMULTI) {
                if (*total_flags & FIF_ALLMULTI) {
                        if (priv->mc_list_count > 2)
@@@ -978,10 -987,10 +978,10 @@@ vt6656_probe(struct usb_interface *intf
        wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
                BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
  
 -      priv->hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
 -              IEEE80211_HW_REPORTS_TX_ACK_STATUS |
 -              IEEE80211_HW_SIGNAL_DBM |
 -              IEEE80211_HW_TIMING_BEACON_ONLY;
 +      ieee80211_hw_set(priv->hw, TIMING_BEACON_ONLY);
 +      ieee80211_hw_set(priv->hw, SIGNAL_DBM);
 +      ieee80211_hw_set(priv->hw, RX_INCLUDES_FCS);
 +      ieee80211_hw_set(priv->hw, REPORTS_TX_ACK_STATUS);
  
        priv->hw->max_signal = 100;
  
diff --combined tools/Makefile
index b113078fb7adcb51098bc59e21eea162fd8a3965,79463b00b81e0dd36f92a10829d8ca4d3af6e4f3..d6f307dfb1a3c090dc94472f9761c377616ebb92
@@@ -1,8 -1,3 +1,8 @@@
 +# Some of the tools (perf) use same make variables
 +# as in kernel build.
 +export srctree=
 +export objtree=
 +
  include scripts/Makefile.include
  
  help:
@@@ -13,6 -8,7 +13,7 @@@
        @echo '  cpupower   - a tool for all things x86 CPU power'
        @echo '  firewire   - the userspace part of nosy, an IEEE-1394 traffic sniffer'
        @echo '  hv         - tools used when in Hyper-V clients'
+       @echo '  iio        - IIO tools'
        @echo '  lguest     - a minimal 32-bit x86 hypervisor'
        @echo '  perf       - Linux performance measurement and analysis tool'
        @echo '  selftests  - various kernel selftests'
@@@ -23,7 -19,6 +24,7 @@@
        @echo '  vm         - misc vm tools'
        @echo '  x86_energy_perf_policy - Intel energy policy tool'
        @echo '  tmon       - thermal monitoring and tuning tool'
 +      @echo '  freefall   - laptop accelerometer program for disk protection'
        @echo ''
        @echo 'You can do:'
        @echo ' $$ make -C tools/ <tool>_install'
@@@ -47,22 -42,17 +48,22 @@@ acpi: FORC
  cpupower: FORCE
        $(call descend,power/$@)
  
- cgroup firewire hv guest usb virtio vm net: FORCE
+ cgroup firewire hv guest usb virtio vm net iio: FORCE
        $(call descend,$@)
  
  liblockdep: FORCE
        $(call descend,lib/lockdep)
  
 -libapikfs: FORCE
 +libapi: FORCE
        $(call descend,lib/api)
  
 -perf: libapikfs FORCE
 -      $(call descend,$@)
 +# The perf build does not follow the descend function setup,
 +# invoking it via it's own make rule.
 +PERF_O   = $(if $(O),$(O)/tools/perf,)
 +
 +perf: FORCE
 +      $(Q)mkdir -p $(PERF_O) .
 +      $(Q)$(MAKE) --no-print-directory -C perf O=$(PERF_O) subdir=
  
  selftests: FORCE
        $(call descend,testing/$@)
@@@ -73,9 -63,6 +74,9 @@@ turbostat x86_energy_perf_policy: FORC
  tmon: FORCE
        $(call descend,thermal/$@)
  
 +freefall: FORCE
 +      $(call descend,laptop/$@)
 +
  acpi_install:
        $(call descend,power/$(@:_install=),install)
  
@@@ -94,13 -81,10 +95,13 @@@ turbostat_install x86_energy_perf_polic
  tmon_install:
        $(call descend,thermal/$(@:_install=),install)
  
 +freefall_install:
 +      $(call descend,laptop/$(@:_install=),install)
 +
  install: acpi_install cgroup_install cpupower_install hv_install firewire_install lguest_install \
                perf_install selftests_install turbostat_install usb_install \
                virtio_install vm_install net_install x86_energy_perf_policy_install \
 -      tmon
 +              tmon freefall_install
  
  acpi_clean:
        $(call descend,power/acpi,clean)
  cpupower_clean:
        $(call descend,power/cpupower,clean)
  
- cgroup_clean hv_clean firewire_clean lguest_clean usb_clean virtio_clean vm_clean net_clean:
+ cgroup_clean hv_clean firewire_clean lguest_clean usb_clean virtio_clean vm_clean net_clean iio_clean:
        $(call descend,$(@:_clean=),clean)
  
  liblockdep_clean:
        $(call descend,lib/lockdep,clean)
  
 -libapikfs_clean:
 +libapi_clean:
        $(call descend,lib/api,clean)
  
 -perf_clean: libapikfs_clean
 +perf_clean:
        $(call descend,$(@:_clean=),clean)
  
  selftests_clean:
@@@ -129,11 -113,8 +130,12 @@@ turbostat_clean x86_energy_perf_policy_
  tmon_clean:
        $(call descend,thermal/tmon,clean)
  
 +freefall_clean:
 +      $(call descend,laptop/freefall,clean)
 +
  clean: acpi_clean cgroup_clean cpupower_clean hv_clean firewire_clean lguest_clean \
                perf_clean selftests_clean turbostat_clean usb_clean virtio_clean \
-               vm_clean net_clean x86_energy_perf_policy_clean tmon_clean freefall_clean
 -              vm_clean net_clean iio_clean x86_energy_perf_policy_clean tmon_clean
++              vm_clean net_clean iio_clean x86_energy_perf_policy_clean tmon_clean \
++              freefall_clean
  
  .PHONY: FORCE