Merge tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 5 Apr 2018 22:05:53 +0000 (15:05 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 5 Apr 2018 22:05:53 +0000 (15:05 -0700)
Pull SCSI updates from James Bottomley:
 "This is mostly updates of the usual drivers: arcmsr, qla2xx, lpfc,
  ufs, mpt3sas, hisi_sas.

  In addition we have removed several really old drivers: sym53c416,
  NCR53c406a, fdomain, fdomain_cs and removed the old scsi_module.c
  initialization from all remaining drivers.

  Plus an assortment of bug fixes, initialization errors and other minor
  fixes"

* tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (168 commits)
  scsi: ufs: Add support for Auto-Hibernate Idle Timer
  scsi: ufs: sysfs: reworking of the rpm_lvl and spm_lvl entries
  scsi: qla2xxx: fx00 copypaste typo
  scsi: qla2xxx: fix error message on <qla2400
  scsi: smartpqi: update driver version
  scsi: smartpqi: workaround fw bug for oq deletion
  scsi: arcmsr: Change driver version to v1.40.00.05-20180309
  scsi: arcmsr: Sleep to avoid CPU stuck too long for waiting adapter ready
  scsi: arcmsr: Handle adapter removed due to thunderbolt cable disconnection.
  scsi: arcmsr: Rename ACB_F_BUS_HANG_ON to ACB_F_ADAPTER_REMOVED for adapter hot-plug
  scsi: qla2xxx: Update driver version to 10.00.00.06-k
  scsi: qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan
  scsi: qla2xxx: Cleanup code to improve FC-NVMe error handling
  scsi: qla2xxx: Fix FC-NVMe IO abort during driver reset
  scsi: qla2xxx: Fix retry for PRLI RJT with reason of BUSY
  scsi: qla2xxx: Remove nvme_done_list
  scsi: qla2xxx: Return busy if rport going away
  scsi: qla2xxx: Fix n2n_ae flag to prevent dev_loss on PDB change
  scsi: qla2xxx: Add FC-NVMe abort processing
  scsi: qla2xxx: Add changes for devloss timeout in driver
  ...

1  2 
MAINTAINERS
drivers/scsi/aacraid/src.c
drivers/scsi/dpt_i2o.c
drivers/scsi/megaraid/megaraid_sas_base.c
drivers/scsi/mpt3sas/mpt3sas_scsih.c
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/scsi_debug.c
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_sysfs.c
drivers/scsi/smartpqi/smartpqi_init.c

diff --combined MAINTAINERS
index d95925d4e1f71fe10dc698a9230499cc41d059f8,ccde214bb82d0e991c17b57f5f5084c0e7a3fb3a..8133e97980f15aaac106084f69694807cd50b867
@@@ -766,8 -766,6 +766,8 @@@ F: drivers/gpu/drm/amd/amdgpu/amdgpu_am
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
 +F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
 +F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
  F:    drivers/gpu/drm/amd/amdkfd/
  F:    drivers/gpu/drm/amd/include/cik_structs.h
  F:    drivers/gpu/drm/amd/include/kgd_kfd_interface.h
@@@ -843,6 -841,13 +843,6 @@@ F:        sound/soc/codecs/ad7
  F:    sound/soc/codecs/ssm*
  F:    sound/soc/codecs/sigmadsp.*
  
 -ANALOG DEVICES INC ASOC DRIVERS
 -L:    adi-buildroot-devel@lists.sourceforge.net (moderated for non-subscribers)
 -L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 -W:    http://blackfin.uclinux.org/
 -S:    Supported
 -F:    sound/soc/blackfin/*
 -
  ANALOG DEVICES INC DMA DRIVERS
  M:    Lars-Peter Clausen <lars@metafoo.de>
  W:    http://ez.analog.com/community/linux-device-drivers
@@@ -861,17 -866,7 +861,17 @@@ F:       drivers/iio/*/ad
  F:    drivers/iio/adc/ltc2497*
  X:    drivers/iio/*/adjd*
  F:    drivers/staging/iio/*/ad*
 -F:    drivers/staging/iio/trigger/iio-trig-bfin-timer.c
 +
 +ANDES ARCHITECTURE
 +M:    Greentime Hu <green.hu@gmail.com>
 +M:    Vincent Chen <deanbo422@gmail.com>
 +T:    git https://github.com/andestech/linux.git
 +S:    Supported
 +F:    arch/nds32/
 +F:    Documentation/devicetree/bindings/interrupt-controller/andestech,ativic32.txt
 +F:    Documentation/devicetree/bindings/nds32/
 +K:    nds32
 +N:    nds32
  
  ANDROID CONFIG FRAGMENTS
  M:    Rob Herring <robh@kernel.org>
@@@ -1065,42 -1060,41 +1065,42 @@@ ARM POR
  M:    Russell King <linux@armlinux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  W:    http://www.armlinux.org.uk/
 -S:    Maintained
 +S:    Odd Fixes
  T:    git git://git.armlinux.org.uk/~rmk/linux-arm.git
  F:    arch/arm/
 +X:    arch/arm/boot/dts/
  
  ARM PRIMECELL AACI PL041 DRIVER
  M:    Russell King <linux@armlinux.org.uk>
 -S:    Maintained
 +S:    Odd Fixes
  F:    sound/arm/aaci.*
  
  ARM PRIMECELL BUS SUPPORT
  M:    Russell King <linux@armlinux.org.uk>
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/amba/
  F:    include/linux/amba/bus.h
  
  ARM PRIMECELL CLCD PL110 DRIVER
  M:    Russell King <linux@armlinux.org.uk>
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/video/fbdev/amba-clcd.*
  
  ARM PRIMECELL KMI PL050 DRIVER
  M:    Russell King <linux@armlinux.org.uk>
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/input/serio/ambakmi.*
  F:    include/linux/amba/kmi.h
  
  ARM PRIMECELL MMCI PL180/1 DRIVER
  M:    Russell King <linux@armlinux.org.uk>
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/mmc/host/mmci.*
  F:    include/linux/amba/mmci.h
  
  ARM PRIMECELL UART PL010 AND PL011 DRIVERS
  M:    Russell King <linux@armlinux.org.uk>
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/tty/serial/amba-pl01*.c
  F:    include/linux/amba/serial.h
  
@@@ -1158,7 -1152,7 +1158,7 @@@ S:      Maintaine
  F:    drivers/clk/sunxi/
  
  ARM/Allwinner sunXi SoC support
 -M:    Maxime Ripard <maxime.ripard@free-electrons.com>
 +M:    Maxime Ripard <maxime.ripard@bootlin.com>
  M:    Chen-Yu Tsai <wens@csie.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -1244,7 -1238,7 +1244,7 @@@ F:      drivers/clk/at9
  
  ARM/ATMEL AT91RM9200, AT91SAM9 AND SAMA5 SOC SUPPORT
  M:    Nicolas Ferre <nicolas.ferre@microchip.com>
 -M:    Alexandre Belloni <alexandre.belloni@free-electrons.com>
 +M:    Alexandre Belloni <alexandre.belloni@bootlin.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  W:    http://www.linux4sam.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/nferre/linux-at91.git
@@@ -1596,7 -1590,7 +1596,7 @@@ ARM/Marvell Dove/MV78xx0/Orion SOC supp
  M:    Jason Cooper <jason@lakedaemon.net>
  M:    Andrew Lunn <andrew@lunn.ch>
  M:    Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
 -M:    Gregory Clement <gregory.clement@free-electrons.com>
 +M:    Gregory Clement <gregory.clement@bootlin.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    Documentation/devicetree/bindings/soc/dove/
@@@ -1610,7 -1604,7 +1610,7 @@@ F:      arch/arm/boot/dts/orion5x
  ARM/Marvell Kirkwood and Armada 370, 375, 38x, 39x, XP, 3700, 7K/8K SOC support
  M:    Jason Cooper <jason@lakedaemon.net>
  M:    Andrew Lunn <andrew@lunn.ch>
 -M:    Gregory Clement <gregory.clement@free-electrons.com>
 +M:    Gregory Clement <gregory.clement@bootlin.com>
  M:    Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -2005,10 -1999,8 +2005,10 @@@ M:    Maxime Coquelin <mcoquelin.stm32@gma
  M:    Alexandre Torgue <alexandre.torgue@st.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mcoquelin/stm32.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/atorgue/stm32.git stm32-next
  N:    stm32
 +F:    arch/arm/boot/dts/stm32*
 +F:    arch/arm/mach-stm32/
  F:    drivers/clocksource/armv7m_systick.c
  
  ARM/TANGO ARCHITECTURE
@@@ -2635,6 -2627,51 +2635,6 @@@ F:     Documentation/filesystems/bfs.tx
  F:    fs/bfs/
  F:    include/uapi/linux/bfs_fs.h
  
 -BLACKFIN ARCHITECTURE
 -L:    adi-buildroot-devel@lists.sourceforge.net (moderated for non-subscribers)
 -T:    git git://git.code.sf.net/p/adi-linux/code
 -W:    http://blackfin.uclinux.org
 -S:    Orphan
 -F:    arch/blackfin/
 -
 -BLACKFIN EMAC DRIVER
 -L:    adi-buildroot-devel@lists.sourceforge.net (moderated for non-subscribers)
 -W:    http://blackfin.uclinux.org
 -S:    Orphan
 -F:    drivers/net/ethernet/adi/
 -
 -BLACKFIN MEDIA DRIVER
 -L:    adi-buildroot-devel@lists.sourceforge.net (moderated for non-subscribers)
 -W:    http://blackfin.uclinux.org/
 -S:    Orphan
 -F:    drivers/media/platform/blackfin/
 -F:    drivers/media/i2c/adv7183*
 -F:    drivers/media/i2c/vs6624*
 -
 -BLACKFIN RTC DRIVER
 -L:    adi-buildroot-devel@lists.sourceforge.net (moderated for non-subscribers)
 -W:    http://blackfin.uclinux.org
 -S:    Orphan
 -F:    drivers/rtc/rtc-bfin.c
 -
 -BLACKFIN SDH DRIVER
 -L:    adi-buildroot-devel@lists.sourceforge.net (moderated for non-subscribers)
 -W:    http://blackfin.uclinux.org
 -S:    Orphan
 -F:    drivers/mmc/host/bfin_sdh.c
 -
 -BLACKFIN SERIAL DRIVER
 -L:    adi-buildroot-devel@lists.sourceforge.net (moderated for non-subscribers)
 -W:    http://blackfin.uclinux.org
 -S:    Orphan
 -F:    drivers/tty/serial/bfin_uart.c
 -
 -BLACKFIN WATCHDOG DRIVER
 -L:    adi-buildroot-devel@lists.sourceforge.net (moderated for non-subscribers)
 -W:    http://blackfin.uclinux.org
 -S:    Orphan
 -F:    drivers/watchdog/bfin_wdt.c
 -
  BLINKM RGB LED DRIVER
  M:    Jan-Simon Moeller <jansimon.moeller@gmx.de>
  S:    Maintained
@@@ -2646,7 -2683,6 +2646,7 @@@ L:      linux-block@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
  S:    Maintained
  F:    block/
 +F:    drivers/block/
  F:    kernel/trace/blktrace.c
  F:    lib/sbitmap.c
  
@@@ -3246,11 -3282,12 +3246,11 @@@ F:   drivers/net/ieee802154/cc2520.
  F:    include/linux/spi/cc2520.h
  F:    Documentation/devicetree/bindings/net/ieee802154/cc2520.txt
  
 -CCREE ARM TRUSTZONE CRYPTOCELL 700 REE DRIVER
 +CCREE ARM TRUSTZONE CRYPTOCELL REE DRIVER
  M:    Gilad Ben-Yossef <gilad@benyossef.com>
  L:    linux-crypto@vger.kernel.org
 -L:    driverdev-devel@linuxdriverproject.org
  S:    Supported
 -F:    drivers/staging/ccree/
 +F:    drivers/crypto/ccree/
  W:    https://developer.arm.com/products/system-ip/trustzone-cryptocell/cryptocell-700-family
  
  CEC FRAMEWORK
@@@ -3268,7 -3305,6 +3268,7 @@@ F:      include/media/cec-notifier.
  F:    include/uapi/linux/cec.h
  F:    include/uapi/linux/cec-funcs.h
  F:    Documentation/devicetree/bindings/media/cec.txt
 +F:    Documentation/ABI/testing/debugfs-cec-error-inj
  
  CEC GPIO DRIVER
  M:    Hans Verkuil <hans.verkuil@cisco.com>
@@@ -3711,6 -3747,16 +3711,6 @@@ S:     Maintaine
  F:    Documentation/filesystems/cramfs.txt
  F:    fs/cramfs/
  
 -CRIS PORT
 -M:    Mikael Starvik <starvik@axis.com>
 -M:    Jesper Nilsson <jesper.nilsson@axis.com>
 -L:    linux-cris-kernel@axis.com
 -W:    http://developer.axis.com
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jesper/cris.git
 -S:    Maintained
 -F:    arch/cris/
 -F:    drivers/tty/serial/crisv10.*
 -
  CRYPTO API
  M:    Herbert Xu <herbert@gondor.apana.org.au>
  M:    "David S. Miller" <davem@davemloft.net>
@@@ -4073,7 -4119,7 +4073,7 @@@ S:      Supporte
  F:    drivers/mtd/nand/denali*
  
  DESIGNWARE USB2 DRD IP DRIVER
 -M:    John Youn <johnyoun@synopsys.com>
 +M:    Minas Harutyunyan <hminas@synopsys.com>
  L:    linux-usb@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
  S:    Maintained
@@@ -4364,12 -4410,6 +4364,12 @@@ L:    linux-kernel@vger.kernel.or
  S:    Maintained
  F:    drivers/staging/fsl-dpaa2/ethernet
  
 +DPAA2 ETHERNET SWITCH DRIVER
 +M:    Razvan Stefanescu <razvan.stefanescu@nxp.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +F:    drivers/staging/fsl-dpaa2/ethsw
 +
  DPT_I2O SCSI RAID DRIVER
  M:    Adaptec OEM Raid Solutions <aacraid@adaptec.com>
  L:    linux-scsi@vger.kernel.org
@@@ -4416,13 -4456,6 +4416,13 @@@ T:    git git://anongit.freedesktop.org/dr
  S:    Supported
  F:    drivers/gpu/drm/pl111/
  
 +DRM DRIVER FOR ARM VERSATILE TFT PANELS
 +M:    Linus Walleij <linus.walleij@linaro.org>
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +S:    Maintained
 +F:    drivers/gpu/drm/panel/panel-arm-versatile.c
 +F:    Documentation/devicetree/bindings/display/panel/arm,versatile-tft-panel.txt
 +
  DRM DRIVER FOR AST SERVER GRAPHICS CHIPS
  M:    Dave Airlie <airlied@redhat.com>
  S:    Odd Fixes
@@@ -4577,8 -4610,8 +4577,8 @@@ F:      include/uapi/drm
  F:    include/linux/vga*
  
  DRM DRIVERS AND MISC GPU PATCHES
 -M:    Daniel Vetter <daniel.vetter@intel.com>
  M:    Gustavo Padovan <gustavo@padovan.org>
 +M:    Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
  M:    Sean Paul <seanpaul@chromium.org>
  W:    https://01.org/linuxgraphics/gfx-docs/maintainer-tools/drm-misc.html
  S:    Maintained
@@@ -4591,7 -4624,7 +4591,7 @@@ F:      include/uapi/drm/drm
  F:    include/linux/vga*
  
  DRM DRIVERS FOR ALLWINNER A10
 -M:    Maxime Ripard  <maxime.ripard@free-electrons.com>
 +M:    Maxime Ripard  <maxime.ripard@bootlin.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  F:    drivers/gpu/drm/sun4i/
@@@ -4704,7 -4737,6 +4704,7 @@@ F:      drivers/gpu/drm/rcar-du
  F:    drivers/gpu/drm/shmobile/
  F:    include/linux/platform_data/shmob_drm.h
  F:    Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.txt
 +F:    Documentation/devicetree/bindings/display/bridge/renesas,lvds.txt
  F:    Documentation/devicetree/bindings/display/renesas,du.txt
  
  DRM DRIVERS FOR ROCKCHIP
@@@ -4971,12 -5003,6 +4971,6 @@@ T:     git git://linuxtv.org/anttip/media_t
  S:    Maintained
  F:    drivers/media/tuners/e4000*
  
- EATA ISA/EISA/PCI SCSI DRIVER
- M:    Dario Ballabio <ballabio_dario@emc.com>
- L:    linux-scsi@vger.kernel.org
- S:    Maintained
- F:    drivers/scsi/eata.c
  EC100 MEDIA DRIVER
  M:    Antti Palosaari <crope@iki.fi>
  L:    linux-media@vger.kernel.org
@@@ -5518,7 -5544,7 +5512,7 @@@ M:      Luis R. Rodriguez <mcgrof@kernel.org
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/firmware_class/
 -F:    drivers/base/firmware*.c
 +F:    drivers/base/firmware_loader/
  F:    include/linux/firmware.h
  
  FLASH ADAPTER DRIVER (IBM Flash Adapter 900GB Full Height PCI Flash Card)
@@@ -5603,7 -5629,7 +5597,7 @@@ S:      Maintaine
  F:    drivers/dma/fsldma.*
  
  FREESCALE eTSEC ETHERNET DRIVER (GIANFAR)
 -M:    Claudiu Manoil <claudiu.manoil@freescale.com>
 +M:    Claudiu Manoil <claudiu.manoil@nxp.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/ethernet/freescale/gianfar*
@@@ -5765,6 -5791,10 +5759,6 @@@ F:     fs/crypto
  F:    include/linux/fscrypt*.h
  F:    Documentation/filesystems/fscrypt.rst
  
 -FUJITSU FR-V (FRV) PORT
 -S:    Orphan
 -F:    arch/frv/
 -
  FUJITSU LAPTOP EXTRAS
  M:    Jonathan Woithe <jwoithe@just42.net>
  L:    platform-driver-x86@vger.kernel.org
@@@ -5812,12 -5842,6 +5806,6 @@@ F:     tools/testing/selftests/futex
  F:    tools/perf/bench/futex*
  F:    Documentation/*futex*
  
- FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit)
- M:    Rik Faith <faith@cs.unc.edu>
- L:    linux-scsi@vger.kernel.org
- S:    Odd Fixes (e.g., new signatures)
- F:    drivers/scsi/fdomain.*
  GCC PLUGINS
  M:    Kees Cook <keescook@chromium.org>
  R:    Emese Revfy <re.emese@gmail.com>
@@@ -5978,7 -6002,7 +5966,7 @@@ S:      Maintaine
  F:    drivers/media/rc/gpio-ir-tx.c
  
  GPIO MOCKUP DRIVER
 -M:    Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
 +M:    Bamvor Jian Zhang <bamv2005@gmail.com>
  R:    Bartosz Golaszewski <brgl@bgdev.pl>
  L:    linux-gpio@vger.kernel.org
  S:    Maintained
@@@ -5991,7 -6015,6 +5979,7 @@@ L:      linux-gpio@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
  S:    Maintained
  F:    Documentation/devicetree/bindings/gpio/
 +F:    Documentation/driver-api/gpio/
  F:    Documentation/gpio/
  F:    Documentation/ABI/testing/gpio-cdev
  F:    Documentation/ABI/obsolete/sysfs-gpio
@@@ -6207,11 -6230,6 +6195,11 @@@ F:    Documentation/hw_random.tx
  F:    drivers/char/hw_random/
  F:    include/linux/hw_random.h
  
 +HARDWARE TRACING FACILITIES
 +M:    Alexander Shishkin <alexander.shishkin@linux.intel.com>
 +S:    Maintained
 +F:    drivers/hwtracing/
 +
  HARDWARE SPINLOCK CORE
  M:    Ohad Ben-Cohen <ohad@wizery.com>
  M:    Bjorn Andersson <bjorn.andersson@linaro.org>
@@@ -6871,13 -6889,6 +6859,13 @@@ M:    James Hogan <jhogan@kernel.org
  S:    Maintained
  F:    drivers/media/rc/img-ir/
  
 +IMON SOUNDGRAPH USB IR RECEIVER
 +M:    Sean Young <sean@mess.org>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/rc/imon_raw.c
 +F:    drivers/media/rc/imon.c
 +
  IMS TWINTURBO FRAMEBUFFER DRIVER
  L:    linux-fbdev@vger.kernel.org
  S:    Orphan
@@@ -6967,7 -6978,7 +6955,7 @@@ F:      drivers/input/input-mt.
  K:    \b(ABS|SYN)_MT_
  
  INSIDE SECURE CRYPTO DRIVER
 -M:    Antoine Tenart <antoine.tenart@free-electrons.com>
 +M:    Antoine Tenart <antoine.tenart@bootlin.com>
  F:    drivers/crypto/inside-secure/
  S:    Maintained
  L:    linux-crypto@vger.kernel.org
@@@ -7038,7 -7049,6 +7026,7 @@@ F:      Documentation/networking/ixgbe.tx
  F:    Documentation/networking/ixgbevf.txt
  F:    Documentation/networking/i40e.txt
  F:    Documentation/networking/i40evf.txt
 +F:    Documentation/networking/ice.txt
  F:    drivers/net/ethernet/intel/
  F:    drivers/net/ethernet/intel/*/
  F:    include/linux/avf/virtchnl.h
@@@ -7205,14 -7215,6 +7193,14 @@@ L:    linux-rdma@vger.kernel.or
  S:    Supported
  F:    drivers/infiniband/hw/i40iw/
  
 +INTEL SHA MULTIBUFFER DRIVER
 +M:    Megha Dey <megha.dey@linux.intel.com>
 +R:    Tim Chen <tim.c.chen@linux.intel.com>
 +L:    linux-crypto@vger.kernel.org
 +S:    Supported
 +F:    arch/x86/crypto/sha*-mb
 +F:    crypto/mcryptd.c
 +
  INTEL TELEMETRY DRIVER
  M:    Souvik Kumar Chakravarty <souvik.k.chakravarty@intel.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -7507,13 -7509,6 +7495,13 @@@ Q:    http://patchwork.linuxtv.org/project
  S:    Maintained
  F:    drivers/media/dvb-frontends/ix2505v*
  
 +JAILHOUSE HYPERVISOR INTERFACE
 +M:    Jan Kiszka <jan.kiszka@siemens.com>
 +L:    jailhouse-dev@googlegroups.com
 +S:    Maintained
 +F:    arch/x86/kernel/jailhouse.c
 +F:    arch/x86/include/asm/jailhouse_para.h
 +
  JC42.4 TEMPERATURE SENSOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
@@@ -7593,10 -7588,8 +7581,10 @@@ F:    mm/kasan
  F:    scripts/Makefile.kasan
  
  KCONFIG
 +M:    Masahiro Yamada <yamada.masahiro@socionext.com>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git kconfig
  L:    linux-kbuild@vger.kernel.org
 -S:    Orphan
 +S:    Maintained
  F:    Documentation/kbuild/kconfig-language.txt
  F:    scripts/kconfig/
  
@@@ -7904,6 -7897,7 +7892,6 @@@ S:      Maintaine
  F:    scripts/leaking_addresses.pl
  
  LED SUBSYSTEM
 -M:    Richard Purdie <rpurdie@rpsys.net>
  M:    Jacek Anaszewski <jacek.anaszewski@gmail.com>
  M:    Pavel Machek <pavel@ucw.cz>
  L:    linux-leds@vger.kernel.org
@@@ -8140,25 -8134,7 +8128,25 @@@ F:    drivers/*/*/*pasemi
  LINUX KERNEL DUMP TEST MODULE (LKDTM)
  M:    Kees Cook <keescook@chromium.org>
  S:    Maintained
 -F:    drivers/misc/lkdtm*
 +F:    drivers/misc/lkdtm/*
 +
 +LINUX KERNEL MEMORY CONSISTENCY MODEL (LKMM)
 +M:    Alan Stern <stern@rowland.harvard.edu>
 +M:    Andrea Parri <parri.andrea@gmail.com>
 +M:    Will Deacon <will.deacon@arm.com>
 +M:    Peter Zijlstra <peterz@infradead.org>
 +M:    Boqun Feng <boqun.feng@gmail.com>
 +M:    Nicholas Piggin <npiggin@gmail.com>
 +M:    David Howells <dhowells@redhat.com>
 +M:    Jade Alglave <j.alglave@ucl.ac.uk>
 +M:    Luc Maranget <luc.maranget@inria.fr>
 +M:    "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
 +R:    Akira Yokosawa <akiyks@gmail.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
 +F:    tools/memory-model/
 +F:    Documentation/memory-barriers.txt
  
  LINUX SECURITY MODULE (LSM) FRAMEWORK
  M:    Chris Wright <chrisw@sous-sol.org>
@@@ -8321,6 -8297,11 +8309,6 @@@ W:     http://linux-test-project.github.io
  T:    git git://github.com/linux-test-project/ltp.git
  S:    Maintained
  
 -M32R ARCHITECTURE
 -W:    http://www.linux-m32r.org/
 -S:    Orphan
 -F:    arch/m32r/
 -
  M68K ARCHITECTURE
  M:    Geert Uytterhoeven <geert@linux-m68k.org>
  L:    linux-m68k@lists.linux-m68k.org
@@@ -8438,7 -8419,7 +8426,7 @@@ S:      Orpha
  F:    drivers/net/wireless/marvell/libertas/
  
  MARVELL MACCHIATOBIN SUPPORT
 -M:    Russell King <rmk@armlinux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org
  S:    Maintained
  F:    arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts
@@@ -8451,7 -8432,7 +8439,7 @@@ F:      drivers/net/ethernet/marvell/mv643xx
  F:    include/linux/mv643xx.h
  
  MARVELL MV88X3310 PHY DRIVER
 -M:    Russell King <rmk@armlinux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/phy/marvell10g.c
@@@ -8593,23 -8574,13 +8581,23 @@@ W:   https://linuxtv.or
  S:    Maintained
  F:    drivers/media/radio/radio-maxiradio*
  
 -MCP4531 MICROCHIP DIGITAL POTENTIOMETER DRIVER
 +MCP4018 AND MCP4531 MICROCHIP DIGITAL POTENTIOMETER DRIVERS
  M:    Peter Rosin <peda@axentia.se>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-iio-potentiometer-mcp4531
 +F:    drivers/iio/potentiometer/mcp4018.c
  F:    drivers/iio/potentiometer/mcp4531.c
  
 +MCR20A IEEE-802.15.4 RADIO DRIVER
 +M:    Xue Liu <liuxuenetmail@gmail.com>
 +L:    linux-wpan@vger.kernel.org
 +W:    https://github.com/xueliu/mcr20a-linux
 +S:    Maintained
 +F:    drivers/net/ieee802154/mcr20a.c
 +F:    drivers/net/ieee802154/mcr20a.h
 +F:    Documentation/devicetree/bindings/net/ieee802154/mcr20a.txt
 +
  MEASUREMENT COMPUTING CIO-DAC IIO DRIVER
  M:    William Breathitt Gray <vilhelm.gray@gmail.com>
  L:    linux-iio@vger.kernel.org
@@@ -8626,14 -8597,6 +8614,14 @@@ T:    git git://linuxtv.org/media_tree.gi
  S:    Supported
  F:    drivers/media/dvb-frontends/ascot2e*
  
 +MEDIA DRIVERS FOR CXD2099AR CI CONTROLLERS
 +M:    Jasmin Jessich <jasmin@anw.at>
 +L:    linux-media@vger.kernel.org
 +W:    https://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/cxd2099*
 +
  MEDIA DRIVERS FOR CXD2841ER
  M:    Sergey Kozlov <serjk@netup.ru>
  M:    Abylay Ospan <aospan@netup.ru>
@@@ -8644,15 -8607,6 +8632,15 @@@ T:    git git://linuxtv.org/media_tree.gi
  S:    Supported
  F:    drivers/media/dvb-frontends/cxd2841er*
  
 +MEDIA DRIVERS FOR CXD2880
 +M:    Yasunari Takiguchi <Yasunari.Takiguchi@sony.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Supported
 +F:    drivers/media/dvb-frontends/cxd2880/*
 +F:    drivers/media/spi/cxd2880*
 +
  MEDIA DRIVERS FOR DIGITAL DEVICES PCIE DEVICES
  M:    Daniel Scheller <d.scheller.oss@gmail.com>
  L:    linux-media@vger.kernel.org
@@@ -8720,16 -8674,6 +8708,16 @@@ T:    git git://linuxtv.org/media_tree.gi
  S:    Supported
  F:    drivers/media/pci/netup_unidvb/*
  
 +MEDIA DRIVERS FOR RENESAS - CEU
 +M:    Jacopo Mondi <jacopo@jmondi.org>
 +L:    linux-media@vger.kernel.org
 +L:    linux-renesas-soc@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Supported
 +F:    Documentation/devicetree/bindings/media/renesas,ceu.txt
 +F:    drivers/media/platform/renesas-ceu.c
 +F:    include/media/drv-intf/renesas-ceu.h
 +
  MEDIA DRIVERS FOR RENESAS - DRIF
  M:    Ramesh Shanmugasundaram <ramesh.shanmugasundaram@bp.renesas.com>
  L:    linux-media@vger.kernel.org
@@@ -8922,13 -8866,6 +8910,13 @@@ W:    http://www.melexis.co
  S:    Supported
  F:    drivers/iio/temperature/mlx90614.c
  
 +MELEXIS MLX90632 DRIVER
 +M:    Crt Mori <cmo@melexis.com>
 +L:    linux-iio@vger.kernel.org
 +W:    http://www.melexis.com
 +S:    Supported
 +F:    drivers/iio/temperature/mlx90632.c
 +
  MELFAS MIP4 TOUCHSCREEN DRIVER
  M:    Sangwon Jee <jeesw@melfas.com>
  W:    http://www.melfas.com
@@@ -9054,7 -8991,6 +9042,7 @@@ M:      Vadim Pasternak <vadimp@mellanox.com
  L:    linux-leds@vger.kernel.org
  S:    Supported
  F:    drivers/leds/leds-mlxcpld.c
 +F:    drivers/leds/leds-mlxreg.c
  F:    Documentation/leds/leds-mlxcpld.txt
  
  MELLANOX PLATFORM DRIVER
@@@ -9133,6 -9069,20 +9121,6 @@@ F:     drivers/media/platform/meson/ao-cec.
  F:    Documentation/devicetree/bindings/media/meson-ao-cec.txt
  T:    git git://linuxtv.org/media_tree.git
  
 -METAG ARCHITECTURE
 -M:    James Hogan <jhogan@kernel.org>
 -L:    linux-metag@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jhogan/metag.git
 -S:    Odd Fixes
 -F:    arch/metag/
 -F:    Documentation/metag/
 -F:    Documentation/devicetree/bindings/metag/
 -F:    Documentation/devicetree/bindings/interrupt-controller/img,*
 -F:    drivers/clocksource/metag_generic.c
 -F:    drivers/irqchip/irq-metag.c
 -F:    drivers/irqchip/irq-metag-ext.c
 -F:    drivers/tty/metag_da.c
 -
  MICROBLAZE ARCHITECTURE
  M:    Michal Simek <monstr@monstr.eu>
  W:    http://www.monstr.eu/fdt/
@@@ -9187,13 -9137,6 +9175,13 @@@ F:    drivers/net/dsa/microchip/
  F:    include/linux/platform_data/microchip-ksz.h
  F:    Documentation/devicetree/bindings/net/dsa/ksz.txt
  
 +MICROCHIP LAN743X ETHERNET DRIVER
 +M:    Bryan Whitehead <bryan.whitehead@microchip.com>
 +M:    Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/ethernet/microchip/lan743x_*
 +
  MICROCHIP USB251XB DRIVER
  M:    Richard Leitner <richard.leitner@skidata.com>
  L:    linux-usb@vger.kernel.org
@@@ -9251,7 -9194,6 +9239,7 @@@ MIPS GENERIC PLATFOR
  M:    Paul Burton <paul.burton@mips.com>
  L:    linux-mips@linux-mips.org
  S:    Supported
 +F:    Documentation/devicetree/bindings/power/mti,mips-cpc.txt
  F:    arch/mips/generic/
  F:    arch/mips/tools/generic-board-config.sh
  
@@@ -9421,14 -9363,6 +9409,14 @@@ S:    Maintaine
  F:    drivers/media/i2c/mt9t001.c
  F:    include/media/i2c/mt9t001.h
  
 +MT9T112 APTINA CAMERA SENSOR
 +M:    Jacopo Mondi <jacopo@jmondi.org>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd Fixes
 +F:    drivers/media/i2c/mt9t112.c
 +F:    include/media/i2c/mt9t112.h
 +
  MT9V032 APTINA CAMERA SENSOR
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
  L:    linux-media@vger.kernel.org
@@@ -9975,13 -9909,6 +9963,13 @@@ F:    Documentation/ABI/stable/sysfs-bus-n
  F:    include/linux/nvmem-consumer.h
  F:    include/linux/nvmem-provider.h
  
 +NXP SGTL5000 DRIVER
 +M:    Fabio Estevam <fabio.estevam@nxp.com>
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/sound/sgtl5000.txt
 +F:    sound/soc/codecs/sgtl5000*
 +
  NXP TDA998X DRM DRIVER
  M:    Russell King <linux@armlinux.org.uk>
  S:    Supported
@@@ -10006,7 -9933,6 +9994,7 @@@ F:     drivers/nfc/nxp-nc
  
  OBJTOOL
  M:    Josh Poimboeuf <jpoimboe@redhat.com>
 +M:    Peter Zijlstra <peterz@infradead.org>
  S:    Supported
  F:    tools/objtool/
  
@@@ -10234,13 -10160,6 +10222,13 @@@ T: git git://linuxtv.org/media_tree.gi
  S:    Maintained
  F:    drivers/media/i2c/ov13858.c
  
 +OMNIVISION OV2685 SENSOR DRIVER
 +M:    Shunqian Zheng <zhengsq@rock-chips.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/i2c/ov2685.c
 +
  OMNIVISION OV5640 SENSOR DRIVER
  M:    Steve Longerbeam <slongerbeam@gmail.com>
  L:    linux-media@vger.kernel.org
@@@ -10255,13 -10174,6 +10243,13 @@@ T: git git://linuxtv.org/media_tree.gi
  S:    Maintained
  F:    drivers/media/i2c/ov5647.c
  
 +OMNIVISION OV5695 SENSOR DRIVER
 +M:    Shunqian Zheng <zhengsq@rock-chips.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/i2c/ov5695.c
 +
  OMNIVISION OV7670 SENSOR DRIVER
  M:    Jonathan Corbet <corbet@lwn.net>
  L:    linux-media@vger.kernel.org
@@@ -10270,14 -10182,6 +10258,14 @@@ S: Maintaine
  F:    drivers/media/i2c/ov7670.c
  F:    Documentation/devicetree/bindings/media/i2c/ov7670.txt
  
 +OMNIVISION OV772x SENSOR DRIVER
 +M:    Jacopo Mondi <jacopo@jmondi.org>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
 +F:    drivers/media/i2c/ov772x.c
 +F:    include/media/i2c/ov772x.h
 +
  OMNIVISION OV7740 SENSOR DRIVER
  M:    Wenyou Yang <wenyou.yang@microchip.com>
  L:    linux-media@vger.kernel.org
@@@ -10286,16 -10190,6 +10274,16 @@@ S: Maintaine
  F:    drivers/media/i2c/ov7740.c
  F:    Documentation/devicetree/bindings/media/i2c/ov7740.txt
  
 +OMNIVISION OV9650 SENSOR DRIVER
 +M:    Sakari Ailus <sakari.ailus@linux.intel.com>
 +R:    Akinobu Mita <akinobu.mita@gmail.com>
 +R:    Sylwester Nawrocki <s.nawrocki@samsung.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/i2c/ov9650.c
 +F:    Documentation/devicetree/bindings/media/i2c/ov9650.txt
 +
  ONENAND FLASH DRIVER
  M:    Kyungmin Park <kyungmin.park@samsung.com>
  L:    linux-mtd@lists.infradead.org
@@@ -10416,7 -10310,7 +10404,7 @@@ F:   drivers/oprofile
  F:    include/linux/oprofile.h
  
  ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
 -M:    Mark Fasheh <mfasheh@versity.com>
 +M:    Mark Fasheh <mark@fasheh.com>
  M:    Joel Becker <jlbec@evilplan.org>
  L:    ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
  W:    http://ocfs2.wiki.kernel.org
@@@ -10497,6 -10391,14 +10485,6 @@@ L:  platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/panasonic-laptop.c
  
 -PANASONIC MN10300/AM33/AM34 PORT
 -M:    David Howells <dhowells@redhat.com>
 -L:    linux-am33-list@redhat.com (moderated for non-subscribers)
 -W:    ftp://ftp.redhat.com/pub/redhat/gnupro/AM33/
 -S:    Maintained
 -F:    Documentation/mn10300/
 -F:    arch/mn10300/
 -
  PARALLEL LCD/KEYPAD PANEL DRIVER
  M:    Willy Tarreau <willy@haproxy.com>
  M:    Ksenija Stanojevic <ksenija.stanojevic@gmail.com>
@@@ -10918,7 -10820,6 +10906,7 @@@ F:   drivers/platform/x86/peaq-wmi.
  PER-CPU MEMORY ALLOCATOR
  M:    Tejun Heo <tj@kernel.org>
  M:    Christoph Lameter <cl@linux.com>
 +M:    Dennis Zhou <dennisszhou@gmail.com>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git
  S:    Maintained
  F:    include/linux/percpu*.h
@@@ -11012,17 -10913,6 +11000,17 @@@ L: linux-gpio@vger.kernel.or
  S:    Supported
  F:    drivers/pinctrl/pinctrl-at91-pio4.*
  
 +PIN CONTROLLER - FREESCALE
 +M:    Dong Aisheng <aisheng.dong@nxp.com>
 +M:    Fabio Estevam <festevam@gmail.com>
 +M:    Shawn Guo <shawnguo@kernel.org>
 +M:    Stefan Agner <stefan@agner.ch>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
 +L:    linux-gpio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/pinctrl/freescale/
 +F:    Documentation/devicetree/bindings/pinctrl/fsl,*
 +
  PIN CONTROLLER - INTEL
  M:    Mika Westerberg <mika.westerberg@linux.intel.com>
  M:    Heikki Krogerus <heikki.krogerus@linux.intel.com>
@@@ -11099,7 -10989,7 +11087,7 @@@ F:   include/linux/pktcdvd.
  F:    include/uapi/linux/pktcdvd.h
  
  PKUNITY SOC DRIVERS
 -M:    Guan Xuetao <gxt@mprc.pku.edu.cn>
 +M:    Guan Xuetao <gxt@pku.edu.cn>
  W:    http://mprc.pku.edu.cn/~guanxuetao/linux
  S:    Maintained
  T:    git git://github.com/gxt/linux.git
@@@ -11543,9 -11433,8 +11531,9 @@@ M:   Stuart Yoder <stuyoder@gmail.com
  M:    Laurentiu Tudor <laurentiu.tudor@nxp.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
 -F:    drivers/staging/fsl-mc/
 +F:    drivers/bus/fsl-mc/
  F:    Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt
 +F:    Documentation/networking/dpaa2/overview.rst
  
  QT1010 MEDIA DRIVER
  M:    Antti Palosaari <crope@iki.fi>
@@@ -12190,7 -12079,6 +12178,7 @@@ M:   Sylwester Nawrocki <s.nawrocki@samsu
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
  F:    sound/soc/samsung/
 +F:    Documentation/devicetree/bindings/sound/samsung*
  
  SAMSUNG EXYNOS PSEUDO RANDOM NUMBER GENERATOR (RNG) DRIVER
  M:    Krzysztof Kozlowski <krzk@kernel.org>
@@@ -12296,7 -12184,7 +12284,7 @@@ F:   Documentation/devicetree/bindings/cl
  SAMSUNG SPI DRIVERS
  M:    Kukjin Kim <kgene@kernel.org>
  M:    Krzysztof Kozlowski <krzk@kernel.org>
 -M:    Andi Shyti <andi.shyti@samsung.com>
 +M:    Andi Shyti <andi@etezian.org>
  L:    linux-spi@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
  S:    Maintained
@@@ -12350,6 -12238,13 +12338,6 @@@ F:  include/linux/sched.
  F:    include/uapi/linux/sched.h
  F:    include/linux/wait.h
  
 -SCORE ARCHITECTURE
 -M:    Chen Liqin <liqin.linux@gmail.com>
 -M:    Lennox Wu <lennox.wu@gmail.com>
 -W:    http://www.sunplus.com
 -S:    Supported
 -F:    arch/score/
 -
  SCR24X CHIP CARD INTERFACE DRIVER
  M:    Lubomir Rintel <lkundrak@v3.sk>
  S:    Supported
@@@ -12877,9 -12772,10 +12865,9 @@@ S:  Maintaine
  F:    drivers/net/ethernet/smsc/smsc9420.*
  
  SOC-CAMERA V4L2 SUBSYSTEM
 -M:    Guennadi Liakhovetski <g.liakhovetski@gmx.de>
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
 -S:    Maintained
 +S:    Orphan
  F:    include/media/soc*
  F:    drivers/media/i2c/soc_camera/
  F:    drivers/media/platform/soc_camera/
@@@ -12942,19 -12838,6 +12930,19 @@@ S: Maintaine
  F:    drivers/net/ethernet/socionext/netsec.c
  F:    Documentation/devicetree/bindings/net/socionext-netsec.txt
  
 +SOLIDRUN CLEARFOG SUPPORT
 +M:    Russell King <linux@armlinux.org.uk>
 +S:    Maintained
 +F:    arch/arm/boot/dts/armada-388-clearfog*
 +F:    arch/arm/boot/dts/armada-38x-solidrun-*
 +
 +SOLIDRUN CUBOX-I/HUMMINGBOARD SUPPORT
 +M:    Russell King <linux@armlinux.org.uk>
 +S:    Maintained
 +F:    arch/arm/boot/dts/imx6*-cubox-i*
 +F:    arch/arm/boot/dts/imx6*-hummingboard*
 +F:    arch/arm/boot/dts/imx6*-sr-*
 +
  SONIC NETWORK DRIVER
  M:    Thomas Bogendoerfer <tsbogend@alpha.franken.de>
  L:    netdev@vger.kernel.org
@@@ -13608,14 -13491,6 +13596,14 @@@ T: git git://linuxtv.org/mkrufky/tuners
  S:    Maintained
  F:    drivers/media/tuners/tda18271*
  
 +TDA1997x MEDIA DRIVER
 +M:    Tim Harvey <tharvey@gateworks.com>
 +L:    linux-media@vger.kernel.org
 +W:    https://linuxtv.org
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/i2c/tda1997x.*
 +
  TDA827x MEDIA DRIVER
  M:    Michael Krufky <mkrufky@linuxtv.org>
  L:    linux-media@vger.kernel.org
@@@ -13697,12 -13572,6 +13685,12 @@@ L: linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/media/rc/ttusbir.c
  
 +TECHWELL TW9910 VIDEO DECODER
 +L:    linux-media@vger.kernel.org
 +S:    Orphan
 +F:    drivers/media/i2c/tw9910.c
 +F:    include/media/i2c/tw9910.h
 +
  TEE SUBSYSTEM
  M:    Jens Wiklander <jens.wiklander@linaro.org>
  S:    Maintained
@@@ -13738,8 -13607,7 +13726,8 @@@ S:   Supporte
  F:    drivers/i2c/busses/i2c-tegra.c
  
  TEGRA IOMMU DRIVERS
 -M:    Hiroshi Doyu <hdoyu@nvidia.com>
 +M:    Thierry Reding <thierry.reding@gmail.com>
 +L:    linux-tegra@vger.kernel.org
  S:    Supported
  F:    drivers/iommu/tegra*
  
@@@ -14027,6 -13895,19 +14015,6 @@@ S:  Orpha
  F:    drivers/net/wireless/ti/
  F:    include/linux/wl12xx.h
  
 -TILE ARCHITECTURE
 -W:    http://www.mellanox.com/repository/solutions/tile-scm/
 -S:    Orphan
 -F:    arch/tile/
 -F:    drivers/char/tile-srom.c
 -F:    drivers/edac/tile_edac.c
 -F:    drivers/net/ethernet/tile/
 -F:    drivers/rtc/rtc-tile.c
 -F:    drivers/tty/hvc/hvc_tile.c
 -F:    drivers/tty/serial/tilegx.c
 -F:    drivers/usb/host/*-tilegx.c
 -F:    include/linux/usb/tilegx.h
 -
  TIMEKEEPING, CLOCKSOURCE CORE, NTP, ALARMTIMER
  M:    John Stultz <john.stultz@linaro.org>
  M:    Thomas Gleixner <tglx@linutronix.de>
@@@ -14352,7 -14233,7 +14340,7 @@@ F:   include/linux/uwb.
  F:    include/linux/uwb/
  
  UNICORE32 ARCHITECTURE:
 -M:    Guan Xuetao <gxt@mprc.pku.edu.cn>
 +M:    Guan Xuetao <gxt@pku.edu.cn>
  W:    http://mprc.pku.edu.cn/~guanxuetao/linux
  S:    Maintained
  T:    git git://github.com/gxt/linux.git
@@@ -14491,12 -14372,6 +14479,12 @@@ S: Maintaine
  F:    Documentation/hid/hiddev.txt
  F:    drivers/hid/usbhid/
  
 +USB INTEL XHCI ROLE MUX DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-usb@vger.kernel.org
 +S:    Maintained
 +F:    drivers/usb/roles/intel-xhci-usb-role-switch.c
 +
  USB ISP116X DRIVER
  M:    Olav Kongas <ok@artecdesign.ee>
  L:    linux-usb@vger.kernel.org
@@@ -14627,12 -14502,6 +14615,12 @@@ F: drivers/usb
  F:    include/linux/usb.h
  F:    include/linux/usb/
  
 +USB TYPEC PI3USB30532 MUX DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-usb@vger.kernel.org
 +S:    Maintained
 +F:    drivers/usb/typec/mux/pi3usb30532.c
 +
  USB TYPEC SUBSYSTEM
  M:    Heikki Krogerus <heikki.krogerus@linux.intel.com>
  L:    linux-usb@vger.kernel.org
@@@ -15017,7 -14886,7 +15005,7 @@@ F:   drivers/input/mouse/vmmouse.
  F:    drivers/input/mouse/vmmouse.h
  
  VMWARE VMXNET3 ETHERNET DRIVER
 -M:    Shrikrishna Khare <skhare@vmware.com>
 +M:    Ronak Doshi <doshir@vmware.com>
  M:    "VMware, Inc." <pv-drivers@vmware.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
index a802bddf04aa061ab95eb7fbb1fe406c5be29c99,3122389f380f21738467f57652a0d9af88e03713..4ebb35a29caadf0bd57b5295a78f0d0ed3eea4ee
@@@ -255,7 -255,8 +255,8 @@@ static int src_sync_cmd(struct aac_dev 
         */
        src_writel(dev, MUnit.IDR, INBOUNDDOORBELL_0 << SRC_IDR_SHIFT);
  
-       if (!dev->sync_mode || command != SEND_SYNCHRONOUS_FIB) {
+       if ((!dev->sync_mode || command != SEND_SYNCHRONOUS_FIB) &&
+               !dev->in_soft_reset) {
                ok = 0;
                start = jiffies;
  
@@@ -679,6 -680,25 +680,25 @@@ void aac_set_intx_mode(struct aac_dev *
        }
  }
  
+ static void aac_clear_omr(struct aac_dev *dev)
+ {
+       u32 omr_value = 0;
+       omr_value = src_readl(dev, MUnit.OMR);
+       /*
+        * Check for PCI Errors or Kernel Panic
+        */
+       if ((omr_value == INVALID_OMR) || (omr_value & KERNEL_PANIC))
+               omr_value = 0;
+       /*
+        * Preserve MSIX Value if any
+        */
+       src_writel(dev, MUnit.OMR, omr_value & AAC_INT_MODE_MSIX);
+       src_readl(dev, MUnit.OMR);
+ }
  static void aac_dump_fw_fib_iop_reset(struct aac_dev *dev)
  {
        __le32 supported_options3;
@@@ -739,6 -759,8 +759,8 @@@ static void aac_send_iop_reset(struct a
  
        aac_set_intx_mode(dev);
  
+       aac_clear_omr(dev);
        src_writel(dev, MUnit.IDR, IOP_SRC_RESET_MASK);
  
        msleep(5000);
@@@ -748,6 -770,7 +770,7 @@@ static void aac_send_hardware_soft_rese
  {
        u_int32_t val;
  
+       aac_clear_omr(dev);
        val = readl(((char *)(dev->base) + IBW_SWR_OFFSET));
        val |= 0x01;
        writel(val, ((char *)(dev->base) + IBW_SWR_OFFSET));
@@@ -786,7 -809,7 +809,7 @@@ static int aac_src_restart_adapter(stru
                if (!is_ctrl_up)
                        dev_err(&dev->pdev->dev, "IOP reset failed\n");
                else {
 -                      dev_info(&dev->pdev->dev, "IOP reset succeded\n");
 +                      dev_info(&dev->pdev->dev, "IOP reset succeeded\n");
                        goto set_startup;
                }
        }
                        ret = -ENODEV;
                        goto out;
                } else
 -                      dev_info(&dev->pdev->dev, "SOFT reset succeded\n");
 +                      dev_info(&dev->pdev->dev, "SOFT reset succeeded\n");
        }
  
  set_startup:
@@@ -992,6 -1015,148 +1015,148 @@@ error_iounmap
        return -1;
  }
  
+ static int aac_src_wait_sync(struct aac_dev *dev, int *status)
+ {
+       unsigned long start = jiffies;
+       unsigned long usecs = 0;
+       int delay = 5 * HZ;
+       int rc = 1;
+       while (time_before(jiffies, start+delay)) {
+               /*
+                * Delay 5 microseconds to let Mon960 get info.
+                */
+               udelay(5);
+               /*
+                * Mon960 will set doorbell0 bit when it has completed the
+                * command.
+                */
+               if (aac_src_get_sync_status(dev) & OUTBOUNDDOORBELL_0) {
+                       /*
+                        * Clear: the doorbell.
+                        */
+                       if (dev->msi_enabled)
+                               aac_src_access_devreg(dev, AAC_CLEAR_SYNC_BIT);
+                       else
+                               src_writel(dev, MUnit.ODR_C,
+                                       OUTBOUNDDOORBELL_0 << SRC_ODR_SHIFT);
+                       rc = 0;
+                       break;
+               }
+               /*
+                * Yield the processor in case we are slow
+                */
+               usecs = 1 * USEC_PER_MSEC;
+               usleep_range(usecs, usecs + 50);
+       }
+       /*
+        * Pull the synch status from Mailbox 0.
+        */
+       if (status && !rc) {
+               status[0] = readl(&dev->IndexRegs->Mailbox[0]);
+               status[1] = readl(&dev->IndexRegs->Mailbox[1]);
+               status[2] = readl(&dev->IndexRegs->Mailbox[2]);
+               status[3] = readl(&dev->IndexRegs->Mailbox[3]);
+               status[4] = readl(&dev->IndexRegs->Mailbox[4]);
+       }
+       return rc;
+ }
+ /**
+  *  aac_src_soft_reset        -       perform soft reset to speed up
+  *  access
+  *
+  *  Assumptions: That the controller is in a state where we can
+  *  bring it back to life with an init struct. We can only use
+  *  fast sync commands, as the timeout is 5 seconds.
+  *
+  *  @dev: device to configure
+  *
+  */
+ static int aac_src_soft_reset(struct aac_dev *dev)
+ {
+       u32 status_omr = src_readl(dev, MUnit.OMR);
+       u32 status[5];
+       int rc = 1;
+       int state = 0;
+       char *state_str[7] = {
+               "GET_ADAPTER_PROPERTIES Failed",
+               "GET_ADAPTER_PROPERTIES timeout",
+               "SOFT_RESET not supported",
+               "DROP_IO Failed",
+               "DROP_IO timeout",
+               "Check Health failed"
+       };
+       if (status_omr == INVALID_OMR)
+               return 1;       // pcie hosed
+       if (!(status_omr & KERNEL_UP_AND_RUNNING))
+               return 1;       // not up and running
+       /*
+        * We go into soft reset mode to allow us to handle response
+        */
+       dev->in_soft_reset = 1;
+       dev->msi_enabled = status_omr & AAC_INT_MODE_MSIX;
+       /* Get adapter properties */
+       rc = aac_adapter_sync_cmd(dev, GET_ADAPTER_PROPERTIES, 0, 0, 0,
+               0, 0, 0, status+0, status+1, status+2, status+3, status+4);
+       if (rc)
+               goto out;
+       state++;
+       if (aac_src_wait_sync(dev, status)) {
+               rc = 1;
+               goto out;
+       }
+       state++;
+       if (!(status[1] & le32_to_cpu(AAC_OPT_EXTENDED) &&
+               (status[4] & le32_to_cpu(AAC_EXTOPT_SOFT_RESET)))) {
+               rc = 2;
+               goto out;
+       }
+       if ((status[1] & le32_to_cpu(AAC_OPT_EXTENDED)) &&
+               (status[4] & le32_to_cpu(AAC_EXTOPT_SA_FIRMWARE)))
+               dev->sa_firmware = 1;
+       state++;
+       rc = aac_adapter_sync_cmd(dev, DROP_IO, 0, 0, 0, 0, 0, 0,
+                status+0, status+1, status+2, status+3, status+4);
+       if (rc)
+               goto out;
+       state++;
+       if (aac_src_wait_sync(dev, status)) {
+               rc = 3;
+               goto out;
+       }
+       if (status[1])
+               dev_err(&dev->pdev->dev, "%s: %d outstanding I/O pending\n",
+                       __func__, status[1]);
+       state++;
+       rc = aac_src_check_health(dev);
+ out:
+       dev->in_soft_reset = 0;
+       dev->msi_enabled = 0;
+       if (rc)
+               dev_err(&dev->pdev->dev, "%s: %s status = %d", __func__,
+                       state_str[state], rc);
+ return rc;
+ }
  /**
   *  aac_srcv_init     -       initialize an SRCv card
   *  @dev: device to configure
@@@ -1021,8 -1186,10 +1186,10 @@@ int aac_srcv_init(struct aac_dev *dev
  
        if (dev->init_reset) {
                dev->init_reset = false;
-               if (!aac_src_restart_adapter(dev, 0, IOP_HWSOFT_RESET))
+               if (aac_src_soft_reset(dev)) {
+                       aac_src_restart_adapter(dev, 0, IOP_HWSOFT_RESET);
                        ++restart;
+               }
        }
  
        /*
                printk(KERN_ERR "%s%d: adapter monitor panic.\n", dev->name, instance);
                goto error_iounmap;
        }
        start = jiffies;
        /*
         *      Wait for the adapter to be up and running. Wait up to 3 minutes
         */
-       while (!((status = src_readl(dev, MUnit.OMR)) &
-               KERNEL_UP_AND_RUNNING) ||
-               status == 0xffffffff) {
+       do {
+               status = src_readl(dev, MUnit.OMR);
+               if (status == INVALID_OMR)
+                       status = 0;
                if ((restart &&
                  (status & (KERNEL_PANIC|SELF_TEST_FAILED|MONITOR_PANIC))) ||
                  time_after(jiffies, start+HZ*startup_timeout)) {
                        ++restart;
                }
                msleep(1);
-       }
+       } while (!(status & KERNEL_UP_AND_RUNNING));
        if (restart && aac_commit)
                aac_commit = 1;
        /*
@@@ -1234,13 -1405,23 +1405,23 @@@ void aac_src_access_devreg(struct aac_d
  
  static int aac_src_get_sync_status(struct aac_dev *dev)
  {
+       int msix_val = 0;
+       int legacy_val = 0;
  
-       int val;
+       msix_val = src_readl(dev, MUnit.ODR_MSI) & SRC_MSI_READ_MASK ? 1 : 0;
  
-       if (dev->msi_enabled)
-               val = src_readl(dev, MUnit.ODR_MSI) & 0x1000 ? 1 : 0;
-       else
-               val = src_readl(dev, MUnit.ODR_R) >> SRC_ODR_SHIFT;
+       if (!dev->msi_enabled) {
+               /*
+                * if Legacy int status indicates cmd is not complete
+                * sample MSIx register to see if it indiactes cmd complete,
+                * if yes set the controller in MSIx mode and consider cmd
+                * completed
+                */
+               legacy_val = src_readl(dev, MUnit.ODR_R) >> SRC_ODR_SHIFT;
+               if (!(legacy_val & 1) && msix_val)
+                       dev->msi_enabled = 1;
+               return legacy_val;
+       }
  
-       return val;
+       return msix_val;
  }
