Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Oct 2016 16:28:53 +0000 (09:28 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Oct 2016 16:28:53 +0000 (09:28 -0700)
Pull SCSI updates from James Bottomley:
 "This update includes the usual round of major driver updates (hpsa,
  be2iscsi, hisi_sas, zfcp, cxlflash). There's a new incarnation of hpsa
  called smartpqi for which a driver is added, there's some cleanup work
  of the ibm vscsi target and updates to libfc, plus a whole host of
  minor fixes and updates and finally the removal of several ISA drivers
  which seem not to have been used for years"

* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (173 commits)
  scsi: mvsas: Mark symbols static where possible
  scsi: pm8001: Mark symbols static where possible
  scsi: arcmsr: Simplify user_len checking
  scsi: fcoe: fix off by one in eth2fc_speed()
  scsi: dtc: remove from tree
  scsi: t128: remove from tree
  scsi: pas16: remove from tree
  scsi: u14-34f: remove from tree
  scsi: ultrastor: remove from tree
  scsi: in2000: remove from tree
  scsi: wd7000: remove from tree
  scsi: scsi_dh_alua: Fix memory leak in alua_rtpg()
  scsi: lpfc: Mark symbols static where possible
  scsi: hpsa: correct call to hpsa_do_reset
  scsi: ufs: Get a TM service response from the correct offset
  scsi: ibmvfc: Fix I/O hang when port is not mapped
  scsi: megaraid_sas: clean function declarations in megaraid_sas_base.c up
  scsi: ipr: Remove redundant messages at adapter init time
  scsi: ipr: Don't log unnecessary 9084 error details
  scsi: smartpqi: raid bypass lba calculation fix
  ...

1  2 
MAINTAINERS
drivers/scsi/hosts.c
drivers/scsi/ipr.c
drivers/scsi/megaraid/megaraid_sas_base.c
drivers/scsi/mpt3sas/mpt3sas_base.c
drivers/scsi/scsi_priv.h
drivers/scsi/virtio_scsi.c

diff --combined MAINTAINERS
@@@ -636,15 -636,6 +636,15 @@@ F:       drivers/tty/serial/altera_jtaguart.
  F:    include/linux/altera_uart.h
  F:    include/linux/altera_jtaguart.h
  
 +AMAZON ETHERNET DRIVERS
 +M:    Netanel Belgazal <netanel@annapurnalabs.com>
 +R:    Saeed Bishara <saeed@annapurnalabs.com>
 +R:    Zorik Machulsky <zorik@annapurnalabs.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    Documentation/networking/ena.txt
 +F:    drivers/net/ethernet/amazon/
 +
  AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER
  M:    Tom Lendacky <thomas.lendacky@amd.com>
  M:    Gary Hook <gary.hook@amd.com>
@@@ -807,7 -798,6 +807,7 @@@ M: Laura Abbott <labbott@redhat.com
  M:    Sumit Semwal <sumit.semwal@linaro.org>
  L:    devel@driverdev.osuosl.org
  S:    Supported
 +F:    Documentation/devicetree/bindings/staging/ion/
  F:    drivers/staging/android/ion
  F:    drivers/staging/android/uapi/ion.h
  F:    drivers/staging/android/uapi/ion_test.h
@@@ -819,11 -809,11 +819,11 @@@ L:      alsa-devel@alsa-project.org (moderat
  S:    Maintained
  F:    sound/aoa/
  
 -APEX EMBEDDED SYSTEMS STX104 DAC DRIVER
 +APEX EMBEDDED SYSTEMS STX104 IIO DRIVER
  M:    William Breathitt Gray <vilhelm.gray@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    drivers/iio/dac/stx104.c
 +F:    drivers/iio/adc/stx104.c
  
  APM DRIVER
  M:    Jiri Kosina <jikos@kernel.org>
@@@ -891,15 -881,6 +891,15 @@@ S:       Supporte
  F:    drivers/gpu/drm/arc/
  F:    Documentation/devicetree/bindings/display/snps,arcpgu.txt
  
 +ARM ARCHITECTED TIMER DRIVER
 +M:    Mark Rutland <mark.rutland@arm.com>
 +M:    Marc Zyngier <marc.zyngier@arm.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/include/asm/arch_timer.h
 +F:    arch/arm64/include/asm/arch_timer.h
 +F:    drivers/clocksource/arm_arch_timer.c
 +
  ARM HDLCD DRM DRIVER
  M:    Liviu Dudau <liviu.dudau@arm.com>
  S:    Supported
@@@ -922,17 -903,15 +922,17 @@@ F:      arch/arm/include/asm/floppy.
  
  ARM PMU PROFILING AND DEBUGGING
  M:    Will Deacon <will.deacon@arm.com>
 -R:    Mark Rutland <mark.rutland@arm.com>
 +M:    Mark Rutland <mark.rutland@arm.com>
  S:    Maintained
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  F:    arch/arm*/kernel/perf_*
  F:    arch/arm/oprofile/common.c
  F:    arch/arm*/kernel/hw_breakpoint.c
  F:    arch/arm*/include/asm/hw_breakpoint.h
  F:    arch/arm*/include/asm/perf_event.h
 -F:    drivers/perf/arm_pmu.c
 +F:    drivers/perf/*
  F:    include/linux/perf/arm_pmu.h
 +F:    Documentation/devicetree/bindings/arm/pmu.txt
  
  ARM PORT
  M:    Russell King <linux@armlinux.org.uk>
@@@ -1025,7 -1004,6 +1025,7 @@@ N:      meso
  ARM/Annapurna Labs ALPINE ARCHITECTURE
  M:    Tsahee Zidenberg <tsahee@annapurnalabs.com>
  M:    Antoine Tenart <antoine.tenart@free-electrons.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-alpine/
  F:    arch/arm/boot/dts/alpine*
@@@ -1134,11 -1112,6 +1134,11 @@@ F:    drivers/hwtracing/coresight/
  F:    Documentation/trace/coresight.txt
  F:    Documentation/devicetree/bindings/arm/coresight.txt
  F:    Documentation/ABI/testing/sysfs-bus-coresight-devices-*
 +F:    tools/perf/arch/arm/util/pmu.c
 +F:    tools/perf/arch/arm/util/auxtrace.c
 +F:    tools/perf/arch/arm/util/cs-etm.c
 +F:    tools/perf/arch/arm/util/cs-etm.h
 +F:    tools/perf/util/cs-etm.h
  
  ARM/CORGI MACHINE SUPPORT
  M:    Richard Purdie <rpurdie@rpsys.net>
@@@ -1640,8 -1613,7 +1640,8 @@@ N:      rockchi
  
  ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
  M:    Kukjin Kim <kgene@kernel.org>
 -M:    Krzysztof Kozlowski <k.kozlowski@samsung.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +R:    Javier Martinez Canillas <javier@osg.samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
  S:    Maintained
@@@ -1661,6 -1633,7 +1661,6 @@@ F:      drivers/*/*s3c64xx
  F:    drivers/*/*s5pv210*
  F:    drivers/memory/samsung/*
  F:    drivers/soc/samsung/*
 -F:    drivers/spi/spi-s3c*
  F:    Documentation/arm/Samsung/
  F:    Documentation/devicetree/bindings/arm/samsung/
  F:    Documentation/devicetree/bindings/sram/samsung-sram.txt
@@@ -1848,7 -1821,6 +1848,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  ARM/UNIPHIER ARCHITECTURE
  M:    Masahiro Yamada <yamada.masahiro@socionext.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-uniphier.git
  S:    Maintained
  F:    arch/arm/boot/dts/uniphier*
  F:    arch/arm/include/asm/hardware/cache-uniphier.h
@@@ -1856,7 -1828,6 +1856,7 @@@ F:      arch/arm/mach-uniphier
  F:    arch/arm/mm/cache-uniphier.c
  F:    arch/arm64/boot/dts/socionext/
  F:    drivers/bus/uniphier-system-bus.c
 +F:    drivers/clk/uniphier/
  F:    drivers/i2c/busses/i2c-uniphier*
  F:    drivers/pinctrl/uniphier/
  F:    drivers/tty/serial/8250/8250_uniphier.c
@@@ -1993,13 -1964,6 +1993,13 @@@ S:    Maintaine
  F:    drivers/media/i2c/as3645a.c
  F:    include/media/i2c/as3645a.h
  
 +ASAHI KASEI AK8974 DRIVER
 +M:    Linus Walleij <linus.walleij@linaro.org>
 +L:    linux-iio@vger.kernel.org
 +W:    http://www.akm.com/
 +S:    Supported
 +F:    drivers/iio/magnetometer/ak8974.c
 +
  ASC7621 HARDWARE MONITOR DRIVER
  M:    George Joseph <george.joseph@fairview5.com>
  L:    linux-hwmon@vger.kernel.org
@@@ -2138,6 -2102,11 +2138,6 @@@ M:     Ludovic Desroches <ludovic.desroches
  S:    Maintained
  F:    drivers/mmc/host/atmel-mci.c
  
 -ATMEL AT91 / AT32 SERIAL DRIVER
 -M:    Nicolas Ferre <nicolas.ferre@atmel.com>
 -S:    Supported
 -F:    drivers/tty/serial/atmel_serial.c
 -
  ATMEL AT91 SAMA5D2-Compatible Shutdown Controller
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  S:    Supported
@@@ -2505,7 -2474,7 +2505,7 @@@ F:      include/net/bluetooth
  BONDING DRIVER
  M:    Jay Vosburgh <j.vosburgh@gmail.com>
  M:    Veaceslav Falico <vfalico@gmail.com>
 -M:    Andy Gospodarek <gospo@cumulusnetworks.com>
 +M:    Andy Gospodarek <andy@greyhouse.net>
  L:    netdev@vger.kernel.org
  W:    http://sourceforge.net/projects/bonding/
  S:    Supported
@@@ -2520,7 -2489,7 +2520,7 @@@ S:      Supporte
  F:    kernel/bpf/
  
  BROADCOM B44 10/100 ETHERNET DRIVER
 -M:    Gary Zambrano <zambrano@broadcom.com>
 +M:    Michael Chan <michael.chan@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/broadcom/b44.*
@@@ -3155,7 -3124,7 +3155,7 @@@ L:      cocci@systeme.lip6.fr (moderated fo
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git misc
  W:    http://coccinelle.lip6.fr/
  S:    Supported
 -F:    Documentation/coccinelle.txt
 +F:    Documentation/dev-tools/coccinelle.rst
  F:    scripts/coccinelle/
  F:    scripts/coccicheck
  
@@@ -3181,7 -3150,6 +3181,7 @@@ COMMON CLK FRAMEWOR
  M:    Michael Turquette <mturquette@baylibre.com>
  M:    Stephen Boyd <sboyd@codeaurora.org>
  L:    linux-clk@vger.kernel.org
 +Q:    http://patchwork.kernel.org/project/linux-clk/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git
  S:    Maintained
  F:    Documentation/devicetree/bindings/clock/
@@@ -3269,7 -3237,7 +3269,7 @@@ F:      kernel/cpuset.
  CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)
  M:    Johannes Weiner <hannes@cmpxchg.org>
  M:    Michal Hocko <mhocko@kernel.org>
 -M:    Vladimir Davydov <vdavydov@virtuozzo.com>
 +M:    Vladimir Davydov <vdavydov.dev@gmail.com>
  L:    cgroups@vger.kernel.org
  L:    linux-mm@kvack.org
  S:    Maintained
@@@ -3290,7 -3258,7 +3290,7 @@@ S:      Maintaine
  F:    drivers/net/wan/cosa*
  
  CPMAC ETHERNET DRIVER
 -M:    Florian Fainelli <florian@openwrt.org>
 +M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/ethernet/ti/cpmac.c
@@@ -3302,7 -3270,6 +3302,7 @@@ L:      linux-pm@vger.kernel.or
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
  T:    git git://git.linaro.org/people/vireshk/linux.git (For ARM Updates)
 +F:    Documentation/cpu-freq/
  F:    drivers/cpufreq/
  F:    include/linux/cpufreq.h
  
@@@ -3784,8 -3751,8 +3784,8 @@@ F:      drivers/leds/leds-da90??.
  F:    drivers/mfd/da903x.c
  F:    drivers/mfd/da90??-*.c
  F:    drivers/mfd/da91??-*.c
 -F:    drivers/power/da9052-battery.c
 -F:    drivers/power/da91??-*.c
 +F:    drivers/power/supply/da9052-battery.c
 +F:    drivers/power/supply/da91??-*.c
  F:    drivers/regulator/da903x.c
  F:    drivers/regulator/da9???-regulator.[ch]
  F:    drivers/rtc/rtc-da90??.c
@@@ -3801,12 -3768,6 +3801,12 @@@ F:    include/linux/regulator/da9211.
  F:    include/sound/da[79]*.h
  F:    sound/soc/codecs/da[79]*.[ch]
  
 +DIAMOND SYSTEMS GPIO-MM GPIO DRIVER
 +M:    William Breathitt Gray <vilhelm.gray@gmail.com>
 +L:    linux-gpio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/gpio/gpio-gpio-mm.c
 +
  DIGI NEO AND CLASSIC PCI PRODUCTS
  M:    Lidza Louina <lidza.louina@gmail.com>
  M:    Mark Hounschell <markh@compro.net>
@@@ -4432,6 -4393,7 +4432,6 @@@ F:      Documentation/filesystems/ecryptfs.t
  F:    fs/ecryptfs/
  
  EDAC-CORE
 -M:    Doug Thompson <dougthompson@xmission.com>
  M:    Borislav Petkov <bp@alien8.de>
  M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
@@@ -4444,12 -4406,14 +4444,12 @@@ F:   drivers/edac
  F:    include/linux/edac.h
  
  EDAC-AMD64
 -M:    Doug Thompson <dougthompson@xmission.com>
  M:    Borislav Petkov <bp@alien8.de>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/amd64_edac*
  
  EDAC-CALXEDA
 -M:    Doug Thompson <dougthompson@xmission.com>
  M:    Robert Richter <rric@kernel.org>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
@@@ -4465,21 -4429,17 +4465,21 @@@ F:   drivers/edac/octeon_edac
  
  EDAC-E752X
  M:    Mark Gross <mark.gross@intel.com>
 -M:    Doug Thompson <dougthompson@xmission.com>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/e752x_edac.c
  
  EDAC-E7XXX
 -M:    Doug Thompson <dougthompson@xmission.com>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/e7xxx_edac.c
  
 +EDAC-FSL_DDR
 +M:    York Sun <york.sun@nxp.com>
 +L:    linux-edac@vger.kernel.org
 +S:    Maintained
 +F:    drivers/edac/fsl_ddr_edac.*
 +
  EDAC-GHES
  M:    Mauro Carvalho Chehab <mchehab@s-opensource.com>
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
@@@ -4494,11 -4454,13 +4494,11 @@@ S:   Maintaine
  F:    drivers/edac/i82443bxgx_edac.c
  
  EDAC-I3000
 -M:    Jason Uhlenkott <juhlenko@akamai.com>
  L:    linux-edac@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    drivers/edac/i3000_edac.c
  
  EDAC-I5000
 -M:    Doug Thompson <dougthompson@xmission.com>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    drivers/edac/i5000_edac.c
@@@ -4562,12 -4524,6 +4562,12 @@@ L:    linux-edac@vger.kernel.or
  S:    Maintained
  F:    drivers/edac/sb_edac.c
  
 +EDAC-SKYLAKE
 +M:    Tony Luck <tony.luck@intel.com>
 +L:    linux-edac@vger.kernel.org
 +S:    Maintained
 +F:    drivers/edac/skx_edac.c
 +
  EDAC-XGENE
  APPLIED MICRO (APM) X-GENE SOC EDAC
  M:     Loc Ho <lho@apm.com>
@@@ -4610,13 -4566,6 +4610,13 @@@ M:    Peter Jones <pjones@redhat.com
  S:    Maintained
  F:    drivers/video/fbdev/efifb.c
  
 +EFI TEST DRIVER
 +L:    linux-efi@vger.kernel.org
 +M:    Ivan Hu <ivan.hu@canonical.com>
 +M:    Matt Fleming <matt@codeblueprint.co.uk>
 +S:    Maintained
 +F:    drivers/firmware/efi/test/
 +
  EFS FILESYSTEM
  W:    http://aeschi.ch.eu.org/efs/
  S:    Orphan
@@@ -4884,7 -4833,6 +4884,7 @@@ F:      tools/firewire
  
  FIRMWARE LOADER (request_firmware)
  M:    Ming Lei <ming.lei@canonical.com>
 +M:    Luis R. Rodriguez <mcgrof@kernel.org>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/firmware_class/
@@@ -5105,9 -5053,10 +5105,9 @@@ F:     include/linux/fscrypto.
  
  F2FS FILE SYSTEM
  M:    Jaegeuk Kim <jaegeuk@kernel.org>
 -M:    Changman Lee <cm224.lee@samsung.com>
 -R:    Chao Yu <yuchao0@huawei.com>
 +M:    Chao Yu <yuchao0@huawei.com>
  L:    linux-f2fs-devel@lists.sourceforge.net
 -W:    http://en.wikipedia.org/wiki/F2FS
 +W:    https://f2fs.wiki.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git
  S:    Maintained
  F:    Documentation/filesystems/f2fs.txt
@@@ -5169,7 -5118,7 +5169,7 @@@ GCOV BASED KERNEL PROFILIN
  M:    Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
  S:    Maintained
  F:    kernel/gcov/
 -F:    Documentation/gcov.txt
 +F:    Documentation/dev-tools/gcov.rst
  
  GDT SCSI DISK ARRAY CONTROLLER DRIVER
  M:    Achim Leubner <achim_leubner@adaptec.com>
@@@ -5286,13 -5235,6 +5286,13 @@@ L:    linux-input@vger.kernel.or
  S:    Maintained
  F:    drivers/input/touchscreen/goodix.c
  
 +GPIO MOCKUP DRIVER
 +M:    Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
 +L:    linux-gpio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/gpio/gpio-mockup.c
 +F:    tools/testing/selftests/gpio/
 +
  GPIO SUBSYSTEM
  M:    Linus Walleij <linus.walleij@linaro.org>
  M:    Alexandre Courbot <gnurou@gmail.com>
@@@ -5324,77 -5266,6 +5324,77 @@@ L:    netdev@vger.kernel.or
  S:    Maintained
  F:    drivers/net/ethernet/aeroflex/
  
 +GREYBUS SUBSYSTEM
 +M:    Johan Hovold <johan@kernel.org>
 +M:    Alex Elder <elder@kernel.org>
 +M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 +S:    Maintained
 +F:    drivers/staging/greybus/
 +
 +GREYBUS AUDIO PROTOCOLS DRIVERS
 +M:    Vaibhav Agarwal <vaibhav.sr@gmail.com>
 +M:    Mark Greer <mgreer@animalcreek.com>
 +S:    Maintained
 +F:    drivers/staging/greybus/audio_apbridgea.c
 +F:    drivers/staging/greybus/audio_apbridgea.h
 +F:    drivers/staging/greybus/audio_codec.c
 +F:    drivers/staging/greybus/audio_codec.h
 +F:    drivers/staging/greybus/audio_gb.c
 +F:    drivers/staging/greybus/audio_manager.c
 +F:    drivers/staging/greybus/audio_manager.h
 +F:    drivers/staging/greybus/audio_manager_module.c
 +F:    drivers/staging/greybus/audio_manager_private.h
 +F:    drivers/staging/greybus/audio_manager_sysfs.c
 +F:    drivers/staging/greybus/audio_module.c
 +F:    drivers/staging/greybus/audio_topology.c
 +
 +GREYBUS PROTOCOLS DRIVERS
 +M:    Rui Miguel Silva <rmfrfs@gmail.com>
 +S:    Maintained
 +F:    drivers/staging/greybus/sdio.c
 +F:    drivers/staging/greybus/light.c
 +F:    drivers/staging/greybus/gpio.c
 +F:    drivers/staging/greybus/power_supply.c
 +F:    drivers/staging/greybus/spi.c
 +F:    drivers/staging/greybus/spilib.c
 +
 +GREYBUS PROTOCOLS DRIVERS
 +M:    Bryan O'Donoghue <pure.logic@nexus-software.ie>
 +S:    Maintained
 +F:    drivers/staging/greybus/loopback.c
 +F:    drivers/staging/greybus/timesync.c
 +F:    drivers/staging/greybus/timesync_platform.c
 +
 +GREYBUS PROTOCOLS DRIVERS
 +M:    Viresh Kumar <vireshk@kernel.org>
 +S:    Maintained
 +F:    drivers/staging/greybus/authentication.c
 +F:    drivers/staging/greybus/bootrom.c
 +F:    drivers/staging/greybus/firmware.h
 +F:    drivers/staging/greybus/fw-core.c
 +F:    drivers/staging/greybus/fw-download.c
 +F:    drivers/staging/greybus/fw-managament.c
 +F:    drivers/staging/greybus/greybus_authentication.h
 +F:    drivers/staging/greybus/greybus_firmware.h
 +F:    drivers/staging/greybus/hid.c
 +F:    drivers/staging/greybus/i2c.c
 +F:    drivers/staging/greybus/spi.c
 +F:    drivers/staging/greybus/spilib.c
 +F:    drivers/staging/greybus/spilib.h
 +
 +GREYBUS PROTOCOLS DRIVERS
 +M:    David Lin <dtwlin@gmail.com>
 +S:    Maintained
 +F:    drivers/staging/greybus/uart.c
 +F:    drivers/staging/greybus/log.c
 +
 +GREYBUS PLATFORM DRIVERS
 +M:    Vaibhav Hiremath <hvaibhav.linux@gmail.com>
 +S:    Maintained
 +F:    drivers/staging/greybus/arche-platform.c
 +F:    drivers/staging/greybus/arche-apb-ctrl.c
 +F:    drivers/staging/greybus/arche_platform.h
 +
  GSPCA FINEPIX SUBDRIVER
  M:    Frank Zago <frank@zago.net>
  L:    linux-media@vger.kernel.org
@@@ -5695,9 -5566,10 +5695,9 @@@ F:     Documentation/devicetree/bindings/sc
  
  HOST AP DRIVER
  M:    Jouni Malinen <j@w1.fi>
 -L:    hostap@shmoo.com (subscribers-only)
  L:    linux-wireless@vger.kernel.org
 -W:    http://hostap.epitest.fi/
 -S:    Maintained
 +W:    http://w1.fi/hostap-driver.html
 +S:    Obsolete
  F:    drivers/net/wireless/intersil/hostap/
  
  HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER
@@@ -5734,7 -5606,7 +5734,7 @@@ M:      Sebastian Reichel <sre@kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi.git
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-hsi
 -F:    Documentation/hsi.txt
 +F:    Documentation/device-drivers/serial-interfaces.rst
  F:    drivers/hsi/
  F:    include/linux/hsi/
  F:    include/uapi/linux/hsi/
@@@ -6213,7 -6085,7 +6213,7 @@@ S:      Supporte
  F:    drivers/cpufreq/intel_pstate.c
  
  INTEL FRAMEBUFFER DRIVER (excluding 810 and 815)
 -M:    Maik Broemme <mbroemme@plusserver.de>
 +M:    Maik Broemme <mbroemme@libmpq.org>
  L:    linux-fbdev@vger.kernel.org
  S:    Maintained
  F:    Documentation/fb/intelfb.txt
@@@ -6715,7 -6587,7 +6715,7 @@@ L:      kasan-dev@googlegroups.co
  S:    Maintained
  F:    arch/*/include/asm/kasan.h
  F:    arch/*/mm/kasan_init*
 -F:    Documentation/kasan.txt
 +F:    Documentation/dev-tools/kasan.rst
  F:    include/linux/kasan*.h
  F:    lib/test_kasan.c
  F:    mm/kasan/
@@@ -6931,7 -6803,7 +6931,7 @@@ KMEMCHEC
  M:    Vegard Nossum <vegardno@ifi.uio.no>
  M:    Pekka Enberg <penberg@kernel.org>
  S:    Maintained
 -F:    Documentation/kmemcheck.txt
 +F:    Documentation/dev-tools/kmemcheck.rst
  F:    arch/x86/include/asm/kmemcheck.h
  F:    arch/x86/mm/kmemcheck/
  F:    include/linux/kmemcheck.h
@@@ -6940,7 -6812,7 +6940,7 @@@ F:      mm/kmemcheck.
  KMEMLEAK
  M:    Catalin Marinas <catalin.marinas@arm.com>
  S:    Maintained
 -F:    Documentation/kmemleak.txt
 +F:    Documentation/dev-tools/kmemleak.rst
  F:    include/linux/kmemleak.h
  F:    mm/kmemleak.c
  F:    mm/kmemleak-test.c
@@@ -7553,8 -7425,9 +7553,8 @@@ F:      Documentation/hwmon/max2075
  F:    drivers/hwmon/max20751.c
  
  MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
 -M:    "Hans J. Koch" <hjk@hansjkoch.de>
  L:    linux-hwmon@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/hwmon/max6650
  F:    drivers/hwmon/max6650.c
  
@@@ -7575,12 -7448,11 +7575,12 @@@ F:   Documentation/devicetree/bindings/so
  F:    sound/soc/codecs/max9860.*
  
  MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
 -M:    Krzysztof Kozlowski <k.kozlowski@samsung.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-pm@vger.kernel.org
  S:    Supported
 -F:    drivers/power/max14577_charger.c
 -F:    drivers/power/max77693_charger.c
 +F:    drivers/power/supply/max14577_charger.c
 +F:    drivers/power/supply/max77693_charger.c
  
  MAXIM MAX77802 MULTIFUNCTION PMIC DEVICE DRIVERS
  M:    Javier Martinez Canillas <javier@osg.samsung.com>
@@@ -7592,8 -7464,7 +7592,8 @@@ F:      include/dt-bindings/*/*max77802.
  
  MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
  M:    Chanwoo Choi <cw00.choi@samsung.com>
 -M:    Krzysztof Kozlowski <k.kozlowski@samsung.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  S:    Supported
  F:    drivers/*/max14577*.c
@@@ -7625,12 -7496,6 +7625,12 @@@ L:    linux-iio@vger.kernel.or
  S:    Maintained
  F:    drivers/iio/potentiometer/mcp4531.c
  
 +MEASUREMENT COMPUTING CIO-DAC IIO DRIVER
 +M:    William Breathitt Gray <vilhelm.gray@gmail.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/iio/dac/cio-dac.c
 +
  MEDIA DRIVERS FOR RENESAS - FCP
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
  L:    linux-media@vger.kernel.org
@@@ -7783,26 -7648,13 +7783,26 @@@ W:   http://www.mellanox.co
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
  F:    drivers/net/ethernet/mellanox/mlxsw/
  
 +MELLANOX MLXCPLD LED DRIVER
 +M:    Vadim Pasternak <vadimp@mellanox.com>
 +L:    linux-leds@vger.kernel.org
 +S:    Supported
 +F:    drivers/leds/leds-mlxcpld.c
 +F:    Documentation/leds/leds-mlxcpld.txt
 +
 +MELLANOX PLATFORM DRIVER
 +M:      Vadim Pasternak <vadimp@mellanox.com>
 +L:      platform-driver-x86@vger.kernel.org
 +S:      Supported
 +F:      arch/x86/platform/mellanox/mlx-platform.c
 +
  SOFT-ROCE DRIVER (rxe)
  M:    Moni Shoua <monis@mellanox.com>
  L:    linux-rdma@vger.kernel.org
  S:    Supported
  W:    https://github.com/SoftRoCE/rxe-dev/wiki/rxe-dev:-Home
  Q:    http://patchwork.kernel.org/project/linux-rdma/list/
 -F:    drivers/infiniband/hw/rxe/
 +F:    drivers/infiniband/sw/rxe/
  F:    include/uapi/rdma/rdma_user_rxe.h
  
  MEMBARRIER SUPPORT
@@@ -7881,12 -7733,6 +7881,12 @@@ T:    git git://git.monstr.eu/linux-2.6-mi
  S:    Supported
  F:    arch/microblaze/
  
 +MICROCHIP / ATMEL AT91 / AT32 SERIAL DRIVER
 +M:    Richard Genoud <richard.genoud@gmail.com>
 +S:    Maintained
 +F:    drivers/tty/serial/atmel_serial.c
 +F:    include/linux/atmel_serial.h
 +
  MICROSOFT SURFACE PRO 3 BUTTON DRIVER
  M:    Chen Yu <yu.c.chen@intel.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -7973,6 -7819,18 +7973,18 @@@ W:    http://www.melexis.co
  S:    Supported
  F:    drivers/iio/temperature/mlx90614.c
  
+ MICROSEMI SMART ARRAY SMARTPQI DRIVER (smartpqi)
+ M:    Don Brace <don.brace@microsemi.com>
+ L:    esc.storagedev@microsemi.com
+ L:    linux-scsi@vger.kernel.org
+ S:    Supported
+ F:    drivers/scsi/smartpqi/smartpqi*.[ch]
+ F:    drivers/scsi/smartpqi/Kconfig
+ F:    drivers/scsi/smartpqi/Makefile
+ F:    include/linux/cciss*.h
+ F:    include/uapi/linux/cciss*.h
+ F:    Documentation/scsi/smartpqi.txt
  MN88472 MEDIA DRIVER
  M:    Antti Palosaari <crope@iki.fi>
  L:    linux-media@vger.kernel.org
@@@ -8098,7 -7956,6 +8110,7 @@@ MULTIFUNCTION DEVICES (MFD
  M:    Lee Jones <lee.jones@linaro.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git
  S:    Supported
 +F:    Documentation/devicetree/bindings/mfd/
  F:    drivers/mfd/
  F:    include/linux/mfd/
  
@@@ -8185,20 -8042,16 +8197,16 @@@ M:   Michael Schmitz <schmitzmic@gmail.co
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
  F:    Documentation/scsi/g_NCR5380.txt
- F:    Documentation/scsi/dtc3x80.txt
  F:    drivers/scsi/NCR5380.*
  F:    drivers/scsi/arm/cumana_1.c
  F:    drivers/scsi/arm/oak.c
  F:    drivers/scsi/atari_scsi.*
  F:    drivers/scsi/dmx3191d.c
- F:    drivers/scsi/dtc.*
  F:    drivers/scsi/g_NCR5380.*
  F:    drivers/scsi/g_NCR5380_mmio.c
  F:    drivers/scsi/mac_scsi.*
- F:    drivers/scsi/pas16.*
  F:    drivers/scsi/sun3_scsi.*
  F:    drivers/scsi/sun3_scsi_vme.c
- F:    drivers/scsi/t128.*
  
  NCR DUAL 700 SCSI DRIVER (MICROCHANNEL)
  M:    "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
@@@ -8296,15 -8149,6 +8304,15 @@@ S:    Maintaine
  W:    https://fedorahosted.org/dropwatch/
  F:    net/core/drop_monitor.c
  
 +NETWORKING [DSA]
 +M:    Andrew Lunn <andrew@lunn.ch>
 +M:    Vivien Didelot <vivien.didelot@savoirfairelinux.com>
 +M:    Florian Fainelli <f.fainelli@gmail.com>
 +S:    Maintained
 +F:    net/dsa/
 +F:    include/net/dsa.h
 +F:    drivers/net/dsa/
 +
  NETWORKING [GENERAL]
  M:    "David S. Miller" <davem@davemloft.net>
  L:    netdev@vger.kernel.org
@@@ -8487,11 -8331,11 +8495,11 @@@ R:   Pali Rohár <pali.rohar@gmail.com
  F:    include/linux/power/bq2415x_charger.h
  F:    include/linux/power/bq27xxx_battery.h
  F:    include/linux/power/isp1704_charger.h
 -F:    drivers/power/bq2415x_charger.c
 -F:    drivers/power/bq27xxx_battery.c
 -F:    drivers/power/bq27xxx_battery_i2c.c
 -F:    drivers/power/isp1704_charger.c
 -F:    drivers/power/rx51_battery.c
 +F:    drivers/power/supply/bq2415x_charger.c
 +F:    drivers/power/supply/bq27xxx_battery.c
 +F:    drivers/power/supply/bq27xxx_battery_i2c.c
 +F:    drivers/power/supply/isp1704_charger.c
 +F:    drivers/power/supply/rx51_battery.c
  
  NTB DRIVER CORE
  M:    Jon Mason <jdmason@kudzu.us>
@@@ -8880,7 -8724,7 +8888,7 @@@ F:      drivers/oprofile
  F:    include/linux/oprofile.h
  
  ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
 -M:    Mark Fasheh <mfasheh@suse.com>
 +M:    Mark Fasheh <mfasheh@versity.com>
  M:    Joel Becker <jlbec@evilplan.org>
  L:    ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
  W:    http://ocfs2.wiki.kernel.org
@@@ -8992,7 -8836,6 +9000,7 @@@ S:      Supporte
  F:    Documentation/virtual/paravirt_ops.txt
  F:    arch/*/kernel/paravirt*
  F:    arch/*/include/asm/paravirt.h
 +F:    include/linux/hypervisor.h
  
  PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES
  M:    Tim Waugh <tim@cyberelk.net>
@@@ -9395,7 -9238,7 +9403,7 @@@ F:      drivers/pinctrl/sh-pfc
  
  PIN CONTROLLER - SAMSUNG
  M:    Tomasz Figa <tomasz.figa@gmail.com>
 -M:    Krzysztof Kozlowski <k.kozlowski@samsung.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
@@@ -9491,12 -9334,16 +9499,12 @@@ F:   drivers/powercap
  
  POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS
  M:    Sebastian Reichel <sre@kernel.org>
 -M:    Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
 -M:    David Woodhouse <dwmw2@infradead.org>
  L:    linux-pm@vger.kernel.org
 -T:    git git://git.infradead.org/battery-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git
  S:    Maintained
 -F:    Documentation/devicetree/bindings/power/
 -F:    Documentation/devicetree/bindings/power_supply/
 +F:    Documentation/devicetree/bindings/power/supply/
  F:    include/linux/power_supply.h
 -F:    drivers/power/
 -X:    drivers/power/avs/
 +F:    drivers/power/supply/
  
  POWER STATE COORDINATION INTERFACE (PSCI)
  M:    Mark Rutland <mark.rutland@arm.com>
@@@ -9832,12 -9679,6 +9840,12 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Supported
  F:    drivers/net/wireless/ath/ath10k/
  
 +QUALCOMM EMAC GIGABIT ETHERNET DRIVER
 +M:    Timur Tabi <timur@codeaurora.org>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/ethernet/qualcomm/emac/
 +
  QUALCOMM HEXAGON ARCHITECTURE
  M:    Richard Kuo <rkuo@codeaurora.org>
  L:    linux-hexagon@vger.kernel.org
@@@ -10058,12 -9899,6 +10066,12 @@@ F:  drivers/rpmsg
  F:    Documentation/rpmsg.txt
  F:    include/linux/rpmsg.h
  
 +RENESAS CLOCK DRIVERS
 +M:    Geert Uytterhoeven <geert+renesas@glider.be>
 +L:    linux-renesas-soc@vger.kernel.org
 +S:    Supported
 +F:    drivers/clk/renesas/
 +
  RENESAS ETHERNET DRIVERS
  R:    Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
  L:    netdev@vger.kernel.org
@@@ -10099,7 -9934,6 +10107,7 @@@ F:    net/rfkill
  
  RHASHTABLE
  M:    Thomas Graf <tgraf@suug.ch>
 +M:    Herbert Xu <herbert@gondor.apana.org.au>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    lib/rhashtable.c
@@@ -10243,8 -10077,8 +10251,8 @@@ S:   Supporte
  F:    drivers/s390/cio/
  
  S390 DASD DRIVER
 -M:    Stefan Weinhuber <wein@de.ibm.com>
 -M:    Stefan Haberland <stefan.haberland@de.ibm.com>
 +M:    Stefan Haberland <sth@linux.vnet.ibm.com>
 +M:    Jan Hoeppner <hoeppner@linux.vnet.ibm.com>
  L:    linux-s390@vger.kernel.org
  W:    http://www.ibm.com/developerworks/linux/linux390/
  S:    Supported
@@@ -10337,7 -10171,7 +10345,7 @@@ S:   Maintaine
  F:    drivers/platform/x86/samsung-laptop.c
  
  SAMSUNG AUDIO (ASoC) DRIVERS
 -M:    Krzysztof Kozlowski <k.kozlowski@samsung.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Sangbeom Kim <sbkim73@samsung.com>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
@@@ -10352,8 -10186,7 +10360,8 @@@ F:   drivers/video/fbdev/s3c-fb.
  
  SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
  M:    Sangbeom Kim <sbkim73@samsung.com>
 -M:    Krzysztof Kozlowski <k.kozlowski@samsung.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Supported
@@@ -10408,23 -10241,9 +10416,23 @@@ F: drivers/nfc/s3fwrn
  SAMSUNG SOC CLOCK DRIVERS
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  M:    Tomasz Figa <tomasz.figa@gmail.com>
 +M:    Chanwoo Choi <cw00.choi@samsung.com>
  S:    Supported
  L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
  F:    drivers/clk/samsung/
 +F:    include/dt-bindings/clock/exynos*.h
 +F:    Documentation/devicetree/bindings/clock/exynos*.txt
 +
 +SAMSUNG SPI DRIVERS
 +M:    Kukjin Kim <kgene@kernel.org>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Andi Shyti <andi.shyti@samsung.com>
 +L:    linux-spi@vger.kernel.org
 +L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/spi/spi-samsung.txt
 +F:    drivers/spi/spi-s3c*
 +F:    include/linux/platform_data/spi-s3c64xx.h
  
  SAMSUNG SXGBE DRIVERS
  M:    Byungho An <bh74.an@samsung.com>
@@@ -10511,8 -10330,8 +10519,8 @@@ F:   drivers/thunderbolt
  TI BQ27XXX POWER SUPPLY DRIVER
  R:    Andrew F. Davis <afd@ti.com>
  F:    include/linux/power/bq27xxx_battery.h
 -F:    drivers/power/bq27xxx_battery.c
 -F:    drivers/power/bq27xxx_battery_i2c.c
 +F:    drivers/power/supply/bq27xxx_battery.c
 +F:    drivers/power/supply/bq27xxx_battery_i2c.c
  
  TIMEKEEPING, CLOCKSOURCE CORE, NTP, ALARMTIMER
  M:    John Stultz <john.stultz@linaro.org>
@@@ -10740,12 -10559,12 +10748,12 @@@ S:        Maintaine
  F:    drivers/misc/phantom.c
  F:    include/uapi/linux/phantom.h
  
SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER
- M:    Jayamohan Kallickal <jayamohan.kallickal@avagotech.com>
- M:    Ketan Mukadam <ketan.mukadam@avagotech.com>
- M:    John Soni Jose <sony.john@avagotech.com>
Emulex 10Gbps iSCSI - OneConnect DRIVER
+ M:    Subbu Seetharaman <subbu.seetharaman@broadcom.com>
+ M:    Ketan Mukadam <ketan.mukadam@broadcom.com>
+ M:    Jitendra Bhivare <jitendra.bhivare@broadcom.com>
  L:    linux-scsi@vger.kernel.org
- W:    http://www.avagotech.com
+ W:    http://www.broadcom.com
  S:    Supported
  F:    drivers/scsi/be2iscsi/
  
@@@ -11272,7 -11091,6 +11280,7 @@@ F:   Documentation/spi
  F:    drivers/spi/
  F:    include/linux/spi/
  F:    include/uapi/linux/spi/
 +F:    tools/spi/
  
  SPIDERNET NETWORK DRIVER for CELL
  M:    Ishizaki Kou <kou.ishizaki@toshiba.co.jp>
@@@ -11343,7 -11161,6 +11351,7 @@@ F:   drivers/staging/media/lirc
  STAGING - LUSTRE PARALLEL FILESYSTEM
  M:    Oleg Drokin <oleg.drokin@intel.com>
  M:    Andreas Dilger <andreas.dilger@intel.com>
 +M:    James Simmons <jsimmons@infradead.org>
  L:    lustre-devel@lists.lustre.org (moderated for non-subscribers)
  W:    http://wiki.lustre.org/
  S:    Maintained
@@@ -11370,6 -11187,13 +11378,6 @@@ M:  Florian Schilhabel <florian.c.schilh
  S:    Odd Fixes
  F:    drivers/staging/rtl8712/
  
 -STAGING - REALTEK RTL8723U WIRELESS DRIVER
 -M:    Larry Finger <Larry.Finger@lwfinger.net>
 -M:    Jes Sorensen <Jes.Sorensen@redhat.com>
 -L:    linux-wireless@vger.kernel.org
 -S:    Maintained
 -F:    drivers/staging/rtl8723au/
 -
  STAGING - SILICON MOTION SM750 FRAME BUFFER DRIVER
  M:    Sudip Mukherjee <sudipm.mukherjee@gmail.com>
  M:    Teddy Wang <teddy.wang@siliconmotion.com>
@@@ -11400,8 -11224,12 +11408,8 @@@ S:  Odd Fixe
  F:    drivers/staging/vt665?/
  
  STAGING - WILC1000 WIFI DRIVER
 -M:    Johnny Kim <johnny.kim@atmel.com>
 -M:    Austin Shin <austin.shin@atmel.com>
 -M:    Chris Park <chris.park@atmel.com>
 -M:    Tony Cho <tony.cho@atmel.com>
 -M:    Glen Lee <glen.lee@atmel.com>
 -M:    Leo Kim <leo.kim@atmel.com>
 +M:    Aditya Shankar <aditya.shankar@microchip.com>
 +M:    Ganesh Krishna <ganesh.krishna@microchip.com>
  L:    linux-wireless@vger.kernel.org
  S:    Supported
  F:    drivers/staging/wilc1000/
@@@ -11509,14 -11337,6 +11517,14 @@@ T: git git://git.kernel.org/pub/scm/lin
  S:    Supported
  F:    drivers/mfd/syscon.c
  
 +SYSTEM RESET/SHUTDOWN DRIVERS
 +M:    Sebastian Reichel <sre@kernel.org>
 +L:    linux-pm@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/power/reset/
 +F:    drivers/power/reset/
 +
  SYSV FILESYSTEM
  M:    Christoph Hellwig <hch@infradead.org>
  S:    Maintained
@@@ -11777,7 -11597,7 +11785,7 @@@ F:   Documentation/devicetree/bindings/th
  THERMAL/CPU_COOLING
  M:    Amit Daniel Kachhap <amit.kachhap@gmail.com>
  M:    Viresh Kumar <viresh.kumar@linaro.org>
 -M:    Javi Merino <javi.merino@arm.com>
 +M:    Javi Merino <javi.merino@kernel.org>
  L:    linux-pm@vger.kernel.org
  S:    Supported
  F:    Documentation/thermal/cpu-cooling-api.txt
@@@ -11865,7 -11685,7 +11873,7 @@@ F:   include/linux/platform_data/lp855x.
  TI LP8727 CHARGER DRIVER
  M:    Milo Kim <milo.kim@ti.com>
  S:    Maintained
 -F:    drivers/power/lp8727_charger.c
 +F:    drivers/power/supply/lp8727_charger.c
  F:    include/linux/platform_data/lp8727.h
  
  TI LP8788 MFD DRIVER
@@@ -11874,7 -11694,7 +11882,7 @@@ S:   Maintaine
  F:    drivers/iio/adc/lp8788_adc.c
  F:    drivers/leds/leds-lp8788.c
  F:    drivers/mfd/lp8788*.c
 -F:    drivers/power/lp8788-charger.c
 +F:    drivers/power/supply/lp8788-charger.c
  F:    drivers/regulator/lp8788-*.c
  F:    include/linux/mfd/lp8788*.h
  
@@@ -12143,12 -11963,6 +12151,6 @@@ S:  Maintaine
  F:    drivers/tc/
  F:    include/linux/tc.h
  
- U14-34F SCSI DRIVER
- M:    Dario Ballabio <ballabio_dario@emc.com>
- L:    linux-scsi@vger.kernel.org
- S:    Maintained
- F:    drivers/scsi/u14-34f.c
  UBI FILE SYSTEM (UBIFS)
  M:    Richard Weinberger <richard@nod.at>
  M:    Artem Bityutskiy <dedekind1@gmail.com>
@@@ -12344,7 -12158,7 +12346,7 @@@ S:   Maintaine
  F:    drivers/net/usb/lan78xx.*
  
  USB MASS STORAGE DRIVER
 -M:    Matthew Dharm <mdharm-usb@one-eyed-alien.net>
 +M:    Alan Stern <stern@rowland.harvard.edu>
  L:    linux-usb@vger.kernel.org
  L:    usb-storage@lists.one-eyed-alien.net
  S:    Maintained
@@@ -12428,7 -12242,6 +12430,7 @@@ F:   drivers/net/usb/rtl8150.
  USB SERIAL SUBSYSTEM
  M:    Johan Hovold <johan@kernel.org>
  L:    linux-usb@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git
  S:    Maintained
  F:    Documentation/usb/usb-serial.txt
  F:    drivers/usb/serial/
@@@ -12442,7 -12255,6 +12444,7 @@@ F:   drivers/net/usb/smsc75xx.
  
  USB SMSC95XX ETHERNET DRIVER
  M:    Steve Glendinning <steve.glendinning@shawell.net>
 +M:    Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/usb/smsc95xx.*
@@@ -12549,6 -12361,7 +12551,6 @@@ F:   fs/hostfs
  F:    fs/hppfs/
  
  USERSPACE I/O (UIO)
 -M:    "Hans J. Koch" <hjk@hansjkoch.de>
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
@@@ -12730,7 -12543,7 +12732,7 @@@ F:   include/linux/if_*vlan.
  F:    net/8021q/
  
  VLYNQ BUS
 -M:    Florian Fainelli <florian@openwrt.org>
 +M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    openwrt-devel@lists.openwrt.org (subscribers-only)
  S:    Maintained
  F:    drivers/vlynq/vlynq.c
@@@ -12876,12 -12689,6 +12878,6 @@@ F:  drivers/watchdog
  F:    include/linux/watchdog.h
  F:    include/uapi/linux/watchdog.h
  
- WD7000 SCSI DRIVER
- M:    Miroslav Zagorac <zaga@fly.cc.fer.hr>
- L:    linux-scsi@vger.kernel.org
- S:    Maintained
- F:    drivers/scsi/wd7000.c
  WIIMOTE HID DRIVER
  M:    David Herrmann <dh.herrmann@googlemail.com>
  L:    linux-input@vger.kernel.org
@@@ -12951,7 -12758,7 +12947,7 @@@ F:   drivers/input/touchscreen/wm97*.
  F:    drivers/mfd/arizona*
  F:    drivers/mfd/wm*.c
  F:    drivers/mfd/cs47l24*
 -F:    drivers/power/wm83*.c
 +F:    drivers/power/supply/wm83*.c
  F:    drivers/rtc/rtc-wm83*.c
  F:    drivers/regulator/wm8*.c
  F:    drivers/video/backlight/wm83*_bl.c
@@@ -13103,10 -12910,11 +13099,10 @@@ F:        arch/x86/xen/*swiotlb
  F:    drivers/xen/*swiotlb*
  
  XFS FILESYSTEM
 -P:    Silicon Graphics Inc
  M:    Dave Chinner <david@fromorbit.com>
 -M:    xfs@oss.sgi.com
 -L:    xfs@oss.sgi.com
 -W:    http://oss.sgi.com/projects/xfs
 +M:    linux-xfs@vger.kernel.org
 +L:    linux-xfs@vger.kernel.org
 +W:    http://xfs.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/dgc/linux-xfs.git
  S:    Supported
  F:    Documentation/filesystems/xfs.txt
diff --combined drivers/scsi/hosts.c
@@@ -246,10 -246,6 +246,6 @@@ int scsi_add_host_with_dma(struct Scsi_
  
        shost->dma_dev = dma_dev;
  
-       error = device_add(&shost->shost_gendev);
-       if (error)
-               goto out_destroy_freelist;
        /*
         * Increase usage count temporarily here so that calling
         * scsi_autopm_put_host() will trigger runtime idle if there is
        pm_runtime_enable(&shost->shost_gendev);
        device_enable_async_suspend(&shost->shost_gendev);
  
+       error = device_add(&shost->shost_gendev);
+       if (error)
+               goto out_destroy_freelist;
        scsi_host_set_state(shost, SHOST_RUNNING);
        get_device(shost->shost_gendev.parent);
  
   out_del_gendev:
        device_del(&shost->shost_gendev);
   out_destroy_freelist:
+       device_disable_async_suspend(&shost->shost_gendev);
+       pm_runtime_disable(&shost->shost_gendev);
+       pm_runtime_set_suspended(&shost->shost_gendev);
+       pm_runtime_put_noidle(&shost->shost_gendev);
        scsi_destroy_command_freelist(shost);
   out_destroy_tags:
        if (shost_use_blk_mq(shost))
@@@ -486,8 -490,6 +490,8 @@@ struct Scsi_Host *scsi_host_alloc(struc
        else
                shost->dma_boundary = 0xffffffff;
  
 +      shost->use_blk_mq = scsi_use_blk_mq;
 +
        device_initialize(&shost->shost_gendev);
        dev_set_name(&shost->shost_gendev, "host%d", shost->host_no);
        shost->shost_gendev.bus = &scsi_bus_type;
diff --combined drivers/scsi/ipr.c
@@@ -493,15 -493,15 +493,15 @@@ struct ipr_error_table_t ipr_error_tabl
        "9072: Link not operational transition"},
        {0x066B8200, 0, IPR_DEFAULT_LOG_LEVEL,
        "9032: Array exposed but still protected"},
-       {0x066B8300, 0, IPR_DEFAULT_LOG_LEVEL + 1,
+       {0x066B8300, 0, IPR_DEBUG_LOG_LEVEL,
        "70DD: Device forced failed by disrupt device command"},
        {0x066B9100, 0, IPR_DEFAULT_LOG_LEVEL,
        "4061: Multipath redundancy level got better"},
        {0x066B9200, 0, IPR_DEFAULT_LOG_LEVEL,
        "4060: Multipath redundancy level got worse"},
-       {0x06808100, 0, IPR_DEFAULT_LOG_LEVEL,
+       {0x06808100, 0, IPR_DEBUG_LOG_LEVEL,
        "9083: Device raw mode enabled"},
-       {0x06808200, 0, IPR_DEFAULT_LOG_LEVEL,
+       {0x06808200, 0, IPR_DEBUG_LOG_LEVEL,
        "9084: Device raw mode disabled"},
        {0x07270000, 0, 0,
        "Failure due to other device"},
@@@ -1473,7 -1473,7 +1473,7 @@@ static void ipr_process_ccn(struct ipr_
        struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb;
        u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
  
-       list_del(&hostrcb->queue);
+       list_del_init(&hostrcb->queue);
        list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
  
        if (ioasc) {
@@@ -2552,6 -2552,23 +2552,23 @@@ static void ipr_handle_log_data(struct 
        }
  }
  
+ static struct ipr_hostrcb *ipr_get_free_hostrcb(struct ipr_ioa_cfg *ioa)
+ {
+       struct ipr_hostrcb *hostrcb;
+       hostrcb = list_first_entry_or_null(&ioa->hostrcb_free_q,
+                                       struct ipr_hostrcb, queue);
+       if (unlikely(!hostrcb)) {
+               dev_info(&ioa->pdev->dev, "Reclaiming async error buffers.");
+               hostrcb = list_first_entry_or_null(&ioa->hostrcb_report_q,
+                                               struct ipr_hostrcb, queue);
+       }
+       list_del_init(&hostrcb->queue);
+       return hostrcb;
+ }
  /**
   * ipr_process_error - Op done function for an adapter error log.
   * @ipr_cmd:  ipr command struct
@@@ -2569,13 -2586,14 +2586,14 @@@ static void ipr_process_error(struct ip
        struct ipr_hostrcb *hostrcb = ipr_cmd->u.hostrcb;
        u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
        u32 fd_ioasc;
+       char *envp[] = { "ASYNC_ERR_LOG=1", NULL };
  
        if (ioa_cfg->sis64)
                fd_ioasc = be32_to_cpu(hostrcb->hcam.u.error64.fd_ioasc);
        else
                fd_ioasc = be32_to_cpu(hostrcb->hcam.u.error.fd_ioasc);
  
-       list_del(&hostrcb->queue);
+       list_del_init(&hostrcb->queue);
        list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
  
        if (!ioasc) {
                        "Host RCB failed with IOASC: 0x%08X\n", ioasc);
        }
  
+       list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_report_q);
+       hostrcb = ipr_get_free_hostrcb(ioa_cfg);
+       kobject_uevent_env(&ioa_cfg->host->shost_dev.kobj, KOBJ_CHANGE, envp);
        ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_LOG_DATA, hostrcb);
  }
  
@@@ -4095,6 -4117,64 +4117,64 @@@ static struct device_attribute ipr_ioa_
        .show = ipr_show_fw_type
  };
  
+ static ssize_t ipr_read_async_err_log(struct file *filep, struct kobject *kobj,
+                               struct bin_attribute *bin_attr, char *buf,
+                               loff_t off, size_t count)
+ {
+       struct device *cdev = container_of(kobj, struct device, kobj);
+       struct Scsi_Host *shost = class_to_shost(cdev);
+       struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+       struct ipr_hostrcb *hostrcb;
+       unsigned long lock_flags = 0;
+       int ret;
+       spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+       hostrcb = list_first_entry_or_null(&ioa_cfg->hostrcb_report_q,
+                                       struct ipr_hostrcb, queue);
+       if (!hostrcb) {
+               spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+               return 0;
+       }
+       ret = memory_read_from_buffer(buf, count, &off, &hostrcb->hcam,
+                               sizeof(hostrcb->hcam));
+       spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+       return ret;
+ }
+ static ssize_t ipr_next_async_err_log(struct file *filep, struct kobject *kobj,
+                               struct bin_attribute *bin_attr, char *buf,
+                               loff_t off, size_t count)
+ {
+       struct device *cdev = container_of(kobj, struct device, kobj);
+       struct Scsi_Host *shost = class_to_shost(cdev);
+       struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+       struct ipr_hostrcb *hostrcb;
+       unsigned long lock_flags = 0;
+       spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+       hostrcb = list_first_entry_or_null(&ioa_cfg->hostrcb_report_q,
+                                       struct ipr_hostrcb, queue);
+       if (!hostrcb) {
+               spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+               return count;
+       }
+       /* Reclaim hostrcb before exit */
+       list_move_tail(&hostrcb->queue, &ioa_cfg->hostrcb_free_q);
+       spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+       return count;
+ }
+ static struct bin_attribute ipr_ioa_async_err_log = {
+       .attr = {
+               .name =         "async_err_log",
+               .mode =         S_IRUGO | S_IWUSR,
+       },
+       .size = 0,
+       .read = ipr_read_async_err_log,
+       .write = ipr_next_async_err_log
+ };
  static struct device_attribute *ipr_ioa_attrs[] = {
        &ipr_fw_version_attr,
        &ipr_log_level_attr,
@@@ -7026,8 -7106,7 +7106,7 @@@ static int ipr_ioa_reset_done(struct ip
  {
        struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
        struct ipr_resource_entry *res;
-       struct ipr_hostrcb *hostrcb, *temp;
-       int i = 0, j;
+       int j;
  
        ENTER;
        ioa_cfg->in_reset_reload = 0;
        }
        schedule_work(&ioa_cfg->work_q);
  
-       list_for_each_entry_safe(hostrcb, temp, &ioa_cfg->hostrcb_free_q, queue) {
-               list_del(&hostrcb->queue);
-               if (i++ < IPR_NUM_LOG_HCAMS)
-                       ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_LOG_DATA, hostrcb);
+       for (j = 0; j < IPR_NUM_HCAMS; j++) {
+               list_del_init(&ioa_cfg->hostrcb[j]->queue);
+               if (j < IPR_NUM_LOG_HCAMS)
+                       ipr_send_hcam(ioa_cfg,
+                               IPR_HCAM_CDB_OP_CODE_LOG_DATA,
+                               ioa_cfg->hostrcb[j]);
                else
-                       ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, hostrcb);
+                       ipr_send_hcam(ioa_cfg,
+                               IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE,
+                               ioa_cfg->hostrcb[j]);
        }
  
        scsi_report_bus_reset(ioa_cfg->host, IPR_VSET_BUS);
@@@ -7966,7 -8049,8 +8049,8 @@@ static int ipr_ioafp_identify_hrrq(stru
  
        ENTER;
        ipr_cmd->job_step = ipr_ioafp_std_inquiry;
-       dev_info(&ioa_cfg->pdev->dev, "Starting IOA initialization sequence.\n");
+       if (ioa_cfg->identify_hrrq_index == 0)
+               dev_info(&ioa_cfg->pdev->dev, "Starting IOA initialization sequence.\n");
  
        if (ioa_cfg->identify_hrrq_index < ioa_cfg->hrrq_num) {
                hrrq = &ioa_cfg->hrrq[ioa_cfg->identify_hrrq_index];
@@@ -8335,7 -8419,7 +8419,7 @@@ static void ipr_get_unit_check_buffer(s
  
        hostrcb = list_entry(ioa_cfg->hostrcb_free_q.next,
                             struct ipr_hostrcb, queue);
-       list_del(&hostrcb->queue);
+       list_del_init(&hostrcb->queue);
        memset(&hostrcb->hcam, 0, sizeof(hostrcb->hcam));
  
        rc = ipr_get_ldump_data_section(ioa_cfg,
@@@ -9332,7 -9416,7 +9416,7 @@@ static void ipr_free_mem(struct ipr_ioa
        dma_free_coherent(&ioa_cfg->pdev->dev, ioa_cfg->cfg_table_size,
                          ioa_cfg->u.cfg_table, ioa_cfg->cfg_table_dma);
  
-       for (i = 0; i < IPR_NUM_HCAMS; i++) {
+       for (i = 0; i < IPR_MAX_HCAMS; i++) {
                dma_free_coherent(&ioa_cfg->pdev->dev,
                                  sizeof(struct ipr_hostrcb),
                                  ioa_cfg->hostrcb[i],
@@@ -9572,7 -9656,7 +9656,7 @@@ static int ipr_alloc_mem(struct ipr_ioa
        if (!ioa_cfg->u.cfg_table)
                goto out_free_host_rrq;
  
-       for (i = 0; i < IPR_NUM_HCAMS; i++) {
+       for (i = 0; i < IPR_MAX_HCAMS; i++) {
                ioa_cfg->hostrcb[i] = dma_alloc_coherent(&pdev->dev,
                                                         sizeof(struct ipr_hostrcb),
                                                         &ioa_cfg->hostrcb_dma[i],
@@@ -9714,6 -9798,7 +9798,7 @@@ static void ipr_init_ioa_cfg(struct ipr
  
        INIT_LIST_HEAD(&ioa_cfg->hostrcb_free_q);
        INIT_LIST_HEAD(&ioa_cfg->hostrcb_pending_q);
+       INIT_LIST_HEAD(&ioa_cfg->hostrcb_report_q);
        INIT_LIST_HEAD(&ioa_cfg->free_res_q);
        INIT_LIST_HEAD(&ioa_cfg->used_res_q);
        INIT_WORK(&ioa_cfg->work_q, ipr_worker_thread);
@@@ -10352,6 -10437,8 +10437,8 @@@ static void ipr_remove(struct pci_dev *
                              &ipr_trace_attr);
        ipr_remove_dump_file(&ioa_cfg->host->shost_dev.kobj,
                             &ipr_dump_attr);
+       sysfs_remove_bin_file(&ioa_cfg->host->shost_dev.kobj,
+                       &ipr_ioa_async_err_log);
        scsi_remove_host(ioa_cfg->host);
  
        __ipr_remove(pdev);
@@@ -10400,21 -10487,33 +10487,36 @@@ static int ipr_probe(struct pci_dev *pd
                return rc;
        }
  
+       rc = sysfs_create_bin_file(&ioa_cfg->host->shost_dev.kobj,
+                       &ipr_ioa_async_err_log);
+       if (rc) {
+               ipr_remove_dump_file(&ioa_cfg->host->shost_dev.kobj,
+                               &ipr_dump_attr);
+               ipr_remove_trace_file(&ioa_cfg->host->shost_dev.kobj,
+                               &ipr_trace_attr);
+               scsi_remove_host(ioa_cfg->host);
+               __ipr_remove(pdev);
+               return rc;
+       }
        rc = ipr_create_dump_file(&ioa_cfg->host->shost_dev.kobj,
                                   &ipr_dump_attr);
  
        if (rc) {
+               sysfs_remove_bin_file(&ioa_cfg->host->shost_dev.kobj,
+                                     &ipr_ioa_async_err_log);
                ipr_remove_trace_file(&ioa_cfg->host->shost_dev.kobj,
                                      &ipr_trace_attr);
                scsi_remove_host(ioa_cfg->host);
                __ipr_remove(pdev);
                return rc;
        }
 +      spin_lock_irqsave(ioa_cfg->host->host_lock, flags);
 +      ioa_cfg->scan_enabled = 1;
 +      schedule_work(&ioa_cfg->work_q);
 +      spin_unlock_irqrestore(ioa_cfg->host->host_lock, flags);
  
 -      scsi_scan_host(ioa_cfg->host);
        ioa_cfg->iopoll_weight = ioa_cfg->chip_cfg->iopoll_weight;
  
        if (ioa_cfg->iopoll_weight && ioa_cfg->sis64 && ioa_cfg->nvectors > 1) {
                }
        }
  
 -      spin_lock_irqsave(ioa_cfg->host->host_lock, flags);
 -      ioa_cfg->scan_enabled = 1;
 -      schedule_work(&ioa_cfg->work_q);
 -      spin_unlock_irqrestore(ioa_cfg->host->host_lock, flags);
 +      scsi_scan_host(ioa_cfg->host);
 +
        return 0;
  }
  
@@@ -189,25 -189,12 +189,12 @@@ u3
  megasas_build_and_issue_cmd(struct megasas_instance *instance,
                            struct scsi_cmnd *scmd);
  static void megasas_complete_cmd_dpc(unsigned long instance_addr);
- void
- megasas_release_fusion(struct megasas_instance *instance);
- int
- megasas_ioc_init_fusion(struct megasas_instance *instance);
- void
- megasas_free_cmds_fusion(struct megasas_instance *instance);
- u8
- megasas_get_map_info(struct megasas_instance *instance);
- int
- megasas_sync_map_info(struct megasas_instance *instance);
  int
  wait_and_poll(struct megasas_instance *instance, struct megasas_cmd *cmd,
        int seconds);
- void megasas_reset_reply_desc(struct megasas_instance *instance);
  void megasas_fusion_ocr_wq(struct work_struct *work);
  static int megasas_get_ld_vf_affiliation(struct megasas_instance *instance,
                                         int initial);
- int megasas_check_mpio_paths(struct megasas_instance *instance,
-                            struct scsi_cmnd *scmd);
  
  int
  megasas_issue_dcmd(struct megasas_instance *instance, struct megasas_cmd *cmd)
@@@ -5036,8 -5023,8 +5023,8 @@@ static int megasas_init_fw(struct megas
  
        /* Find first memory bar */
        bar_list = pci_select_bars(instance->pdev, IORESOURCE_MEM);
-       instance->bar = find_first_bit(&bar_list, sizeof(unsigned long));
+       instance->bar = find_first_bit(&bar_list, BITS_PER_LONG);
 -      if (pci_request_selected_regions(instance->pdev, instance->bar,
 +      if (pci_request_selected_regions(instance->pdev, 1<<instance->bar,
                                         "megasas: LSI")) {
                dev_printk(KERN_DEBUG, &instance->pdev->dev, "IO memory region busy!\n");
                return -EBUSY;
@@@ -5339,7 -5326,7 +5326,7 @@@ fail_ready_state
        iounmap(instance->reg_set);
  
        fail_ioremap:
 -      pci_release_selected_regions(instance->pdev, instance->bar);
 +      pci_release_selected_regions(instance->pdev, 1<<instance->bar);
  
        return -EINVAL;
  }
@@@ -5360,7 -5347,7 +5347,7 @@@ static void megasas_release_mfi(struct 
  
        iounmap(instance->reg_set);
  
 -      pci_release_selected_regions(instance->pdev, instance->bar);
 +      pci_release_selected_regions(instance->pdev, 1<<instance->bar);
  }
  
  /**
@@@ -5782,7 -5769,7 +5769,7 @@@ static int megasas_probe_one(struct pci
                                             &instance->consumer_h);
  
                if (!instance->producer || !instance->consumer) {
-                       dev_printk(KERN_DEBUG, &pdev->dev, "Failed to allocate"
+                       dev_printk(KERN_DEBUG, &pdev->dev, "Failed to allocate "
                               "memory for producer, consumer\n");
                        goto fail_alloc_dma_buf;
                }
@@@ -6711,14 -6698,9 +6698,9 @@@ static int megasas_mgmt_ioctl_fw(struc
        unsigned long flags;
        u32 wait_time = MEGASAS_RESET_WAIT_TIME;
  
-       ioc = kmalloc(sizeof(*ioc), GFP_KERNEL);
-       if (!ioc)
-               return -ENOMEM;
-       if (copy_from_user(ioc, user_ioc, sizeof(*ioc))) {
-               error = -EFAULT;
-               goto out_kfree_ioc;
-       }
+       ioc = memdup_user(user_ioc, sizeof(*ioc));
+       if (IS_ERR(ioc))
+               return PTR_ERR(ioc);
  
        instance = megasas_lookup_instance(ioc->host_no);
        if (!instance) {
@@@ -98,7 -98,7 +98,7 @@@ MODULE_PARM_DESC(mpt3sas_fwfault_debug
        " enable detection of firmware fault and halt firmware - (default=0)");
  
  static int
- _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag);
+ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc);
  
  /**
   * _scsih_set_fwfault_debug - global setting of ioc->fwfault_debug.
@@@ -218,8 -218,7 +218,7 @@@ _base_fault_reset_work(struct work_stru
        ioc->non_operational_loop = 0;
  
        if ((doorbell & MPI2_IOC_STATE_MASK) != MPI2_IOC_STATE_OPERATIONAL) {
-               rc = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP,
-                   FORCE_BIG_HAMMER);
+               rc = mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
                pr_warn(MPT3SAS_FMT "%s: hard reset: %s\n", ioc->name,
                    __func__, (rc == 0) ? "success" : "failed");
                doorbell = mpt3sas_base_get_iocstate(ioc, 0);
@@@ -2040,7 -2039,7 +2039,7 @@@ _base_enable_msix(struct MPT3SAS_ADAPTE
   * mpt3sas_base_unmap_resources - free controller resources
   * @ioc: per adapter object
   */
- void
static void
  mpt3sas_base_unmap_resources(struct MPT3SAS_ADAPTER *ioc)
  {
        struct pci_dev *pdev = ioc->pdev;
@@@ -2145,7 -2144,7 +2144,7 @@@ mpt3sas_base_map_resources(struct MPT3S
  
        _base_mask_interrupts(ioc);
  
-       r = _base_get_ioc_facts(ioc, CAN_SLEEP);
+       r = _base_get_ioc_facts(ioc);
        if (r)
                goto out_fail;
  
        } else
                ioc->msix96_vector = 0;
  
 +      if (ioc->is_warpdrive) {
 +              ioc->reply_post_host_index[0] = (resource_size_t __iomem *)
 +                  &ioc->chip->ReplyPostHostIndex;
 +
 +              for (i = 1; i < ioc->cpu_msix_table_sz; i++)
 +                      ioc->reply_post_host_index[i] =
 +                      (resource_size_t __iomem *)
 +                      ((u8 __iomem *)&ioc->chip->Doorbell + (0x4000 + ((i - 1)
 +                      * 4)));
 +      }
 +
        list_for_each_entry(reply_q, &ioc->reply_queue_list, list)
                pr_info(MPT3SAS_FMT "%s: IRQ %d\n",
                    reply_q->name,  ((ioc->msix_enable) ? "PCI-MSI-X enabled" :
@@@ -3183,12 -3171,11 +3182,11 @@@ _base_release_memory_pools(struct MPT3S
  /**
   * _base_allocate_memory_pools - allocate start of day memory pools
   * @ioc: per adapter object
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 success, anything else error
   */
  static int
- _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc,  int sleep_flag)
+ _base_allocate_memory_pools(struct MPT3SAS_ADAPTER *ioc)
  {
        struct mpt3sas_facts *facts;
        u16 max_sge_elements;
@@@ -3658,29 -3645,25 +3656,25 @@@ mpt3sas_base_get_iocstate(struct MPT3SA
   * _base_wait_on_iocstate - waiting on a particular ioc state
   * @ioc_state: controller state { READY, OPERATIONAL, or RESET }
   * @timeout: timeout in second
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_wait_on_iocstate(struct MPT3SAS_ADAPTER *ioc, u32 ioc_state, int timeout,
-       int sleep_flag)
+ _base_wait_on_iocstate(struct MPT3SAS_ADAPTER *ioc, u32 ioc_state, int timeout)
  {
        u32 count, cntdn;
        u32 current_state;
  
        count = 0;
-       cntdn = (sleep_flag == CAN_SLEEP) ? 1000*timeout : 2000*timeout;
+       cntdn = 1000 * timeout;
        do {
                current_state = mpt3sas_base_get_iocstate(ioc, 1);
                if (current_state == ioc_state)
                        return 0;
                if (count && current_state == MPI2_IOC_STATE_FAULT)
                        break;
-               if (sleep_flag == CAN_SLEEP)
-                       usleep_range(1000, 1500);
-               else
-                       udelay(500);
+               usleep_range(1000, 1500);
                count++;
        } while (--cntdn);
  
   * a write to the doorbell)
   * @ioc: per adapter object
   * @timeout: timeout in second
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   *
   * Notes: MPI2_HIS_IOC2SYS_DB_STATUS - set to one when IOC writes to doorbell.
   */
  static int
- _base_diag_reset(struct MPT3SAS_ADAPTER *ioc, int sleep_flag);
+ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc);
  
  static int
- _base_wait_for_doorbell_int(struct MPT3SAS_ADAPTER *ioc, int timeout,
-       int sleep_flag)
+ _base_wait_for_doorbell_int(struct MPT3SAS_ADAPTER *ioc, int timeout)
  {
        u32 cntdn, count;
        u32 int_status;
  
        count = 0;
-       cntdn = (sleep_flag == CAN_SLEEP) ? 1000*timeout : 2000*timeout;
+       cntdn = 1000 * timeout;
        do {
                int_status = readl(&ioc->chip->HostInterruptStatus);
                if (int_status & MPI2_HIS_IOC2SYS_DB_STATUS) {
                                ioc->name, __func__, count, timeout));
                        return 0;
                }
-               if (sleep_flag == CAN_SLEEP)
-                       usleep_range(1000, 1500);
-               else
-                       udelay(500);
+               usleep_range(1000, 1500);
+               count++;
+       } while (--cntdn);
+       pr_err(MPT3SAS_FMT
+               "%s: failed due to timeout count(%d), int_status(%x)!\n",
+               ioc->name, __func__, count, int_status);
+       return -EFAULT;
+ }
+ static int
+ _base_spin_on_doorbell_int(struct MPT3SAS_ADAPTER *ioc, int timeout)
+ {
+       u32 cntdn, count;
+       u32 int_status;
+       count = 0;
+       cntdn = 2000 * timeout;
+       do {
+               int_status = readl(&ioc->chip->HostInterruptStatus);
+               if (int_status & MPI2_HIS_IOC2SYS_DB_STATUS) {
+                       dhsprintk(ioc, pr_info(MPT3SAS_FMT
+                               "%s: successful count(%d), timeout(%d)\n",
+                               ioc->name, __func__, count, timeout));
+                       return 0;
+               }
+               udelay(500);
                count++;
        } while (--cntdn);
  
                "%s: failed due to timeout count(%d), int_status(%x)!\n",
                ioc->name, __func__, count, int_status);
        return -EFAULT;
  }
  
  /**
   * _base_wait_for_doorbell_ack - waiting for controller to read the doorbell.
   * @ioc: per adapter object
   * @timeout: timeout in second
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   *
   * doorbell.
   */
  static int
- _base_wait_for_doorbell_ack(struct MPT3SAS_ADAPTER *ioc, int timeout,
-       int sleep_flag)
+ _base_wait_for_doorbell_ack(struct MPT3SAS_ADAPTER *ioc, int timeout)
  {
        u32 cntdn, count;
        u32 int_status;
        u32 doorbell;
  
        count = 0;
-       cntdn = (sleep_flag == CAN_SLEEP) ? 1000*timeout : 2000*timeout;
+       cntdn = 1000 * timeout;
        do {
                int_status = readl(&ioc->chip->HostInterruptStatus);
                if (!(int_status & MPI2_HIS_SYS2IOC_DB_STATUS)) {
                } else if (int_status == 0xFFFFFFFF)
                        goto out;
  
-               if (sleep_flag == CAN_SLEEP)
-                       usleep_range(1000, 1500);
-               else
-                       udelay(500);
+               usleep_range(1000, 1500);
                count++;
        } while (--cntdn);
  
   * _base_wait_for_doorbell_not_used - waiting for doorbell to not be in use
   * @ioc: per adapter object
   * @timeout: timeout in second
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   *
   */
  static int
- _base_wait_for_doorbell_not_used(struct MPT3SAS_ADAPTER *ioc, int timeout,
-       int sleep_flag)
+ _base_wait_for_doorbell_not_used(struct MPT3SAS_ADAPTER *ioc, int timeout)
  {
        u32 cntdn, count;
        u32 doorbell_reg;
  
        count = 0;
-       cntdn = (sleep_flag == CAN_SLEEP) ? 1000*timeout : 2000*timeout;
+       cntdn = 1000 * timeout;
        do {
                doorbell_reg = readl(&ioc->chip->Doorbell);
                if (!(doorbell_reg & MPI2_DOORBELL_USED)) {
                                ioc->name, __func__, count, timeout));
                        return 0;
                }
-               if (sleep_flag == CAN_SLEEP)
-                       usleep_range(1000, 1500);
-               else
-                       udelay(500);
+               usleep_range(1000, 1500);
                count++;
        } while (--cntdn);
  
   * @ioc: per adapter object
   * @reset_type: currently only supports: MPI2_FUNCTION_IOC_MESSAGE_UNIT_RESET
   * @timeout: timeout in second
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_send_ioc_reset(struct MPT3SAS_ADAPTER *ioc, u8 reset_type, int timeout,
-       int sleep_flag)
+ _base_send_ioc_reset(struct MPT3SAS_ADAPTER *ioc, u8 reset_type, int timeout)
  {
        u32 ioc_state;
        int r = 0;
  
        writel(reset_type << MPI2_DOORBELL_FUNCTION_SHIFT,
            &ioc->chip->Doorbell);
-       if ((_base_wait_for_doorbell_ack(ioc, 15, sleep_flag))) {
+       if ((_base_wait_for_doorbell_ack(ioc, 15))) {
                r = -EFAULT;
                goto out;
        }
-       ioc_state = _base_wait_on_iocstate(ioc, MPI2_IOC_STATE_READY,
-           timeout, sleep_flag);
+       ioc_state = _base_wait_on_iocstate(ioc, MPI2_IOC_STATE_READY, timeout);
        if (ioc_state) {
                pr_err(MPT3SAS_FMT
                        "%s: failed going to ready state (ioc_state=0x%x)\n",
   * @reply_bytes: reply length
   * @reply: pointer to reply payload
   * @timeout: timeout in second
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
  _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
-       u32 *request, int reply_bytes, u16 *reply, int timeout, int sleep_flag)
+       u32 *request, int reply_bytes, u16 *reply, int timeout)
  {
        MPI2DefaultReply_t *default_reply = (MPI2DefaultReply_t *)reply;
        int i;
        u8 failed;
-       u16 dummy;
        __le32 *mfp;
  
        /* make sure doorbell is not in use */
            ((request_bytes/4)<<MPI2_DOORBELL_ADD_DWORDS_SHIFT)),
            &ioc->chip->Doorbell);
  
-       if ((_base_wait_for_doorbell_int(ioc, 5, NO_SLEEP))) {
+       if ((_base_spin_on_doorbell_int(ioc, 5))) {
                pr_err(MPT3SAS_FMT
                        "doorbell handshake int failed (line=%d)\n",
                        ioc->name, __LINE__);
        }
        writel(0, &ioc->chip->HostInterruptStatus);
  
-       if ((_base_wait_for_doorbell_ack(ioc, 5, sleep_flag))) {
+       if ((_base_wait_for_doorbell_ack(ioc, 5))) {
                pr_err(MPT3SAS_FMT
                        "doorbell handshake ack failed (line=%d)\n",
                        ioc->name, __LINE__);
        /* send message 32-bits at a time */
        for (i = 0, failed = 0; i < request_bytes/4 && !failed; i++) {
                writel(cpu_to_le32(request[i]), &ioc->chip->Doorbell);
-               if ((_base_wait_for_doorbell_ack(ioc, 5, sleep_flag)))
+               if ((_base_wait_for_doorbell_ack(ioc, 5)))
                        failed = 1;
        }
  
        }
  
        /* now wait for the reply */
-       if ((_base_wait_for_doorbell_int(ioc, timeout, sleep_flag))) {
+       if ((_base_wait_for_doorbell_int(ioc, timeout))) {
                pr_err(MPT3SAS_FMT
                        "doorbell handshake int failed (line=%d)\n",
                        ioc->name, __LINE__);
        reply[0] = le16_to_cpu(readl(&ioc->chip->Doorbell)
            & MPI2_DOORBELL_DATA_MASK);
        writel(0, &ioc->chip->HostInterruptStatus);
-       if ((_base_wait_for_doorbell_int(ioc, 5, sleep_flag))) {
+       if ((_base_wait_for_doorbell_int(ioc, 5))) {
                pr_err(MPT3SAS_FMT
                        "doorbell handshake int failed (line=%d)\n",
                        ioc->name, __LINE__);
        writel(0, &ioc->chip->HostInterruptStatus);
  
        for (i = 2; i < default_reply->MsgLength * 2; i++)  {
-               if ((_base_wait_for_doorbell_int(ioc, 5, sleep_flag))) {
+               if ((_base_wait_for_doorbell_int(ioc, 5))) {
                        pr_err(MPT3SAS_FMT
                                "doorbell handshake int failed (line=%d)\n",
                                ioc->name, __LINE__);
                        return -EFAULT;
                }
                if (i >=  reply_bytes/2) /* overflow case */
-                       dummy = readl(&ioc->chip->Doorbell);
+                       readl(&ioc->chip->Doorbell);
                else
                        reply[i] = le16_to_cpu(readl(&ioc->chip->Doorbell)
                            & MPI2_DOORBELL_DATA_MASK);
                writel(0, &ioc->chip->HostInterruptStatus);
        }
  
-       _base_wait_for_doorbell_int(ioc, 5, sleep_flag);
-       if (_base_wait_for_doorbell_not_used(ioc, 5, sleep_flag) != 0) {
+       _base_wait_for_doorbell_int(ioc, 5);
+       if (_base_wait_for_doorbell_not_used(ioc, 5) != 0) {
                dhsprintk(ioc, pr_info(MPT3SAS_FMT
                        "doorbell is in use (line=%d)\n", ioc->name, __LINE__));
        }
@@@ -4015,7 -4008,6 +4019,6 @@@ mpt3sas_base_sas_iounit_control(struct 
  {
        u16 smid;
        u32 ioc_state;
-       unsigned long timeleft;
        bool issue_reset = false;
        int rc;
        void *request;
                ioc->ioc_link_reset_in_progress = 1;
        init_completion(&ioc->base_cmds.done);
        mpt3sas_base_put_smid_default(ioc, smid);
-       timeleft = wait_for_completion_timeout(&ioc->base_cmds.done,
+       wait_for_completion_timeout(&ioc->base_cmds.done,
            msecs_to_jiffies(10000));
        if ((mpi_request->Operation == MPI2_SAS_OP_PHY_HARD_RESET ||
            mpi_request->Operation == MPI2_SAS_OP_PHY_LINK_RESET) &&
  
   issue_host_reset:
        if (issue_reset)
-               mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP,
-                   FORCE_BIG_HAMMER);
+               mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
        ioc->base_cmds.status = MPT3_CMD_NOT_USED;
        rc = -EFAULT;
   out:
@@@ -4119,7 -4110,6 +4121,6 @@@ mpt3sas_base_scsi_enclosure_processor(s
  {
        u16 smid;
        u32 ioc_state;
-       unsigned long timeleft;
        bool issue_reset = false;
        int rc;
        void *request;
        memcpy(request, mpi_request, sizeof(Mpi2SepReply_t));
        init_completion(&ioc->base_cmds.done);
        mpt3sas_base_put_smid_default(ioc, smid);
-       timeleft = wait_for_completion_timeout(&ioc->base_cmds.done,
+       wait_for_completion_timeout(&ioc->base_cmds.done,
            msecs_to_jiffies(10000));
        if (!(ioc->base_cmds.status & MPT3_CMD_COMPLETE)) {
                pr_err(MPT3SAS_FMT "%s: timeout\n",
  
   issue_host_reset:
        if (issue_reset)
-               mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP,
-                   FORCE_BIG_HAMMER);
+               mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
        ioc->base_cmds.status = MPT3_CMD_NOT_USED;
        rc = -EFAULT;
   out:
  /**
   * _base_get_port_facts - obtain port facts reply and save in ioc
   * @ioc: per adapter object
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_get_port_facts(struct MPT3SAS_ADAPTER *ioc, int port, int sleep_flag)
+ _base_get_port_facts(struct MPT3SAS_ADAPTER *ioc, int port)
  {
        Mpi2PortFactsRequest_t mpi_request;
        Mpi2PortFactsReply_t mpi_reply;
        mpi_request.Function = MPI2_FUNCTION_PORT_FACTS;
        mpi_request.PortNumber = port;
        r = _base_handshake_req_reply_wait(ioc, mpi_request_sz,
-           (u32 *)&mpi_request, mpi_reply_sz, (u16 *)&mpi_reply, 5, CAN_SLEEP);
+           (u32 *)&mpi_request, mpi_reply_sz, (u16 *)&mpi_reply, 5);
  
        if (r != 0) {
                pr_err(MPT3SAS_FMT "%s: handshake failed (r=%d)\n",
   * _base_wait_for_iocstate - Wait until the card is in READY or OPERATIONAL
   * @ioc: per adapter object
   * @timeout:
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_wait_for_iocstate(struct MPT3SAS_ADAPTER *ioc, int timeout,
-       int sleep_flag)
+ _base_wait_for_iocstate(struct MPT3SAS_ADAPTER *ioc, int timeout)
  {
        u32 ioc_state;
        int rc;
                goto issue_diag_reset;
        }
  
-       ioc_state = _base_wait_on_iocstate(ioc, MPI2_IOC_STATE_READY,
-           timeout, sleep_flag);
+       ioc_state = _base_wait_on_iocstate(ioc, MPI2_IOC_STATE_READY, timeout);
        if (ioc_state) {
                dfailprintk(ioc, printk(MPT3SAS_FMT
                    "%s: failed going to ready state (ioc_state=0x%x)\n",
        }
  
   issue_diag_reset:
-       rc = _base_diag_reset(ioc, sleep_flag);
+       rc = _base_diag_reset(ioc);
        return rc;
  }
  
  /**
   * _base_get_ioc_facts - obtain ioc facts reply and save in ioc
   * @ioc: per adapter object
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
+ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc)
  {
        Mpi2IOCFactsRequest_t mpi_request;
        Mpi2IOCFactsReply_t mpi_reply;
        dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
            __func__));
  
-       r = _base_wait_for_iocstate(ioc, 10, sleep_flag);
+       r = _base_wait_for_iocstate(ioc, 10);
        if (r) {
                dfailprintk(ioc, printk(MPT3SAS_FMT
                    "%s: failed getting to correct state\n",
        memset(&mpi_request, 0, mpi_request_sz);
        mpi_request.Function = MPI2_FUNCTION_IOC_FACTS;
        r = _base_handshake_req_reply_wait(ioc, mpi_request_sz,
-           (u32 *)&mpi_request, mpi_reply_sz, (u16 *)&mpi_reply, 5, CAN_SLEEP);
+           (u32 *)&mpi_request, mpi_reply_sz, (u16 *)&mpi_reply, 5);
  
        if (r != 0) {
                pr_err(MPT3SAS_FMT "%s: handshake failed (r=%d)\n",
  /**
   * _base_send_ioc_init - send ioc_init to firmware
   * @ioc: per adapter object
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_send_ioc_init(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
+ _base_send_ioc_init(struct MPT3SAS_ADAPTER *ioc)
  {
        Mpi2IOCInitRequest_t mpi_request;
        Mpi2IOCInitReply_t mpi_reply;
  
        r = _base_handshake_req_reply_wait(ioc,
            sizeof(Mpi2IOCInitRequest_t), (u32 *)&mpi_request,
-           sizeof(Mpi2IOCInitReply_t), (u16 *)&mpi_reply, 10,
-           sleep_flag);
+           sizeof(Mpi2IOCInitReply_t), (u16 *)&mpi_reply, 10);
  
        if (r != 0) {
                pr_err(MPT3SAS_FMT "%s: handshake failed (r=%d)\n",
@@@ -4555,16 -4537,14 +4548,14 @@@ mpt3sas_port_enable_done(struct MPT3SAS
  /**
   * _base_send_port_enable - send port_enable(discovery stuff) to firmware
   * @ioc: per adapter object
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_send_port_enable(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
+ _base_send_port_enable(struct MPT3SAS_ADAPTER *ioc)
  {
        Mpi2PortEnableRequest_t *mpi_request;
        Mpi2PortEnableReply_t *mpi_reply;
-       unsigned long timeleft;
        int r = 0;
        u16 smid;
        u16 ioc_status;
  
        init_completion(&ioc->port_enable_cmds.done);
        mpt3sas_base_put_smid_default(ioc, smid);
-       timeleft = wait_for_completion_timeout(&ioc->port_enable_cmds.done,
-           300*HZ);
+       wait_for_completion_timeout(&ioc->port_enable_cmds.done, 300*HZ);
        if (!(ioc->port_enable_cmds.status & MPT3_CMD_COMPLETE)) {
                pr_err(MPT3SAS_FMT "%s: timeout\n",
                    ioc->name, __func__);
@@@ -4737,15 -4716,13 +4727,13 @@@ _base_unmask_events(struct MPT3SAS_ADAP
  /**
   * _base_event_notification - send event notification
   * @ioc: per adapter object
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_event_notification(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
+ _base_event_notification(struct MPT3SAS_ADAPTER *ioc)
  {
        Mpi2EventNotificationRequest_t *mpi_request;
-       unsigned long timeleft;
        u16 smid;
        int r = 0;
        int i;
                    cpu_to_le32(ioc->event_masks[i]);
        init_completion(&ioc->base_cmds.done);
        mpt3sas_base_put_smid_default(ioc, smid);
-       timeleft = wait_for_completion_timeout(&ioc->base_cmds.done, 30*HZ);
+       wait_for_completion_timeout(&ioc->base_cmds.done, 30*HZ);
        if (!(ioc->base_cmds.status & MPT3_CMD_COMPLETE)) {
                pr_err(MPT3SAS_FMT "%s: timeout\n",
                    ioc->name, __func__);
@@@ -4827,19 -4804,18 +4815,18 @@@ mpt3sas_base_validate_event_type(struc
                return;
  
        mutex_lock(&ioc->base_cmds.mutex);
-       _base_event_notification(ioc, CAN_SLEEP);
+       _base_event_notification(ioc);
        mutex_unlock(&ioc->base_cmds.mutex);
  }
  
  /**
   * _base_diag_reset - the "big hammer" start of day reset
   * @ioc: per adapter object
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_diag_reset(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
+ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
  {
        u32 host_diagnostic;
        u32 ioc_state;
                writel(MPI2_WRSEQ_6TH_KEY_VALUE, &ioc->chip->WriteSequence);
  
                /* wait 100 msec */
-               if (sleep_flag == CAN_SLEEP)
-                       msleep(100);
-               else
-                       mdelay(100);
+               msleep(100);
  
                if (count++ > 20)
                        goto out;
             &ioc->chip->HostDiagnostic);
  
        /*This delay allows the chip PCIe hardware time to finish reset tasks*/
-       if (sleep_flag == CAN_SLEEP)
-               msleep(MPI2_HARD_RESET_PCIE_FIRST_READ_DELAY_MICRO_SEC/1000);
-       else
-               mdelay(MPI2_HARD_RESET_PCIE_FIRST_READ_DELAY_MICRO_SEC/1000);
+       msleep(MPI2_HARD_RESET_PCIE_FIRST_READ_DELAY_MICRO_SEC/1000);
  
        /* Approximately 300 second max wait */
        for (count = 0; count < (300000000 /
                if (!(host_diagnostic & MPI2_DIAG_RESET_ADAPTER))
                        break;
  
-               /* Wait to pass the second read delay window */
-               if (sleep_flag == CAN_SLEEP)
-                       msleep(MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC
-                                                               / 1000);
-               else
-                       mdelay(MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC
-                                                               / 1000);
+               msleep(MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC / 1000);
        }
  
        if (host_diagnostic & MPI2_DIAG_HCB_MODE) {
  
        drsprintk(ioc, pr_info(MPT3SAS_FMT
                "Wait for FW to go to the READY state\n", ioc->name));
-       ioc_state = _base_wait_on_iocstate(ioc, MPI2_IOC_STATE_READY, 20,
-           sleep_flag);
+       ioc_state = _base_wait_on_iocstate(ioc, MPI2_IOC_STATE_READY, 20);
        if (ioc_state) {
                pr_err(MPT3SAS_FMT
                        "%s: failed going to ready state (ioc_state=0x%x)\n",
  /**
   * _base_make_ioc_ready - put controller in READY state
   * @ioc: per adapter object
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   * @type: FORCE_BIG_HAMMER or SOFT_RESET
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_make_ioc_ready(struct MPT3SAS_ADAPTER *ioc, int sleep_flag,
-       enum reset_type type)
+ _base_make_ioc_ready(struct MPT3SAS_ADAPTER *ioc, enum reset_type type)
  {
        u32 ioc_state;
        int rc;
                                    ioc->name, __func__, ioc_state);
                                return -EFAULT;
                        }
-                       if (sleep_flag == CAN_SLEEP)
-                               ssleep(1);
-                       else
-                               mdelay(1000);
+                       ssleep(1);
                        ioc_state = mpt3sas_base_get_iocstate(ioc, 0);
                }
        }
  
        if ((ioc_state & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_OPERATIONAL)
                if (!(_base_send_ioc_reset(ioc,
-                   MPI2_FUNCTION_IOC_MESSAGE_UNIT_RESET, 15, CAN_SLEEP))) {
+                   MPI2_FUNCTION_IOC_MESSAGE_UNIT_RESET, 15))) {
                        return 0;
        }
  
   issue_diag_reset:
-       rc = _base_diag_reset(ioc, CAN_SLEEP);
+       rc = _base_diag_reset(ioc);
        return rc;
  }
  
  /**
   * _base_make_ioc_operational - put controller in OPERATIONAL state
   * @ioc: per adapter object
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * Returns 0 for success, non-zero for failure.
   */
  static int
- _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
+ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc)
  {
        int r, i, index;
        unsigned long   flags;
        }
   skip_init_reply_post_free_queue:
  
-       r = _base_send_ioc_init(ioc, sleep_flag);
+       r = _base_send_ioc_init(ioc);
        if (r)
                return r;
  
   skip_init_reply_post_host_index:
  
        _base_unmask_interrupts(ioc);
-       r = _base_event_notification(ioc, sleep_flag);
+       r = _base_event_notification(ioc);
        if (r)
                return r;
  
-       if (sleep_flag == CAN_SLEEP)
-               _base_static_config_pages(ioc);
+       _base_static_config_pages(ioc);
  
        if (ioc->is_driver_loading) {
  
                return r; /* scan_start and scan_finished support */
        }
  
-       r = _base_send_port_enable(ioc, sleep_flag);
+       r = _base_send_port_enable(ioc);
        if (r)
                return r;
  
@@@ -5235,7 -5190,7 +5201,7 @@@ mpt3sas_base_free_resources(struct MPT3
        if (ioc->chip_phys && ioc->chip) {
                _base_mask_interrupts(ioc);
                ioc->shost_recovery = 1;
-               _base_make_ioc_ready(ioc, CAN_SLEEP, SOFT_RESET);
+               _base_make_ioc_ready(ioc, SOFT_RESET);
                ioc->shost_recovery = 0;
        }
  
@@@ -5291,8 -5246,19 +5257,8 @@@ mpt3sas_base_attach(struct MPT3SAS_ADAP
        if (r)
                goto out_free_resources;
  
 -      if (ioc->is_warpdrive) {
 -              ioc->reply_post_host_index[0] = (resource_size_t __iomem *)
 -                  &ioc->chip->ReplyPostHostIndex;
 -
 -              for (i = 1; i < ioc->cpu_msix_table_sz; i++)
 -                      ioc->reply_post_host_index[i] =
 -                      (resource_size_t __iomem *)
 -                      ((u8 __iomem *)&ioc->chip->Doorbell + (0x4000 + ((i - 1)
 -                      * 4)));
 -      }
 -
        pci_set_drvdata(ioc->pdev, ioc->shost);
-       r = _base_get_ioc_facts(ioc, CAN_SLEEP);
+       r = _base_get_ioc_facts(ioc);
        if (r)
                goto out_free_resources;
  
        ioc->build_sg_mpi = &_base_build_sg;
        ioc->build_zero_len_sge_mpi = &_base_build_zero_len_sge;
  
-       r = _base_make_ioc_ready(ioc, CAN_SLEEP, SOFT_RESET);
+       r = _base_make_ioc_ready(ioc, SOFT_RESET);
        if (r)
                goto out_free_resources;
  
        }
  
        for (i = 0 ; i < ioc->facts.NumberOfPorts; i++) {
-               r = _base_get_port_facts(ioc, i, CAN_SLEEP);
+               r = _base_get_port_facts(ioc, i);
                if (r)
                        goto out_free_resources;
        }
  
-       r = _base_allocate_memory_pools(ioc, CAN_SLEEP);
+       r = _base_allocate_memory_pools(ioc);
        if (r)
                goto out_free_resources;
  
        if (ioc->hba_mpi_version_belonged == MPI26_VERSION)
                _base_unmask_events(ioc, MPI2_EVENT_ACTIVE_CABLE_EXCEPTION);
  
-       r = _base_make_ioc_operational(ioc, CAN_SLEEP);
+       r = _base_make_ioc_operational(ioc);
        if (r)
                goto out_free_resources;
  
@@@ -5565,21 -5531,18 +5531,18 @@@ _base_reset_handler(struct MPT3SAS_ADAP
  /**
   * _wait_for_commands_to_complete - reset controller
   * @ioc: Pointer to MPT_ADAPTER structure
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   *
   * This function waiting(3s) for all pending commands to complete
   * prior to putting controller in reset.
   */
  static void
- _wait_for_commands_to_complete(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
+ _wait_for_commands_to_complete(struct MPT3SAS_ADAPTER *ioc)
  {
        u32 ioc_state;
        unsigned long flags;
        u16 i;
  
        ioc->pending_io_count = 0;
-       if (sleep_flag != CAN_SLEEP)
-               return;
  
        ioc_state = mpt3sas_base_get_iocstate(ioc, 0);
        if ((ioc_state & MPI2_IOC_STATE_MASK) != MPI2_IOC_STATE_OPERATIONAL)
  /**
   * mpt3sas_base_hard_reset_handler - reset controller
   * @ioc: Pointer to MPT_ADAPTER structure
-  * @sleep_flag: CAN_SLEEP or NO_SLEEP
   * @type: FORCE_BIG_HAMMER or SOFT_RESET
   *
   * Returns 0 for success, non-zero for failure.
   */
  int
- mpt3sas_base_hard_reset_handler(struct MPT3SAS_ADAPTER *ioc, int sleep_flag,
+ mpt3sas_base_hard_reset_handler(struct MPT3SAS_ADAPTER *ioc,
        enum reset_type type)
  {
        int r;
        if (mpt3sas_fwfault_debug)
                mpt3sas_halt_firmware(ioc);
  
-       /* TODO - What we really should be doing is pulling
-        * out all the code associated with NO_SLEEP; its never used.
-        * That is legacy code from mpt fusion driver, ported over.
-        * I will leave this BUG_ON here for now till its been resolved.
-        */
-       BUG_ON(sleep_flag == NO_SLEEP);
        /* wait for an active reset in progress to complete */
        if (!mutex_trylock(&ioc->reset_in_progress_mutex)) {
                do {
                        is_fault = 1;
        }
        _base_reset_handler(ioc, MPT3_IOC_PRE_RESET);
-       _wait_for_commands_to_complete(ioc, sleep_flag);
+       _wait_for_commands_to_complete(ioc);
        _base_mask_interrupts(ioc);
-       r = _base_make_ioc_ready(ioc, sleep_flag, type);
+       r = _base_make_ioc_ready(ioc, type);
        if (r)
                goto out;
        _base_reset_handler(ioc, MPT3_IOC_AFTER_RESET);
                r = -EFAULT;
                goto out;
        }
-       r = _base_get_ioc_facts(ioc, CAN_SLEEP);
+       r = _base_get_ioc_facts(ioc);
        if (r)
                goto out;
  
                      "Please reboot the system and ensure that the correct"
                      " firmware version is running\n", ioc->name);
  
-       r = _base_make_ioc_operational(ioc, sleep_flag);
+       r = _base_make_ioc_operational(ioc);
        if (!r)
                _base_reset_handler(ioc, MPT3_IOC_DONE_RESET);
  
diff --combined drivers/scsi/scsi_priv.h
@@@ -29,7 -29,6 +29,7 @@@ extern int scsi_init_hosts(void)
  extern void scsi_exit_hosts(void);
  
  /* scsi.c */
 +extern bool scsi_use_blk_mq;
  extern int scsi_setup_command_freelist(struct Scsi_Host *shost);
  extern void scsi_destroy_command_freelist(struct Scsi_Host *shost);
  #ifdef CONFIG_SCSI_LOGGING
@@@ -86,12 -85,14 +86,14 @@@ extern void scsi_device_unbusy(struct s
  extern void scsi_queue_insert(struct scsi_cmnd *cmd, int reason);
  extern void scsi_io_completion(struct scsi_cmnd *, unsigned int);
  extern void scsi_run_host_queues(struct Scsi_Host *shost);
+ extern void scsi_requeue_run_queue(struct work_struct *work);
  extern struct request_queue *scsi_alloc_queue(struct scsi_device *sdev);
  extern struct request_queue *scsi_mq_alloc_queue(struct scsi_device *sdev);
  extern int scsi_mq_setup_tags(struct Scsi_Host *shost);
  extern void scsi_mq_destroy_tags(struct Scsi_Host *shost);
  extern int scsi_init_queue(void);
  extern void scsi_exit_queue(void);
+ extern void scsi_evt_thread(struct work_struct *work);
  struct request_queue;
  struct request;
  extern struct kmem_cache *scsi_sdb_cache;
@@@ -107,8 -107,8 +107,8 @@@ struct virtio_scsi 
        /* If the affinity hint is set for virtqueues */
        bool affinity_hint_set;
  
 -      /* CPU hotplug notifier */
 -      struct notifier_block nb;
 +      struct hlist_node node;
 +      struct hlist_node node_dead;
  
        /* Protected by event_vq lock */
        bool stop_events;
        struct virtio_scsi_vq req_vqs[];
  };
  
 +static enum cpuhp_state virtioscsi_online;
  static struct kmem_cache *virtscsi_cmd_cache;
  static mempool_t *virtscsi_cmd_pool;
  
@@@ -259,7 -258,7 +259,7 @@@ static void virtscsi_complete_free(stru
        struct virtio_scsi_cmd *cmd = buf;
  
        if (cmd->comp)
-               complete_all(cmd->comp);
+               complete(cmd->comp);
  }
  
  static void virtscsi_ctrl_done(struct virtqueue *vq)
@@@ -853,33 -852,21 +853,33 @@@ static void virtscsi_set_affinity(struc
        put_online_cpus();
  }
  
 -static int virtscsi_cpu_callback(struct notifier_block *nfb,
 -                               unsigned long action, void *hcpu)
 +static int virtscsi_cpu_online(unsigned int cpu, struct hlist_node *node)
  {
 -      struct virtio_scsi *vscsi = container_of(nfb, struct virtio_scsi, nb);
 -      switch(action) {
 -      case CPU_ONLINE:
 -      case CPU_ONLINE_FROZEN:
 -      case CPU_DEAD:
 -      case CPU_DEAD_FROZEN:
 -              __virtscsi_set_affinity(vscsi, true);
 -              break;
 -      default:
 -              break;
 -      }
 -      return NOTIFY_OK;
 +      struct virtio_scsi *vscsi = hlist_entry_safe(node, struct virtio_scsi,
 +                                                   node);
 +      __virtscsi_set_affinity(vscsi, true);
 +      return 0;
 +}
 +
 +static int virtscsi_cpu_notif_add(struct virtio_scsi *vi)
 +{
 +      int ret;
 +
 +      ret = cpuhp_state_add_instance(virtioscsi_online, &vi->node);
 +      if (ret)
 +              return ret;
 +
 +      ret = cpuhp_state_add_instance(CPUHP_VIRT_SCSI_DEAD, &vi->node_dead);
 +      if (ret)
 +              cpuhp_state_remove_instance(virtioscsi_online, &vi->node);
 +      return ret;
 +}
 +
 +static void virtscsi_cpu_notif_remove(struct virtio_scsi *vi)
 +{
 +      cpuhp_state_remove_instance_nocalls(virtioscsi_online, &vi->node);
 +      cpuhp_state_remove_instance_nocalls(CPUHP_VIRT_SCSI_DEAD,
 +                                          &vi->node_dead);
  }
  
  static void virtscsi_init_vq(struct virtio_scsi_vq *virtscsi_vq,
@@@ -942,6 -929,8 +942,6 @@@ static int virtscsi_init(struct virtio_
                virtscsi_init_vq(&vscsi->req_vqs[i - VIRTIO_SCSI_VQ_BASE],
                                 vqs[i]);
  
 -      virtscsi_set_affinity(vscsi, true);
 -
        virtscsi_config_set(vdev, cdb_size, VIRTIO_SCSI_CDB_SIZE);
        virtscsi_config_set(vdev, sense_size, VIRTIO_SCSI_SENSE_SIZE);
  
@@@ -998,9 -987,12 +998,9 @@@ static int virtscsi_probe(struct virtio
        if (err)
                goto virtscsi_init_failed;
  
 -      vscsi->nb.notifier_call = &virtscsi_cpu_callback;
 -      err = register_hotcpu_notifier(&vscsi->nb);
 -      if (err) {
 -              pr_err("registering cpu notifier failed\n");
 +      err = virtscsi_cpu_notif_add(vscsi);
 +      if (err)
                goto scsi_add_host_failed;
 -      }
  
        cmd_per_lun = virtscsi_config_get(vdev, cmd_per_lun) ?: 1;
        shost->cmd_per_lun = min_t(u32, cmd_per_lun, shost->can_queue);
@@@ -1057,7 -1049,7 +1057,7 @@@ static void virtscsi_remove(struct virt
  
        scsi_remove_host(shost);
  
 -      unregister_hotcpu_notifier(&vscsi->nb);
 +      virtscsi_cpu_notif_remove(vscsi);
  
        virtscsi_remove_vqs(vdev);
        scsi_host_put(shost);
@@@ -1069,7 -1061,7 +1069,7 @@@ static int virtscsi_freeze(struct virti
        struct Scsi_Host *sh = virtio_scsi_host(vdev);
        struct virtio_scsi *vscsi = shost_priv(sh);
  
 -      unregister_hotcpu_notifier(&vscsi->nb);
 +      virtscsi_cpu_notif_remove(vscsi);
        virtscsi_remove_vqs(vdev);
        return 0;
  }
@@@ -1084,11 -1076,12 +1084,11 @@@ static int virtscsi_restore(struct virt
        if (err)
                return err;
  
 -      err = register_hotcpu_notifier(&vscsi->nb);
 +      err = virtscsi_cpu_notif_add(vscsi);
        if (err) {
                vdev->config->del_vqs(vdev);
                return err;
        }
 -
        virtio_device_ready(vdev);
  
        if (virtio_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG))
@@@ -1143,16 -1136,6 +1143,16 @@@ static int __init init(void
                pr_err("mempool_create() for virtscsi_cmd_pool failed\n");
                goto error;
        }
 +      ret = cpuhp_setup_state_multi(CPUHP_AP_ONLINE_DYN,
 +                                    "scsi/virtio:online",
 +                                    virtscsi_cpu_online, NULL);
 +      if (ret < 0)
 +              goto error;
 +      virtioscsi_online = ret;
 +      ret = cpuhp_setup_state_multi(CPUHP_VIRT_SCSI_DEAD, "scsi/virtio:dead",
 +                                    NULL, virtscsi_cpu_online);
 +      if (ret)
 +              goto error;
        ret = register_virtio_driver(&virtio_scsi_driver);
        if (ret < 0)
                goto error;
@@@ -1168,17 -1151,12 +1168,17 @@@ error
                kmem_cache_destroy(virtscsi_cmd_cache);
                virtscsi_cmd_cache = NULL;
        }
 +      if (virtioscsi_online)
 +              cpuhp_remove_multi_state(virtioscsi_online);
 +      cpuhp_remove_multi_state(CPUHP_VIRT_SCSI_DEAD);
        return ret;
  }
  
  static void __exit fini(void)
  {
        unregister_virtio_driver(&virtio_scsi_driver);
 +      cpuhp_remove_multi_state(virtioscsi_online);
 +      cpuhp_remove_multi_state(CPUHP_VIRT_SCSI_DEAD);
        mempool_destroy(virtscsi_cmd_pool);
        kmem_cache_destroy(virtscsi_cmd_cache);
  }