diff --combined drivers/scsi/dpt_i2o.c
index a00d822e314257c46f550ff29a307883e2ce9664,35d45903ed2e9c0459f816ab3c470ba01a940be2..6866975b25f39f64e66912cde53bed9728fd39e9
@@@ -302,16 -302,14 +302,14 @@@ rebuild_sys_tab
  }
  
  
- /*
-  * scsi_unregister will be called AFTER we return.
-  */
- static int adpt_release(struct Scsi_Host *host)
+ static void adpt_release(adpt_hba *pHba)
  {
-       adpt_hba* pHba = (adpt_hba*) host->hostdata[0];
+       struct Scsi_Host *shost = pHba->host;
+       scsi_remove_host(shost);
  //    adpt_i2o_quiesce_hba(pHba);
        adpt_i2o_delete_hba(pHba);
-       scsi_unregister(host);
-       return 0;
+       scsi_host_put(shost);
  }
  
  
@@@ -801,14 -799,17 +799,17 @@@ static int __adpt_reset(struct scsi_cmn
  {
        adpt_hba* pHba;
        int rcode;
+       char name[32];
        pHba = (adpt_hba*)cmd->device->host->hostdata[0];
-       printk(KERN_WARNING"%s: Hba Reset: scsi id %d: tid: %d\n",pHba->name,cmd->device->channel,pHba->channel[cmd->device->channel].tid );
+       strncpy(name, pHba->name, sizeof(name));
+       printk(KERN_WARNING"%s: Hba Reset: scsi id %d: tid: %d\n", name, cmd->device->channel, pHba->channel[cmd->device->channel].tid);
        rcode =  adpt_hba_reset(pHba);
        if(rcode == 0){
-               printk(KERN_WARNING"%s: HBA reset complete\n",pHba->name);
+               printk(KERN_WARNING"%s: HBA reset complete\n", name);
                return SUCCESS;
        } else {
-               printk(KERN_WARNING"%s: HBA reset failed (%x)\n",pHba->name, rcode);
+               printk(KERN_WARNING"%s: HBA reset failed (%x)\n", name, rcode);
                return FAILED;
        }
  }
@@@ -1087,8 -1088,6 +1088,6 @@@ static void adpt_i2o_delete_hba(adpt_hb
  
  
        mutex_lock(&adpt_configuration_lock);
-       // scsi_unregister calls our adpt_release which
-       // does a quiese
        if(pHba->host){
                free_irq(pHba->host->irq, pHba);
        }
@@@ -3524,7 -3523,7 +3523,7 @@@ static int adpt_i2o_systab_send(adpt_hb
  #endif
  
        return ret;     
 - }
 +}
  
  
  /*============================================================================
@@@ -3595,11 -3594,9 +3594,9 @@@ static void __exit adpt_exit(void
  {
        adpt_hba        *pHba, *next;
  
-       for (pHba = hba_chain; pHba; pHba = pHba->next)
-               scsi_remove_host(pHba->host);
        for (pHba = hba_chain; pHba; pHba = next) {
                next = pHba->next;
-               adpt_release(pHba->host);
+               adpt_release(pHba);
        }
  }
  
index 7a37ace4239b0e240400548aed882e5b0259a66e,2ca9b25095da926c365e6bf8e7fb708ef06264ca..b89c6e6c0589ade35371e1fb158e9229ad82ca89
@@@ -1864,7 -1864,7 +1864,7 @@@ megasas_set_nvme_device_properties(stru
  
        blk_queue_max_hw_sectors(sdev->request_queue, (max_io_size / 512));
  
 -      queue_flag_set_unlocked(QUEUE_FLAG_NOMERGES, sdev->request_queue);
 +      blk_queue_flag_set(QUEUE_FLAG_NOMERGES, sdev->request_queue);
        blk_queue_virt_boundary(sdev->request_queue, mr_nvme_pg_size - 1);
  }
  
@@@ -4022,7 -4022,7 +4022,7 @@@ static int megasas_create_frame_pool(st
  
                cmd = instance->cmd_list[i];
  
-               cmd->frame = dma_pool_alloc(instance->frame_dma_pool,
+               cmd->frame = dma_pool_zalloc(instance->frame_dma_pool,
                                            GFP_KERNEL, &cmd->frame_phys_addr);
  
                cmd->sense = dma_pool_alloc(instance->sense_dma_pool,
                        return -ENOMEM;
                }
  
-               memset(cmd->frame, 0, instance->mfi_frame_size);
                cmd->frame->io.context = cpu_to_le32(cmd->index);
                cmd->frame->io.pad_0 = 0;
                if ((instance->adapter_type == MFI_SERIES) && reset_devices)
index aee1a0e1c6008ebf3ccbb21bf0e18090b3b30d83,89be0170aef6d02ca3edfa93580a48e33f2d3ccb..8cd3782fab4930fc90e336d675e08e78af38064a
@@@ -2352,7 -2352,7 +2352,7 @@@ scsih_slave_configure(struct scsi_devic
                 ** merged and can eliminate holes created during merging
                 ** operation.
                 **/
 -              queue_flag_set_unlocked(QUEUE_FLAG_NOMERGES,
 +              blk_queue_flag_set(QUEUE_FLAG_NOMERGES,
                                sdev->request_queue);
                blk_queue_virt_boundary(sdev->request_queue,
                                ioc->page_size - 1);
@@@ -2679,7 -2679,7 +2679,7 @@@ mpt3sas_scsih_issue_tm(struct MPT3SAS_A
        int_to_scsilun(lun, (struct scsi_lun *)mpi_request->LUN);
        mpt3sas_scsih_set_tm_flag(ioc, handle);
        init_completion(&ioc->tm_cmds.done);
-       ioc->put_smid_hi_priority(ioc, smid, msix_task);
+       mpt3sas_base_put_smid_hi_priority(ioc, smid, msix_task);
        wait_for_completion_timeout(&ioc->tm_cmds.done, timeout*HZ);
        if (!(ioc->tm_cmds.status & MPT3_CMD_COMPLETE)) {
                pr_err(MPT3SAS_FMT "%s: timeout\n",
@@@ -3641,7 -3641,7 +3641,7 @@@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTE
        mpi_request->DevHandle = cpu_to_le16(handle);
        mpi_request->TaskType = MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET;
        set_bit(handle, ioc->device_remove_in_progress);
-       ioc->put_smid_hi_priority(ioc, smid, 0);
+       mpt3sas_base_put_smid_hi_priority(ioc, smid, 0);
        mpt3sas_trigger_master(ioc, MASTER_TRIGGER_DEVICE_REMOVAL);
  
  out:
@@@ -3742,7 -3742,7 +3742,7 @@@ _scsih_tm_tr_complete(struct MPT3SAS_AD
        mpi_request->Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL;
        mpi_request->Operation = MPI2_SAS_OP_REMOVE_DEVICE;
        mpi_request->DevHandle = mpi_request_tm->DevHandle;
-       ioc->put_smid_default(ioc, smid_sas_ctrl);
+       mpt3sas_base_put_smid_default(ioc, smid_sas_ctrl);
  
        return _scsih_check_for_pending_tm(ioc, smid);
  }
@@@ -3837,7 -3837,7 +3837,7 @@@ _scsih_tm_tr_volume_send(struct MPT3SAS
        mpi_request->Function = MPI2_FUNCTION_SCSI_TASK_MGMT;
        mpi_request->DevHandle = cpu_to_le16(handle);
        mpi_request->TaskType = MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET;
-       ioc->put_smid_hi_priority(ioc, smid, 0);
+       mpt3sas_base_put_smid_hi_priority(ioc, smid, 0);
  }
  
  /**
@@@ -3929,7 -3929,7 +3929,7 @@@ _scsih_issue_delayed_event_ack(struct M
        ack_request->EventContext = event_context;
        ack_request->VF_ID = 0;  /* TODO */
        ack_request->VP_ID = 0;
-       ioc->put_smid_default(ioc, smid);
+       mpt3sas_base_put_smid_default(ioc, smid);
  }
  
  /**
@@@ -3986,7 -3986,7 +3986,7 @@@ _scsih_issue_delayed_sas_io_unit_ctrl(s
        mpi_request->Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL;
        mpi_request->Operation = MPI2_SAS_OP_REMOVE_DEVICE;
        mpi_request->DevHandle = handle;
-       ioc->put_smid_default(ioc, smid);
+       mpt3sas_base_put_smid_default(ioc, smid);
  }
  
  /**
@@@ -4715,12 -4715,12 +4715,12 @@@ scsih_qcmd(struct Scsi_Host *shost, str
                if (sas_target_priv_data->flags & MPT_TARGET_FASTPATH_IO) {
                        mpi_request->IoFlags = cpu_to_le16(scmd->cmd_len |
                            MPI25_SCSIIO_IOFLAGS_FAST_PATH);
-                       ioc->put_smid_fast_path(ioc, smid, handle);
+                       mpt3sas_base_put_smid_fast_path(ioc, smid, handle);
                } else
                        ioc->put_smid_scsi_io(ioc, smid,
                            le16_to_cpu(mpi_request->DevHandle));
        } else
-               ioc->put_smid_default(ioc, smid);
+               mpt3sas_base_put_smid_default(ioc, smid);
        return 0;
  
   out:
@@@ -7609,7 -7609,7 +7609,7 @@@ _scsih_ir_fastpath(struct MPT3SAS_ADAPT
            handle, phys_disk_num));
  
        init_completion(&ioc->scsih_cmds.done);
-       ioc->put_smid_default(ioc, smid);
+       mpt3sas_base_put_smid_default(ioc, smid);
        wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ);
  
        if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) {
@@@ -9700,7 -9700,7 +9700,7 @@@ _scsih_ir_shutdown(struct MPT3SAS_ADAPT
        if (!ioc->hide_ir_msg)
                pr_info(MPT3SAS_FMT "IR shutdown (sending)\n", ioc->name);
        init_completion(&ioc->scsih_cmds.done);
-       ioc->put_smid_default(ioc, smid);
+       mpt3sas_base_put_smid_default(ioc, smid);
        wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ);
  
        if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) {
@@@ -10346,6 -10346,7 +10346,7 @@@ _scsih_determine_hba_mpi_version(struc
        case MPI2_MFGPAGE_DEVID_SAS2308_1:
        case MPI2_MFGPAGE_DEVID_SAS2308_2:
        case MPI2_MFGPAGE_DEVID_SAS2308_3:
+       case MPI2_MFGPAGE_DEVID_SAS2308_MPI_EP:
                return MPI2_VERSION;
        case MPI25_MFGPAGE_DEVID_SAS3004:
        case MPI25_MFGPAGE_DEVID_SAS3008:
@@@ -10423,11 -10424,18 +10424,18 @@@ _scsih_probe(struct pci_dev *pdev, cons
                ioc->hba_mpi_version_belonged = hba_mpi_version;
                ioc->id = mpt2_ids++;
                sprintf(ioc->driver_name, "%s", MPT2SAS_DRIVER_NAME);
-               if (pdev->device == MPI2_MFGPAGE_DEVID_SSS6200) {
+               switch (pdev->device) {
+               case MPI2_MFGPAGE_DEVID_SSS6200:
                        ioc->is_warpdrive = 1;
                        ioc->hide_ir_msg = 1;
-               } else
+                       break;
+               case MPI2_MFGPAGE_DEVID_SAS2308_MPI_EP:
+                       ioc->is_mcpu_endpoint = 1;
+                       break;
+               default:
                        ioc->mfg_pg10_hide_flag = MFG_PAGE10_EXPOSE_ALL_DISKS;
+                       break;
+               }
                break;
        case MPI25_VERSION:
        case MPI26_VERSION:
        shost->transportt = mpt3sas_transport_template;
        shost->unique_id = ioc->id;
  
-       if (max_sectors != 0xFFFF) {
-               if (max_sectors < 64) {
-                       shost->max_sectors = 64;
-                       pr_warn(MPT3SAS_FMT "Invalid value %d passed " \
-                           "for max_sectors, range is 64 to 32767. Assigning "
-                           "value of 64.\n", ioc->name, max_sectors);
-               } else if (max_sectors > 32767) {
-                       shost->max_sectors = 32767;
-                       pr_warn(MPT3SAS_FMT "Invalid value %d passed " \
-                           "for max_sectors, range is 64 to 32767. Assigning "
-                           "default value of 32767.\n", ioc->name,
-                           max_sectors);
-               } else {
-                       shost->max_sectors = max_sectors & 0xFFFE;
-                       pr_info(MPT3SAS_FMT
+       if (ioc->is_mcpu_endpoint) {
+               /* mCPU MPI support 64K max IO */
+               shost->max_sectors = 128;
+               pr_info(MPT3SAS_FMT
                                "The max_sectors value is set to %d\n",
                                ioc->name, shost->max_sectors);
+       } else {
+               if (max_sectors != 0xFFFF) {
+                       if (max_sectors < 64) {
+                               shost->max_sectors = 64;
+                               pr_warn(MPT3SAS_FMT "Invalid value %d passed " \
+                                   "for max_sectors, range is 64 to 32767. " \
+                                   "Assigning value of 64.\n", \
+                                   ioc->name, max_sectors);
+                       } else if (max_sectors > 32767) {
+                               shost->max_sectors = 32767;
+                               pr_warn(MPT3SAS_FMT "Invalid value %d passed " \
+                                   "for max_sectors, range is 64 to 32767." \
+                                   "Assigning default value of 32767.\n", \
+                                   ioc->name, max_sectors);
+                       } else {
+                               shost->max_sectors = max_sectors & 0xFFFE;
+                               pr_info(MPT3SAS_FMT
+                                       "The max_sectors value is set to %d\n",
+                                       ioc->name, shost->max_sectors);
+                       }
                }
        }
        /* register EEDP capabilities with SCSI layer */
        if (prot_mask > 0)
                scsi_host_set_prot(shost, prot_mask);
@@@ -10856,6 -10872,8 +10872,8 @@@ static const struct pci_device_id mpt3s
                PCI_ANY_ID, PCI_ANY_ID },
        { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2308_3,
                PCI_ANY_ID, PCI_ANY_ID },
+       { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SAS2308_MPI_EP,
+               PCI_ANY_ID, PCI_ANY_ID },
        /* SSS6200 */
        { MPI2_MFGPAGE_VENDORID_LSI, MPI2_MFGPAGE_DEVID_SSS6200,
                PCI_ANY_ID, PCI_ANY_ID },
index 822d22336e15c503ff32411665a738b146d9838b,fb35d9e9491259645af380678e438a5ed37483bd..2bbf0bff0da0f80499e2e6eb52c611103a6f45b2
@@@ -397,7 -397,6 +397,6 @@@ static void qla_init_base_qpair(struct 
        ha->base_qpair->use_shadow_reg = IS_SHADOW_REG_CAPABLE(ha) ? 1 : 0;
        ha->base_qpair->msix = &ha->msix_entries[QLA_MSIX_RSP_Q];
        INIT_LIST_HEAD(&ha->base_qpair->hints_list);
-       INIT_LIST_HEAD(&ha->base_qpair->nvme_done_list);
        ha->base_qpair->enable_class_2 = ql2xenableclass2;
        /* init qpair to this cpu. Will adjust at run time. */
        qla_cpu_update(rsp->qpair, raw_smp_processor_id());
@@@ -496,7 -495,7 +495,7 @@@ static void qla2x00_free_rsp_que(struc
                return;
  
        if (IS_QLAFX00(ha)) {
-               if (rsp && rsp->ring)
+               if (rsp && rsp->ring_fx00)
                        dma_free_coherent(&ha->pdev->dev,
                            (rsp->length_fx00 + 1) * sizeof(request_t),
                            rsp->ring_fx00, rsp->dma_fx00);
@@@ -1744,7 -1743,7 +1743,7 @@@ __qla2x00_abort_all_cmds(struct qla_qpa
                                        sp_get(sp);
                                        spin_unlock_irqrestore(qp->qp_lock_ptr,
                                            flags);
-                                       qla_nvme_abort(ha, sp);
+                                       qla_nvme_abort(ha, sp, res);
                                        spin_lock_irqsave(qp->qp_lock_ptr,
                                            flags);
                                } else if (GET_CMD_SP(sp) &&
@@@ -4822,12 -4821,14 +4821,14 @@@ void qla24xx_create_new_sess(struct scs
                        fcport->d_id = e->u.new_sess.id;
                        fcport->flags |= FCF_FABRIC_DEVICE;
                        fcport->fw_login_state = DSC_LS_PLOGI_PEND;
-                       if (e->u.new_sess.fc4_type == FC4_TYPE_FCP_SCSI) {
+                       if (e->u.new_sess.fc4_type & FS_FC4TYPE_FCP)
                                fcport->fc4_type = FC4_TYPE_FCP_SCSI;
-                       } else if (e->u.new_sess.fc4_type == FC4_TYPE_NVME) {
+                       if (e->u.new_sess.fc4_type & FS_FC4TYPE_NVME) {
                                fcport->fc4_type = FC4_TYPE_OTHER;
                                fcport->fc4f_nvme = FC4_TYPE_NVME;
                        }
                        memcpy(fcport->port_name, e->u.new_sess.port_name,
                            WWN_SIZE);
                } else {
@@@ -5047,7 -5048,8 +5048,8 @@@ qla2x00_do_work(struct scsi_qla_host *v
                            e->u.logio.data);
                        break;
                case QLA_EVT_GPNFT:
-                       qla24xx_async_gpnft(vha, e->u.gpnft.fc4_type);
+                       qla24xx_async_gpnft(vha, e->u.gpnft.fc4_type,
+                           e->u.gpnft.sp);
                        break;
                case QLA_EVT_GPNFT_DONE:
                        qla24xx_async_gpnft_done(vha, e->u.iosb.sp);
@@@ -6830,7 -6832,7 +6832,7 @@@ static int qla2xxx_map_queues(struct Sc
        if (USER_CTRL_IRQ(vha->hw))
                rc = blk_mq_map_queues(&shost->tag_set);
        else
 -              rc = blk_mq_pci_map_queues(&shost->tag_set, vha->hw->pdev);
 +              rc = blk_mq_pci_map_queues(&shost->tag_set, vha->hw->pdev, 0);
        return rc;
  }
  
index 1cb353f18d0810500a58ee9e94eb067e86722f7e,26ce022dd6f420157c53fdc965c4bbe521224990..9ef5e3b810f6e0f9682c3577e61005af9658e999
@@@ -6,7 -6,7 +6,7 @@@
   *  anything out of the ordinary is seen.
   * ^^^^^^^^^^^^^^^^^^^^^^^ Original ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   *
-  * Copyright (C) 2001 - 2017 Douglas Gilbert
+  * Copyright (C) 2001 - 2018 Douglas Gilbert
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
@@@ -61,8 -61,8 +61,8 @@@
  #include "scsi_logging.h"
  
  /* make sure inq_product_rev string corresponds to this version */
- #define SDEBUG_VERSION "0187" /* format to fit INQUIRY revision field */
- static const char *sdebug_version_date = "20171202";
+ #define SDEBUG_VERSION "0188" /* format to fit INQUIRY revision field */
+ static const char *sdebug_version_date = "20180128";
  
  #define MY_NAME "scsi_debug"
  
  #define F_INV_OP              0x200
  #define F_FAKE_RW             0x400
  #define F_M_ACCESS            0x800   /* media access */
+ #define F_LONG_DELAY          0x1000
  
  #define FF_RESPOND (F_RL_WLUN_OK | F_SKIP_UA | F_DELAY_OVERR)
  #define FF_MEDIA_IO (F_M_ACCESS | F_FAKE_RW)
@@@ -349,7 -350,7 +350,7 @@@ enum sdeb_opcode_index 
        SDEB_I_XDWRITEREAD = 25,        /* 10 only */
        SDEB_I_WRITE_BUFFER = 26,
        SDEB_I_WRITE_SAME = 27,         /* 10, 16 */
-       SDEB_I_SYNC_CACHE = 28,         /* 10 only */
+       SDEB_I_SYNC_CACHE = 28,         /* 10, 16 */
        SDEB_I_COMP_WRITE = 29,
        SDEB_I_LAST_ELEMENT = 30,       /* keep this last (previous + 1) */
  };
@@@ -382,7 -383,7 +383,7 @@@ static const unsigned char opcode_ind_a
  /* 0x80; 0x80->0x9f: 16 byte cdbs */
        0, 0, 0, 0, 0, SDEB_I_ATA_PT, 0, 0,
        SDEB_I_READ, SDEB_I_COMP_WRITE, SDEB_I_WRITE, 0, 0, 0, 0, 0,
-       0, 0, 0, SDEB_I_WRITE_SAME, 0, 0, 0, 0,
+       0, SDEB_I_SYNC_CACHE, 0, SDEB_I_WRITE_SAME, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, SDEB_I_SERV_ACT_IN_16, SDEB_I_SERV_ACT_OUT_16,
  /* 0xa0; 0xa0->0xbf: 12 byte cdbs */
        SDEB_I_REPORT_LUNS, SDEB_I_ATA_PT, 0, SDEB_I_MAINT_IN,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };
  
+ /*
+  * The following "response" functions return the SCSI mid-level's 4 byte
+  * tuple-in-an-int. To handle commands with an IMMED bit, for a faster
+  * command completion, they can mask their return value with
+  * SDEG_RES_IMMED_MASK .
+  */
+ #define SDEG_RES_IMMED_MASK 0x40000000
  static int resp_inquiry(struct scsi_cmnd *, struct sdebug_dev_info *);
  static int resp_report_luns(struct scsi_cmnd *, struct sdebug_dev_info *);
  static int resp_requests(struct scsi_cmnd *, struct sdebug_dev_info *);
@@@ -420,6 -429,7 +429,7 @@@ static int resp_write_same_16(struct sc
  static int resp_xdwriteread_10(struct scsi_cmnd *, struct sdebug_dev_info *);
  static int resp_comp_write(struct scsi_cmnd *, struct sdebug_dev_info *);
  static int resp_write_buffer(struct scsi_cmnd *, struct sdebug_dev_info *);
+ static int resp_sync_cache(struct scsi_cmnd *, struct sdebug_dev_info *);
  
  /*
   * The following are overflow arrays for cdbs that "hit" the same index in
@@@ -499,6 -509,12 +509,12 @@@ static const struct opcode_info_t relea
            {6,  0x1f, 0xff, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
  };
  
+ static const struct opcode_info_t sync_cache_iarr[] = {
+       {0, 0x91, 0, F_LONG_DELAY | F_M_ACCESS, resp_sync_cache, NULL,
+           {16,  0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+            0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },     /* SYNC_CACHE (16) */
+ };
  
  /* This array is accessed via SDEB_I_* values. Make sure all are mapped,
   * plus the terminating elements for logic that scans this table such as
@@@ -536,8 -552,8 +552,8 @@@ static const struct opcode_info_t opcod
        {ARRAY_SIZE(write_iarr), 0x8a, 0, F_D_OUT | FF_MEDIA_IO,
            resp_write_dt0, write_iarr,                 /* WRITE(16) */
                {16,  0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-                0xff, 0xff, 0xff, 0xff, 0xff, 0xc7} },         /* WRITE(16) */
-       {0, 0x1b, 0, 0, resp_start_stop, NULL,          /* START STOP UNIT */
+                0xff, 0xff, 0xff, 0xff, 0xff, 0xc7} },
+       {0, 0x1b, 0, F_LONG_DELAY, resp_start_stop, NULL,/* START STOP UNIT */
            {6,  0x1, 0, 0xf, 0xf7, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
        {ARRAY_SIZE(sa_in_16_iarr), 0x9e, 0x10, F_SA_LOW | F_D_IN,
            resp_readcap16, sa_in_16_iarr, /* SA_IN(16), READ CAPACITY(16) */
            resp_write_same_10, write_same_iarr,        /* WRITE SAME(10) */
                {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0,
                 0, 0, 0, 0, 0} },
-       {0, 0x35, 0, F_DELAY_OVERR | FF_MEDIA_IO, NULL, NULL, /* SYNC_CACHE */
+       {ARRAY_SIZE(sync_cache_iarr), 0x35, 0, F_LONG_DELAY | F_M_ACCESS,
+           resp_sync_cache, sync_cache_iarr,
            {10,  0x7, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
-            0, 0, 0, 0} },
+            0, 0, 0, 0} },                     /* SYNC_CACHE (10) */
        {0, 0x89, 0, F_D_OUT | FF_MEDIA_IO, resp_comp_write, NULL,
            {16,  0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0,
             0, 0xff, 0x3f, 0xc7} },            /* COMPARE AND WRITE */
@@@ -616,6 -633,8 +633,8 @@@ static unsigned int sdebug_guard = DEF_
  static int sdebug_lowest_aligned = DEF_LOWEST_ALIGNED;
  static int sdebug_max_luns = DEF_MAX_LUNS;
  static int sdebug_max_queue = SDEBUG_CANQUEUE;        /* per submit queue */
+ static unsigned int sdebug_medium_error_start = OPT_MEDIUM_ERR_ADDR;
+ static int sdebug_medium_error_count = OPT_MEDIUM_ERR_NUM;
  static atomic_t retired_max_queue;    /* if > 0 then was prior max_queue */
  static int sdebug_ndelay = DEF_NDELAY;        /* if > 0 then unit is nanoseconds */
  static int sdebug_no_lun_0 = DEF_NO_LUN_0;
@@@ -649,7 -668,6 +668,6 @@@ static bool sdebug_any_injecting_opt
  static bool sdebug_verbose;
  static bool have_dif_prot;
  static bool sdebug_statistics = DEF_STATISTICS;
- static bool sdebug_mq_active;
  
  static unsigned int sdebug_store_sectors;
  static sector_t sdebug_capacity;      /* in sectors */
@@@ -1155,8 -1173,8 +1173,8 @@@ static int inquiry_vpd_84(unsigned cha
  static int inquiry_vpd_85(unsigned char *arr)
  {
        int num = 0;
-       const char * na1 = "https://www.kernel.org/config";
-       const char * na2 = "http://www.kernel.org/log";
+       const char *na1 = "https://www.kernel.org/config";
+       const char *na2 = "http://www.kernel.org/log";
        int plen, olen;
  
        arr[num++] = 0x1;       /* lu, storage config */
@@@ -1372,7 -1390,7 +1390,7 @@@ static int inquiry_vpd_b2(unsigned cha
  static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
  {
        unsigned char pq_pdt;
-       unsigned char * arr;
+       unsigned char *arr;
        unsigned char *cmd = scp->cmnd;
        int alloc_len, n, ret;
        bool have_wlun, is_disk;
  static unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
                                   0, 0, 0x0, 0x0};
  
- static int resp_requests(struct scsi_cmnd * scp,
-                        struct sdebug_dev_info * devip)
+ static int resp_requests(struct scsi_cmnd *scp,
+                        struct sdebug_dev_info *devip)
  {
-       unsigned char * sbuff;
+       unsigned char *sbuff;
        unsigned char *cmd = scp->cmnd;
        unsigned char arr[SCSI_SENSE_BUFFERSIZE];
        bool dsense;
        return fill_from_dev_buffer(scp, arr, len);
  }
  
- static int resp_start_stop(struct scsi_cmnd * scp,
-                          struct sdebug_dev_info * devip)
+ static int resp_start_stop(struct scsi_cmnd *scp,
+                          struct sdebug_dev_info *devip)
  {
        unsigned char *cmd = scp->cmnd;
        int power_cond, stop;
        }
        stop = !(cmd[4] & 1);
        atomic_xchg(&devip->stopped, stop);
-       return 0;
+       return (cmd[1] & 0x1) ? SDEG_RES_IMMED_MASK : 0; /* check IMMED bit */
  }
  
  static sector_t get_sdebug_capacity(void)
  }
  
  #define SDEBUG_READCAP_ARR_SZ 8
- static int resp_readcap(struct scsi_cmnd * scp,
-                       struct sdebug_dev_info * devip)
+ static int resp_readcap(struct scsi_cmnd *scp,
+                       struct sdebug_dev_info *devip)
  {
        unsigned char arr[SDEBUG_READCAP_ARR_SZ];
        unsigned int capac;
  }
  
  #define SDEBUG_READCAP16_ARR_SZ 32
- static int resp_readcap16(struct scsi_cmnd * scp,
-                         struct sdebug_dev_info * devip)
+ static int resp_readcap16(struct scsi_cmnd *scp,
+                         struct sdebug_dev_info *devip)
  {
        unsigned char *cmd = scp->cmnd;
        unsigned char arr[SDEBUG_READCAP16_ARR_SZ];
  
  #define SDEBUG_MAX_TGTPGS_ARR_SZ 1412
  
- static int resp_report_tgtpgs(struct scsi_cmnd * scp,
-                             struct sdebug_dev_info * devip)
+ static int resp_report_tgtpgs(struct scsi_cmnd *scp,
+                             struct sdebug_dev_info *devip)
  {
        unsigned char *cmd = scp->cmnd;
-       unsigned char * arr;
+       unsigned char *arr;
        int host_no = devip->sdbg_host->shost->host_no;
        int n, ret, alen, rlen;
        int port_group_a, port_group_b, port_a, port_b;
@@@ -1926,7 -1944,7 +1944,7 @@@ static int resp_rsup_tmfs(struct scsi_c
  
  /* <<Following mode page info copied from ST318451LW>> */
  
- static int resp_err_recov_pg(unsigned char * p, int pcontrol, int target)
+ static int resp_err_recov_pg(unsigned char *p, int pcontrol, int target)
  {     /* Read-Write Error Recovery page for mode_sense */
        unsigned char err_recov_pg[] = {0x1, 0xa, 0xc0, 11, 240, 0, 0, 0,
                                        5, 0, 0xff, 0xff};
        return sizeof(err_recov_pg);
  }
  
- static int resp_disconnect_pg(unsigned char * p, int pcontrol, int target)
+ static int resp_disconnect_pg(unsigned char *p, int pcontrol, int target)
  {     /* Disconnect-Reconnect page for mode_sense */
        unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
                                         0, 0, 0, 0, 0, 0, 0, 0};
        return sizeof(disconnect_pg);
  }
  
- static int resp_format_pg(unsigned char * p, int pcontrol, int target)
+ static int resp_format_pg(unsigned char *p, int pcontrol, int target)
  {       /* Format device page for mode_sense */
        unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
                                     0, 0, 0, 0, 0, 0, 0, 0,
@@@ -1968,7 -1986,7 +1986,7 @@@ static unsigned char caching_pg[] = {0x
                                     0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,
                                     0, 0, 0, 0};
  
- static int resp_caching_pg(unsigned char * p, int pcontrol, int target)
+ static int resp_caching_pg(unsigned char *p, int pcontrol, int target)
  {     /* Caching page for mode_sense */
        unsigned char ch_caching_pg[] = {/* 0x8, 18, */ 0x4, 0, 0, 0, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  static unsigned char ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
                                    0, 0, 0x2, 0x4b};
  
- static int resp_ctrl_m_pg(unsigned char * p, int pcontrol, int target)
+ static int resp_ctrl_m_pg(unsigned char *p, int pcontrol, int target)
  {     /* Control mode page for mode_sense */
        unsigned char ch_ctrl_m_pg[] = {/* 0xa, 10, */ 0x6, 0, 0, 0, 0, 0,
                                        0, 0, 0, 0};
  }
  
  
- static int resp_iec_m_pg(unsigned char * p, int pcontrol, int target)
+ static int resp_iec_m_pg(unsigned char *p, int pcontrol, int target)
  {     /* Informational Exceptions control mode page for mode_sense */
        unsigned char ch_iec_m_pg[] = {/* 0x1c, 0xa, */ 0x4, 0xf, 0, 0, 0, 0,
                                       0, 0, 0x0, 0x0};
        return sizeof(iec_m_pg);
  }
  
- static int resp_sas_sf_m_pg(unsigned char * p, int pcontrol, int target)
+ static int resp_sas_sf_m_pg(unsigned char *p, int pcontrol, int target)
  {     /* SAS SSP mode page - short format for mode_sense */
        unsigned char sas_sf_m_pg[] = {0x19, 0x6,
                0x6, 0x0, 0x7, 0xd0, 0x0, 0x0};
  }
  
  
- static int resp_sas_pcd_m_spg(unsigned char * p, int pcontrol, int target,
+ static int resp_sas_pcd_m_spg(unsigned char *p, int pcontrol, int target,
                              int target_dev_id)
  {     /* SAS phy control and discover mode page for mode_sense */
        unsigned char sas_pcd_m_pg[] = {0x59, 0x1, 0, 0x64, 0, 0x6, 0, 2,
        return sizeof(sas_pcd_m_pg);
  }
  
- static int resp_sas_sha_m_spg(unsigned char * p, int pcontrol)
+ static int resp_sas_sha_m_spg(unsigned char *p, int pcontrol)
  {     /* SAS SSP shared protocol specific port mode subpage */
        unsigned char sas_sha_m_pg[] = {0x59, 0x2, 0, 0xc, 0, 0x6, 0x10, 0,
                    0, 0, 0, 0, 0, 0, 0, 0,
@@@ -2093,7 -2111,7 +2111,7 @@@ static int resp_mode_sense(struct scsi_
        unsigned char dev_spec;
        int alloc_len, offset, len, target_dev_id;
        int target = scp->device->id;
-       unsigned char * ap;
+       unsigned char *ap;
        unsigned char arr[SDEBUG_MAX_MSENSE_SZ];
        unsigned char *cmd = scp->cmnd;
        bool dbd, llbaa, msense_6, is_disk, bad_pcode;
@@@ -2324,7 -2342,7 +2342,7 @@@ set_mode_changed_ua
        return 0;
  }
  
- static int resp_temp_l_pg(unsigned char * arr)
+ static int resp_temp_l_pg(unsigned char *arr)
  {
        unsigned char temp_l_pg[] = {0x0, 0x0, 0x3, 0x2, 0x0, 38,
                                     0x0, 0x1, 0x3, 0x2, 0x0, 65,
        return sizeof(temp_l_pg);
  }
  
- static int resp_ie_l_pg(unsigned char * arr)
+ static int resp_ie_l_pg(unsigned char *arr)
  {
        unsigned char ie_l_pg[] = {0x0, 0x0, 0x3, 0x3, 0x0, 0x0, 38,
                };
@@@ -2712,8 -2730,8 +2730,8 @@@ static int resp_read_dt0(struct scsi_cm
        }
  
        if (unlikely((SDEBUG_OPT_MEDIUM_ERR & sdebug_opts) &&
-                    (lba <= (OPT_MEDIUM_ERR_ADDR + OPT_MEDIUM_ERR_NUM - 1)) &&
-                    ((lba + num) > OPT_MEDIUM_ERR_ADDR))) {
+                    (lba <= (sdebug_medium_error_start + sdebug_medium_error_count - 1)) &&
+                    ((lba + num) > sdebug_medium_error_start))) {
                /* claim unrecoverable read error */
                mk_sense_buffer(scp, MEDIUM_ERROR, UNRECOVERED_READ_ERR, 0);
                /* set info field and valid bit for fixed descriptor */
@@@ -3562,6 -3580,27 +3580,27 @@@ static int resp_get_lba_status(struct s
        return fill_from_dev_buffer(scp, arr, SDEBUG_GET_LBA_STATUS_LEN);
  }
  
+ static int resp_sync_cache(struct scsi_cmnd *scp,
+                          struct sdebug_dev_info *devip)
+ {
+       u64 lba;
+       u32 num_blocks;
+       u8 *cmd = scp->cmnd;
+       if (cmd[0] == SYNCHRONIZE_CACHE) {      /* 10 byte cdb */
+               lba = get_unaligned_be32(cmd + 2);
+               num_blocks = get_unaligned_be16(cmd + 7);
+       } else {                                /* SYNCHRONIZE_CACHE(16) */
+               lba = get_unaligned_be64(cmd + 2);
+               num_blocks = get_unaligned_be32(cmd + 10);
+       }
+       if (lba + num_blocks > sdebug_capacity) {
+               mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
+               return check_condition_result;
+       }
+       return (cmd[1] & 0x2) ? SDEG_RES_IMMED_MASK : 0; /* check IMMED bit */
+ }
  #define RL_BUCKET_ELEMS 8
  
  /* Even though each pseudo target has a REPORT LUNS "well known logical unit"
@@@ -3727,20 -3766,13 +3766,13 @@@ static int resp_xdwriteread_10(struct s
  
  static struct sdebug_queue *get_queue(struct scsi_cmnd *cmnd)
  {
-       struct sdebug_queue *sqp = sdebug_q_arr;
+       u32 tag = blk_mq_unique_tag(cmnd->request);
+       u16 hwq = blk_mq_unique_tag_to_hwq(tag);
  
-       if (sdebug_mq_active) {
-               u32 tag = blk_mq_unique_tag(cmnd->request);
-               u16 hwq = blk_mq_unique_tag_to_hwq(tag);
-               if (unlikely(hwq >= submit_queues)) {
-                       pr_warn("Unexpected hwq=%d, apply modulo\n", hwq);
-                       hwq %= submit_queues;
-               }
-               pr_debug("tag=%u, hwq=%d\n", tag, hwq);
-               return sqp + hwq;
-       } else
-               return sqp;
+       pr_debug("tag=%#x, hwq=%d\n", tag, hwq);
+       if (WARN_ON_ONCE(hwq >= submit_queues))
+               hwq = 0;
+       return sdebug_q_arr + hwq;
  }
  
  /* Queued (deferred) command completions converge here. */
@@@ -3897,7 -3929,7 +3929,7 @@@ static int scsi_debug_slave_alloc(struc
        if (sdebug_verbose)
                pr_info("slave_alloc <%u %u %u %llu>\n",
                       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
 -      queue_flag_set_unlocked(QUEUE_FLAG_BIDI, sdp->request_queue);
 +      blk_queue_flag_set(QUEUE_FLAG_BIDI, sdp->request_queue);
        return 0;
  }
  
@@@ -4066,7 -4098,7 +4098,7 @@@ static int scsi_debug_abort(struct scsi
        return SUCCESS;
  }
  
- static int scsi_debug_device_reset(struct scsi_cmnd * SCpnt)
+ static int scsi_debug_device_reset(struct scsi_cmnd *SCpnt)
  {
        ++num_dev_resets;
        if (SCpnt && SCpnt->device) {
@@@ -4118,7 -4150,7 +4150,7 @@@ lie
        return SUCCESS;
  }
  
- static int scsi_debug_bus_reset(struct scsi_cmnd * SCpnt)
+ static int scsi_debug_bus_reset(struct scsi_cmnd *SCpnt)
  {
        struct sdebug_host_info *sdbg_host;
        struct sdebug_dev_info *devip;
@@@ -4151,9 -4183,9 +4183,9 @@@ lie
        return SUCCESS;
  }
  
- static int scsi_debug_host_reset(struct scsi_cmnd * SCpnt)
+ static int scsi_debug_host_reset(struct scsi_cmnd *SCpnt)
  {
-       struct sdebug_host_info * sdbg_host;
+       struct sdebug_host_info *sdbg_host;
        struct sdebug_dev_info *devip;
        int k = 0;
  
  static void __init sdebug_build_parts(unsigned char *ramp,
                                      unsigned long store_size)
  {
-       struct partition * pp;
+       struct partition *pp;
        int starts[SDEBUG_MAX_PARTS + 2];
        int sectors_per_part, num_sectors, k;
        int heads_by_sects, start_sec, end_sec;
@@@ -4262,8 -4294,13 +4294,13 @@@ static void clear_queue_stats(void
  static void setup_inject(struct sdebug_queue *sqp,
                         struct sdebug_queued_cmd *sqcp)
  {
-       if ((atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) > 0)
+       if ((atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) > 0) {
+               if (sdebug_every_nth > 0)
+                       sqcp->inj_recovered = sqcp->inj_transport
+                               = sqcp->inj_dif
+                               = sqcp->inj_dix = sqcp->inj_short = 0;
                return;
+       }
        sqcp->inj_recovered = !!(SDEBUG_OPT_RECOVERED_ERR & sdebug_opts);
        sqcp->inj_transport = !!(SDEBUG_OPT_TRANSPORT_ERR & sdebug_opts);
        sqcp->inj_dif = !!(SDEBUG_OPT_DIF_ERR & sdebug_opts);
   * SCSI_MLQUEUE_HOST_BUSY if temporarily out of resources.
   */
  static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
-                        int scsi_result, int delta_jiff, int ndelay)
+                        int scsi_result,
+                        int (*pfp)(struct scsi_cmnd *,
+                                   struct sdebug_dev_info *),
+                        int delta_jiff, int ndelay)
  {
        unsigned long iflags;
        int k, num_in_q, qdepth, inject;
        }
        sdp = cmnd->device;
  
-       if (unlikely(sdebug_verbose && scsi_result))
-               sdev_printk(KERN_INFO, sdp, "%s: non-zero result=0x%x\n",
-                           __func__, scsi_result);
        if (delta_jiff == 0)
                goto respond_in_thread;
  
        sqcp = &sqp->qc_arr[k];
        sqcp->a_cmnd = cmnd;
        cmnd->host_scribble = (unsigned char *)sqcp;
-       cmnd->result = scsi_result;
        sd_dp = sqcp->sd_dp;
        spin_unlock_irqrestore(&sqp->qc_lock, iflags);
        if (unlikely(sdebug_every_nth && sdebug_any_injecting_opt))
                if (sd_dp == NULL)
                        return SCSI_MLQUEUE_HOST_BUSY;
        }
+       cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0;
+       if (cmnd->result & SDEG_RES_IMMED_MASK) {
+               /*
+                * This is the F_DELAY_OVERR case. No delay.
+                */
+               cmnd->result &= ~SDEG_RES_IMMED_MASK;
+               delta_jiff = ndelay = 0;
+       }
+       if (cmnd->result == 0 && scsi_result != 0)
+               cmnd->result = scsi_result;
+       if (unlikely(sdebug_verbose && cmnd->result))
+               sdev_printk(KERN_INFO, sdp, "%s: non-zero result=0x%x\n",
+                           __func__, cmnd->result);
        if (delta_jiff > 0 || ndelay > 0) {
                ktime_t kt;
  
        return 0;
  
  respond_in_thread:    /* call back to mid-layer using invocation thread */
-       cmnd->result = scsi_result;
+       cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0;
+       cmnd->result &= ~SDEG_RES_IMMED_MASK;
+       if (cmnd->result == 0 && scsi_result != 0)
+               cmnd->result = scsi_result;
        cmnd->scsi_done(cmnd);
        return 0;
  }
@@@ -4440,6 -4495,8 +4495,8 @@@ module_param_named(lbprz, sdebug_lbprz
  module_param_named(lowest_aligned, sdebug_lowest_aligned, int, S_IRUGO);
  module_param_named(max_luns, sdebug_max_luns, int, S_IRUGO | S_IWUSR);
  module_param_named(max_queue, sdebug_max_queue, int, S_IRUGO | S_IWUSR);
+ module_param_named(medium_error_start, sdebug_medium_error_start, int, S_IRUGO | S_IWUSR);
+ module_param_named(medium_error_count, sdebug_medium_error_count, int, S_IRUGO | S_IWUSR);
  module_param_named(ndelay, sdebug_ndelay, int, S_IRUGO | S_IWUSR);
  module_param_named(no_lun_0, sdebug_no_lun_0, int, S_IRUGO | S_IWUSR);
  module_param_named(no_uld, sdebug_no_uld, int, S_IRUGO);
@@@ -4497,6 -4554,8 +4554,8 @@@ MODULE_PARM_DESC(lbprz
  MODULE_PARM_DESC(lowest_aligned, "lowest aligned lba (def=0)");
  MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
  MODULE_PARM_DESC(max_queue, "max number of queued commands (1 to max(def))");
+ MODULE_PARM_DESC(medium_error_start, "starting sector number to return MEDIUM error");
+ MODULE_PARM_DESC(medium_error_count, "count of sectors to return follow on MEDIUM error");
  MODULE_PARM_DESC(ndelay, "response delay in nanoseconds (def=0 -> ignore)");
  MODULE_PARM_DESC(no_lun_0, "no LU number 0 (def=0 -> have lun 0)");
  MODULE_PARM_DESC(no_uld, "stop ULD (e.g. sd driver) attaching (def=0))");
@@@ -4526,7 -4585,7 +4585,7 @@@ MODULE_PARM_DESC(write_same_length, "Ma
  #define SDEBUG_INFO_LEN 256
  static char sdebug_info[SDEBUG_INFO_LEN];
  
- static const char * scsi_debug_info(struct Scsi_Host * shp)
+ static const char *scsi_debug_info(struct Scsi_Host *shp)
  {
        int k;
  
@@@ -4587,9 -4646,8 +4646,8 @@@ static int scsi_debug_show_info(struct 
                   num_host_resets);
        seq_printf(m, "dix_reads=%d, dix_writes=%d, dif_errors=%d\n",
                   dix_reads, dix_writes, dif_errors);
-       seq_printf(m, "usec_in_jiffy=%lu, %s=%d, mq_active=%d\n",
-                  TICK_NSEC / 1000, "statistics", sdebug_statistics,
-                  sdebug_mq_active);
+       seq_printf(m, "usec_in_jiffy=%lu, statistics=%d\n", TICK_NSEC / 1000,
+                  sdebug_statistics);
        seq_printf(m, "cmnd_count=%d, completions=%d, %s=%d, a_tsf=%d\n",
                   atomic_read(&sdebug_cmnd_count),
                   atomic_read(&sdebug_completions),
@@@ -5450,7 -5508,7 +5508,7 @@@ static void __exit scsi_debug_exit(void
  device_initcall(scsi_debug_init);
  module_exit(scsi_debug_exit);
  
- static void sdebug_release_adapter(struct device * dev)
+ static void sdebug_release_adapter(struct device *dev)
  {
        struct sdebug_host_info *sdbg_host;
  
@@@ -5588,6 -5646,7 +5646,7 @@@ static int scsi_debug_queuecommand(stru
        struct sdebug_dev_info *devip;
        u8 *cmd = scp->cmnd;
        int (*r_pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
+       int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *) = NULL;
        int k, na;
        int errsts = 0;
        u32 flags;
                                n += scnprintf(b + n, sb - n, "%02x ",
                                               (u32)cmd[k]);
                }
-               if (sdebug_mq_active)
-                       sdev_printk(KERN_INFO, sdp, "%s: tag=%u, cmd %s\n",
-                                   my_name, blk_mq_unique_tag(scp->request),
-                                   b);
-               else
-                       sdev_printk(KERN_INFO, sdp, "%s: cmd %s\n", my_name,
-                                   b);
+               sdev_printk(KERN_INFO, sdp, "%s: tag=%#x, cmd %s\n", my_name,
+                           blk_mq_unique_tag(scp->request), b);
        }
        if (fake_host_busy(scp))
                return SCSI_MLQUEUE_HOST_BUSY;
                        return 0;       /* ignore command: make trouble */
        }
        if (likely(oip->pfp))
-               errsts = oip->pfp(scp, devip);  /* calls a resp_* function */
-       else if (r_pfp) /* if leaf function ptr NULL, try the root's */
-               errsts = r_pfp(scp, devip);
+               pfp = oip->pfp; /* calls a resp_* function */
+       else
+               pfp = r_pfp;    /* if leaf function ptr NULL, try the root's */
  
  fini:
        if (F_DELAY_OVERR & flags)
-               return schedule_resp(scp, devip, errsts, 0, 0);
-       else
-               return schedule_resp(scp, devip, errsts, sdebug_jdelay,
+               return schedule_resp(scp, devip, errsts, pfp, 0, 0);
+       else if ((sdebug_jdelay || sdebug_ndelay) && (flags & F_LONG_DELAY)) {
+               /*
+                * If any delay is active, want F_LONG_DELAY to be at least 1
+                * second and if sdebug_jdelay>0 want a long delay of that
+                * many seconds.
+                */
+               int jdelay = (sdebug_jdelay < 2) ? 1 : sdebug_jdelay;
+               jdelay = mult_frac(USER_HZ * jdelay, HZ, USER_HZ);
+               return schedule_resp(scp, devip, errsts, pfp, jdelay, 0);
+       } else
+               return schedule_resp(scp, devip, errsts, pfp, sdebug_jdelay,
                                     sdebug_ndelay);
  check_cond:
-       return schedule_resp(scp, devip, check_condition_result, 0, 0);
+       return schedule_resp(scp, devip, check_condition_result, NULL, 0, 0);
  err_out:
-       return schedule_resp(scp, NULL, DID_NO_CONNECT << 16, 0, 0);
+       return schedule_resp(scp, NULL, DID_NO_CONNECT << 16, NULL, 0, 0);
  }
  
  static struct scsi_host_template sdebug_driver_template = {
        .track_queue_depth =    1,
  };
  
- static int sdebug_driver_probe(struct device * dev)
+ static int sdebug_driver_probe(struct device *dev)
  {
        int error = 0;
        struct sdebug_host_info *sdbg_host;
        }
        /* Decide whether to tell scsi subsystem that we want mq */
        /* Following should give the same answer for each host */
-       sdebug_mq_active = shost_use_blk_mq(hpnt) && (submit_queues > 1);
-       if (sdebug_mq_active)
+       if (shost_use_blk_mq(hpnt))
                hpnt->nr_hw_queues = submit_queues;
  
        sdbg_host->shost = hpnt;
        return error;
  }
  
- static int sdebug_driver_remove(struct device * dev)
+ static int sdebug_driver_remove(struct device *dev)
  {
        struct sdebug_host_info *sdbg_host;
        struct sdebug_dev_info *sdbg_devinfo, *tmp;
diff --combined drivers/scsi/scsi_lib.c
index ed79d3925860ce9e81f1b4e99c0d3d8b3368d578,1d83f29aee740a4c971017d388e3233bdd2112f5..0dfec0dedd5e4abd1f1a510a5d12077770dde134
@@@ -191,7 -191,19 +191,19 @@@ static void __scsi_queue_insert(struct 
         */
        cmd->result = 0;
        if (q->mq_ops) {
-               scsi_mq_requeue_cmd(cmd);
+               /*
+                * Before a SCSI command is dispatched,
+                * get_device(&sdev->sdev_gendev) is called and the host,
+                * target and device busy counters are increased. Since
+                * requeuing a request causes these actions to be repeated and
+                * since scsi_device_unbusy() has already been called,
+                * put_device(&device->sdev_gendev) must still be called. Call
+                * put_device() after blk_mq_requeue_request() to avoid that
+                * removal of the SCSI device can start before requeueing has
+                * happened.
+                */
+               blk_mq_requeue_request(cmd->request, true);
+               put_device(&device->sdev_gendev);
                return;
        }
        spin_lock_irqsave(q->queue_lock, flags);
@@@ -858,6 -870,17 +870,17 @@@ void scsi_io_completion(struct scsi_cmn
                /* for passthrough error may be set */
                error = BLK_STS_OK;
        }
+       /*
+        * Another corner case: the SCSI status byte is non-zero but 'good'.
+        * Example: PRE-FETCH command returns SAM_STAT_CONDITION_MET when
+        * it is able to fit nominated LBs in its cache (and SAM_STAT_GOOD
+        * if it can't fit). Treat SAM_STAT_CONDITION_MET and the related
+        * intermediate statuses (both obsolete in SAM-4) as good.
+        */
+       if (status_byte(result) && scsi_status_is_good(result)) {
+               result = 0;
+               error = BLK_STS_OK;
+       }
  
        /*
         * special case: failed zero length commands always need to
@@@ -2144,6 -2167,8 +2167,6 @@@ void __scsi_init_queue(struct Scsi_Hos
  {
        struct device *dev = shost->dma_dev;
  
 -      queue_flag_set_unlocked(QUEUE_FLAG_SCSI_PASSTHROUGH, q);
 -
        /*
         * this limit is imposed by hardware restrictions
         */
@@@ -2225,7 -2250,7 +2248,7 @@@ struct request_queue *scsi_old_alloc_qu
        struct Scsi_Host *shost = sdev->host;
        struct request_queue *q;
  
 -      q = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE);
 +      q = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE, NULL);
        if (!q)
                return NULL;
        q->cmd_size = sizeof(struct scsi_cmnd) + shost->hostt->cmd_size;
        }
  
        __scsi_init_queue(shost, q);
 +      blk_queue_flag_set(QUEUE_FLAG_SCSI_PASSTHROUGH, q);
        blk_queue_prep_rq(q, scsi_prep_fn);
        blk_queue_unprep_rq(q, scsi_unprep_fn);
        blk_queue_softirq_done(q, scsi_softirq_done);
@@@ -2273,7 -2297,6 +2296,7 @@@ struct request_queue *scsi_mq_alloc_que
  
        sdev->request_queue->queuedata = sdev;
        __scsi_init_queue(sdev->host, sdev->request_queue);
 +      blk_queue_flag_set(QUEUE_FLAG_SCSI_PASSTHROUGH, sdev->request_queue);
        return sdev->request_queue;
  }
  
@@@ -2611,7 -2634,7 +2634,7 @@@ scsi_test_unit_ready(struct scsi_devic
        /* try to eat the UNIT_ATTENTION if there are enough retries */
        do {
                result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, sshdr,
-                                         timeout, retries, NULL);
+                                         timeout, 1, NULL);
                if (sdev->removable && scsi_sense_valid(sshdr) &&
                    sshdr->sense_key == UNIT_ATTENTION)
                        sdev->changed = 1;
index 7142c8be1099631d777cac585ca343c0ba247209,e56a4ac990c082ebc886d0352a204ee3da931a0f..1e36c9a9ad17df678529e13bf0dfc0f888a3c35e
@@@ -1292,7 -1292,8 +1292,7 @@@ int scsi_sysfs_add_sdev(struct scsi_dev
        transport_add_device(&sdev->sdev_gendev);
        sdev->is_visible = 1;
  
 -      error = bsg_register_queue(rq, &sdev->sdev_gendev, NULL, NULL);
 -
 +      error = bsg_scsi_register_queue(rq, &sdev->sdev_gendev);
        if (error)
                /* we're treating error on bsg register as non-fatal,
                 * so pretend nothing went wrong */
                }
        }
  
+       if (sdev->host->hostt->sdev_groups) {
+               error = sysfs_create_groups(&sdev->sdev_gendev.kobj,
+                               sdev->host->hostt->sdev_groups);
+               if (error)
+                       return error;
+       }
        scsi_autopm_put_device(sdev);
        return error;
  }
@@@ -1348,6 -1356,10 +1355,10 @@@ void __scsi_remove_device(struct scsi_d
                if (res != 0)
                        return;
  
+               if (sdev->host->hostt->sdev_groups)
+                       sysfs_remove_groups(&sdev->sdev_gendev.kobj,
+                                       sdev->host->hostt->sdev_groups);
                bsg_unregister_queue(sdev->request_queue);
                device_unregister(&sdev->sdev_dev);
                transport_remove_device(dev);
index 10c94011c8a83e051d30d37d2e6c7514d64128cf,879f92881cc8110ad28836d1d347387dc676a6bf..592b6dbf8b3592396152aee2af597f32f4512b09
  #define BUILD_TIMESTAMP
  #endif
  
- #define DRIVER_VERSION                "1.1.2-126"
+ #define DRIVER_VERSION                "1.1.4-115"
  #define DRIVER_MAJOR          1
  #define DRIVER_MINOR          1
- #define DRIVER_RELEASE                2
- #define DRIVER_REVISION               126
+ #define DRIVER_RELEASE                4
+ #define DRIVER_REVISION               115
  
  #define DRIVER_NAME           "Microsemi PQI Driver (v" \
                                DRIVER_VERSION BUILD_TIMESTAMP ")"
@@@ -3898,29 -3898,6 +3898,6 @@@ static int pqi_validate_device_capabili
        return 0;
  }
  
- static int pqi_delete_operational_queue(struct pqi_ctrl_info *ctrl_info,
-       bool inbound_queue, u16 queue_id)
- {
-       struct pqi_general_admin_request request;
-       struct pqi_general_admin_response response;
-       memset(&request, 0, sizeof(request));
-       request.header.iu_type = PQI_REQUEST_IU_GENERAL_ADMIN;
-       put_unaligned_le16(PQI_GENERAL_ADMIN_IU_LENGTH,
-               &request.header.iu_length);
-       if (inbound_queue)
-               request.function_code =
-                       PQI_GENERAL_ADMIN_FUNCTION_DELETE_IQ;
-       else
-               request.function_code =
-                       PQI_GENERAL_ADMIN_FUNCTION_DELETE_OQ;
-       put_unaligned_le16(queue_id,
-               &request.data.delete_operational_queue.queue_id);
-       return pqi_submit_admin_request_synchronous(ctrl_info, &request,
-               &response);
- }
  static int pqi_create_event_queue(struct pqi_ctrl_info *ctrl_info)
  {
        int rc;
@@@ -4038,7 -4015,7 +4015,7 @@@ static int pqi_create_queue_group(struc
        if (rc) {
                dev_err(&ctrl_info->pci_dev->dev,
                        "error creating inbound AIO queue\n");
-               goto delete_inbound_queue_raid;
+               return rc;
        }
  
        queue_group->iq_pi[AIO_PATH] = ctrl_info->iomem_base +
        if (rc) {
                dev_err(&ctrl_info->pci_dev->dev,
                        "error changing queue property\n");
-               goto delete_inbound_queue_aio;
+               return rc;
        }
  
        /*
        if (rc) {
                dev_err(&ctrl_info->pci_dev->dev,
                        "error creating outbound queue\n");
-               goto delete_inbound_queue_aio;
+               return rc;
        }
  
        queue_group->oq_ci = ctrl_info->iomem_base +
                        &response.data.create_operational_oq.oq_ci_offset);
  
        return 0;
- delete_inbound_queue_aio:
-       pqi_delete_operational_queue(ctrl_info, true,
-               queue_group->iq_id[AIO_PATH]);
- delete_inbound_queue_raid:
-       pqi_delete_operational_queue(ctrl_info, true,
-               queue_group->iq_id[RAID_PATH]);
-       return rc;
  }
  
  static int pqi_create_queues(struct pqi_ctrl_info *ctrl_info)
@@@ -5348,7 -5315,7 +5315,7 @@@ static int pqi_map_queues(struct Scsi_H
  {
        struct pqi_ctrl_info *ctrl_info = shost_to_hba(shost);
  
 -      return blk_mq_pci_map_queues(&shost->tag_set, ctrl_info->pci_dev);
 +      return blk_mq_pci_map_queues(&shost->tag_set, ctrl_info->pci_dev, 0);
  }
  
  static int pqi_getpciinfo_ioctl(struct pqi_ctrl_info *ctrl_info,
@@@ -6795,6 -6762,14 +6762,14 @@@ static __maybe_unused int pqi_resume(st
  
  /* Define the PCI IDs for the controllers that we support. */
  static const struct pci_device_id pqi_pci_id_table[] = {
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              0x105b, 0x1211)
+       },
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              0x105b, 0x1321)
+       },
        {
                PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
                               0x152d, 0x8a22)
                PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
                               0x152d, 0x8a37)
        },
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              0x193d, 0x8460)
+       },
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              0x193d, 0x8461)
+       },
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              0x193d, 0xf460)
+       },
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              0x193d, 0xf461)
+       },
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              0x1bd4, 0x0045)
+       },
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              0x1bd4, 0x0046)
+       },
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              0x1bd4, 0x0047)
+       },
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              0x1bd4, 0x0048)
+       },
        {
                PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
                               PCI_VENDOR_ID_ADAPTEC2, 0x0110)
                PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
                               PCI_VENDOR_ID_ADAPTEC2, 0x1281)
        },
+       {
+               PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
+                              PCI_VENDOR_ID_ADAPTEC2, 0x1282)
+       },
        {
                PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f,
                               PCI_VENDOR_ID_ADAPTEC2, 0x1300)