Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 8 May 2019 17:12:46 +0000 (10:12 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 8 May 2019 17:12:46 +0000 (10:12 -0700)
Pull SCSI updates from James Bottomley:
 "This is mostly update of the usual drivers: qla2xxx, qedf, smartpqi,
  hpsa, lpfc, ufs, mpt3sas, ibmvfc and hisi_sas. Plus number of minor
  changes, spelling fixes and other trivia"

* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (298 commits)
  scsi: qla2xxx: Avoid that lockdep complains about unsafe locking in tcm_qla2xxx_close_session()
  scsi: qla2xxx: Avoid that qlt_send_resp_ctio() corrupts memory
  scsi: qla2xxx: Fix hardirq-unsafe locking
  scsi: qla2xxx: Complain loudly about reference count underflow
  scsi: qla2xxx: Use __le64 instead of uint32_t[2] for sending DMA addresses to firmware
  scsi: qla2xxx: Introduce the dsd32 and dsd64 data structures
  scsi: qla2xxx: Check the size of firmware data structures at compile time
  scsi: qla2xxx: Pass little-endian values to the firmware
  scsi: qla2xxx: Fix race conditions in the code for aborting SCSI commands
  scsi: qla2xxx: Use an on-stack completion in qla24xx_control_vp()
  scsi: qla2xxx: Make qla24xx_async_abort_cmd() static
  scsi: qla2xxx: Remove unnecessary locking from the target code
  scsi: qla2xxx: Remove qla_tgt_cmd.released
  scsi: qla2xxx: Complain if a command is released that is owned by the firmware
  scsi: qla2xxx: target: Fix offline port handling and host reset handling
  scsi: qla2xxx: Fix abort handling in tcm_qla2xxx_write_pending()
  scsi: qla2xxx: Fix error handling in qlt_alloc_qfull_cmd()
  scsi: qla2xxx: Simplify qlt_send_term_imm_notif()
  scsi: qla2xxx: Fix use-after-free issues in qla2xxx_qpair_sp_free_dma()
  scsi: qla2xxx: Fix a qla24xx_enable_msix() error path
  ...

12 files changed:
1  2 
Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt
MAINTAINERS
drivers/nvme/host/fc.c
drivers/scsi/aic7xxx/aic7xxx_core.c
drivers/scsi/megaraid/megaraid_sas_base.c
drivers/scsi/megaraid/megaraid_sas_fusion.c
drivers/scsi/mpt3sas/mpt3sas_base.c
drivers/scsi/qedi/qedi_fw.c
drivers/scsi/scsi_lib.c
drivers/scsi/ufs/Kconfig
drivers/scsi/ufs/ufs-qcom.c
drivers/scsi/virtio_scsi.c

@@@ -31,7 -31,6 +31,6 @@@ Optional properties
  - vcc-max-microamp      : specifies max. load that can be drawn from vcc supply
  - vccq-max-microamp     : specifies max. load that can be drawn from vccq supply
  - vccq2-max-microamp    : specifies max. load that can be drawn from vccq2 supply
- - <name>-fixed-regulator : boolean property specifying that <name>-supply is a fixed regulator
  
  - clocks                : List of phandle and clock specifier pairs
  - clock-names           : List of clock input name strings sorted in the same
@@@ -50,8 -49,6 +49,8 @@@
  -lanes-per-direction  : number of lanes available per direction - either 1 or 2.
                          Note that it is assume same number of lanes is used both
                          directions at once. If not specified, default is 2 lanes per direction.
 +- #reset-cells                : Must be <1> for Qualcomm UFS controllers that expose
 +                        PHY reset from the UFS controller.
  - resets            : reset node register
  - reset-names       : describe reset node register, the "rst" corresponds to reset the whole UFS IP.
  
@@@ -65,7 -62,6 +64,6 @@@ Example
                interrupts = <0 28 0>;
  
                vdd-hba-supply = <&xxx_reg0>;
-               vdd-hba-fixed-regulator;
                vcc-supply = <&xxx_reg1>;
                vcc-supply-1p8;
                vccq-supply = <&xxx_reg2>;
@@@ -81,5 -77,4 +79,5 @@@
                reset-names = "rst";
                phys = <&ufsphy1>;
                phy-names = "ufsphy";
 +              #reset-cells = <1>;
        };
diff --combined MAINTAINERS
@@@ -268,13 -268,12 +268,13 @@@ L:      linux-gpio@vger.kernel.or
  S:    Maintained
  F:    drivers/gpio/gpio-104-idio-16.c
  
 -ACCES 104-QUAD-8 IIO DRIVER
 +ACCES 104-QUAD-8 DRIVER
  M:    William Breathitt Gray <vilhelm.gray@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-bus-counter-104-quad-8
  F:    Documentation/ABI/testing/sysfs-bus-iio-counter-104-quad-8
 -F:    drivers/iio/counter/104-quad-8.c
 +F:    drivers/counter/104-quad-8.c
  
  ACCES PCI-IDIO-16 GPIO DRIVER
  M:    William Breathitt Gray <vilhelm.gray@gmail.com>
@@@ -469,7 -468,7 +469,7 @@@ ADM1025 HARDWARE MONITOR DRIVE
  M:    Jean Delvare <jdelvare@suse.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/adm1025
 +F:    Documentation/hwmon/adm1025.rst
  F:    drivers/hwmon/adm1025.c
  
  ADM1029 HARDWARE MONITOR DRIVER
@@@ -521,7 -520,7 +521,7 @@@ ADS1015 HARDWARE MONITOR DRIVE
  M:    Dirk Eibach <eibach@gdsys.de>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/ads1015
 +F:    Documentation/hwmon/ads1015.rst
  F:    drivers/hwmon/ads1015.c
  F:    include/linux/platform_data/ads1015.h
  
@@@ -534,7 -533,7 +534,7 @@@ ADT7475 HARDWARE MONITOR DRIVE
  M:    Jean Delvare <jdelvare@suse.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/adt7475
 +F:    Documentation/hwmon/adt7475.rst
  F:    drivers/hwmon/adt7475.c
  
  ADVANSYS SCSI DRIVER
@@@ -765,7 -764,7 +765,7 @@@ AMD FAM15H PROCESSOR POWER MONITORING D
  M:    Huang Rui <ray.huang@amd.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Supported
 -F:    Documentation/hwmon/fam15h_power
 +F:    Documentation/hwmon/fam15h_power.rst
  F:    drivers/hwmon/fam15h_power.c
  
  AMD FCH GPIO DRIVER
@@@ -869,7 -868,7 +869,7 @@@ L: linux-iio@vger.kernel.or
  W:    http://ez.analog.com/community/linux-device-drivers
  S:    Supported
  F:    drivers/iio/adc/ad7606.c
 -F:    Documentation/devicetree/bindings/iio/adc/ad7606.txt
 +F:    Documentation/devicetree/bindings/iio/adc/adi,ad7606.txt
  
  ANALOG DEVICES INC AD7768-1 DRIVER
  M:    Stefan Popa <stefan.popa@analog.com>
@@@ -951,7 -950,6 +951,7 @@@ F: drivers/dma/dma-axi-dmac.
  ANALOG DEVICES INC IIO DRIVERS
  M:    Lars-Peter Clausen <lars@metafoo.de>
  M:    Michael Hennerich <Michael.Hennerich@analog.com>
 +M:    Stefan Popa <stefan.popa@analog.com>
  W:    http://wiki.analog.com/
  W:    http://ez.analog.com/community/linux-device-drivers
  S:    Supported
@@@ -1895,15 -1893,14 +1895,15 @@@ T:   git git://git.kernel.org/pub/scm/lin
  ARM/NUVOTON NPCM ARCHITECTURE
  M:    Avi Fishman <avifishman70@gmail.com>
  M:    Tomer Maimon <tmaimon77@gmail.com>
 +M:    Tali Perry <tali.perry1@gmail.com>
  R:    Patrick Venture <venture@google.com>
  R:    Nancy Yuen <yuenn@google.com>
 -R:    Brendan Higgins <brendanhiggins@google.com>
 +R:    Benjamin Fair <benjaminfair@google.com>
  L:    openbmc@lists.ozlabs.org (moderated for non-subscribers)
  S:    Supported
  F:    arch/arm/mach-npcm/
  F:    arch/arm/boot/dts/nuvoton-npcm*
 -F:    include/dt-bindings/clock/nuvoton,npcm7xx-clks.h
 +F:    include/dt-bindings/clock/nuvoton,npcm7xx-clock.h
  F:    drivers/*/*npcm*
  F:    Documentation/devicetree/bindings/*/*npcm*
  F:    Documentation/devicetree/bindings/*/*/*npcm*
@@@ -2359,7 -2356,7 +2359,7 @@@ F:      arch/arm/mm/cache-uniphier.
  F:    arch/arm64/boot/dts/socionext/uniphier*
  F:    drivers/bus/uniphier-system-bus.c
  F:    drivers/clk/uniphier/
 -F:    drivers/dmaengine/uniphier-mdmac.c
 +F:    drivers/dma/uniphier-mdmac.c
  F:    drivers/gpio/gpio-uniphier.c
  F:    drivers/i2c/busses/i2c-uniphier*
  F:    drivers/irqchip/irq-uniphier-aidet.c
@@@ -2515,7 -2512,7 +2515,7 @@@ ASC7621 HARDWARE MONITOR DRIVE
  M:    George Joseph <george.joseph@fairview5.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/asc7621
 +F:    Documentation/hwmon/asc7621.rst
  F:    drivers/hwmon/asc7621.c
  
  ASPEED VIDEO ENGINE DRIVER
@@@ -2796,13 -2793,10 +2796,13 @@@ M:   Simon Wunderlich <sw@simonwunderlich
  M:    Antonio Quartulli <a@unstable.cc>
  L:    b.a.t.m.a.n@lists.open-mesh.org (moderated for non-subscribers)
  W:    https://www.open-mesh.org/
 +B:    https://www.open-mesh.org/projects/batman-adv/issues
 +C:    irc://chat.freenode.net/batman
  Q:    https://patchwork.open-mesh.org/project/batman/list/
 +T:    git https://git.open-mesh.org/linux-merge.git
  S:    Maintained
 -F:    Documentation/ABI/testing/sysfs-class-net-batman-adv
 -F:    Documentation/ABI/testing/sysfs-class-net-mesh
 +F:    Documentation/ABI/obsolete/sysfs-class-net-batman-adv
 +F:    Documentation/ABI/obsolete/sysfs-class-net-mesh
  F:    Documentation/networking/batman-adv.rst
  F:    include/uapi/linux/batadv_packet.h
  F:    include/uapi/linux/batman_adv.h
@@@ -3126,7 -3120,6 +3126,7 @@@ F:      drivers/cpufreq/bmips-cpufreq.
  BROADCOM BMIPS MIPS ARCHITECTURE
  M:    Kevin Cernekee <cernekee@gmail.com>
  M:    Florian Fainelli <f.fainelli@gmail.com>
 +L:    bcm-kernel-feedback-list@broadcom.com
  L:    linux-mips@vger.kernel.org
  T:    git git://github.com/broadcom/stblinux.git
  S:    Maintained
@@@ -3803,7 -3796,6 +3803,7 @@@ M:      Richard Fitzgerald <rf@opensource.ci
  L:    patches@opensource.cirrus.com
  S:    Supported
  F:    drivers/clk/clk-lochnagar.c
 +F:    drivers/hwmon/lochnagar-hwmon.c
  F:    drivers/mfd/lochnagar-i2c.c
  F:    drivers/pinctrl/cirrus/pinctrl-lochnagar.c
  F:    drivers/regulator/lochnagar-regulator.c
@@@ -3812,10 -3804,8 +3812,10 @@@ F:    include/dt-bindings/pinctrl/lochnaga
  F:    include/linux/mfd/lochnagar*
  F:    Documentation/devicetree/bindings/mfd/cirrus,lochnagar.txt
  F:    Documentation/devicetree/bindings/clock/cirrus,lochnagar.txt
 +F:    Documentation/devicetree/bindings/hwmon/cirrus,lochnagar.txt
  F:    Documentation/devicetree/bindings/pinctrl/cirrus,lochnagar.txt
  F:    Documentation/devicetree/bindings/regulator/cirrus,lochnagar.txt
 +F:    Documentation/hwmon/lochnagar
  
  CISCO FCOE HBA DRIVER
  M:    Satish Kharat <satishkh@cisco.com>
@@@ -4053,7 -4043,7 +4053,7 @@@ CORETEMP HARDWARE MONITORING DRIVE
  M:    Fenghua Yu <fenghua.yu@intel.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/coretemp
 +F:    Documentation/hwmon/coretemp.rst
  F:    drivers/hwmon/coretemp.c
  
  COSA/SRP SYNC SERIAL DRIVER
@@@ -4062,16 -4052,6 +4062,16 @@@ W:    http://www.fi.muni.cz/~kas/cosa
  S:    Maintained
  F:    drivers/net/wan/cosa*
  
 +COUNTER SUBSYSTEM
 +M:    William Breathitt Gray <vilhelm.gray@gmail.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-bus-counter*
 +F:    Documentation/driver-api/generic-counter.rst
 +F:    drivers/counter/
 +F:    include/linux/counter.h
 +F:    include/linux/counter_enum.h
 +
  CPMAC ETHERNET DRIVER
  M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    netdev@vger.kernel.org
@@@ -4149,7 -4129,7 +4149,7 @@@ F:      drivers/cpuidle/
  F:    include/linux/cpuidle.h
  
  CRAMFS FILESYSTEM
 -M:    Nicolas Pitre <nico@linaro.org>
 +M:    Nicolas Pitre <nico@fluxnic.net>
  S:    Maintained
  F:    Documentation/filesystems/cramfs.txt
  F:    fs/cramfs/
@@@ -4571,7 -4551,6 +4571,7 @@@ S:      Maintaine
  F:    drivers/devfreq/
  F:    include/linux/devfreq.h
  F:    Documentation/devicetree/bindings/devfreq/
 +F:    include/trace/events/devfreq.h
  
  DEVICE FREQUENCY EVENT (DEVFREQ-EVENT)
  M:    Chanwoo Choi <cw00.choi@samsung.com>
@@@ -4619,7 -4598,7 +4619,7 @@@ DIALOG SEMICONDUCTOR DRIVER
  M:    Support Opensource <support.opensource@diasemi.com>
  W:    http://www.dialog-semiconductor.com/products
  S:    Supported
 -F:    Documentation/hwmon/da90??
 +F:    Documentation/hwmon/da90??.rst
  F:    Documentation/devicetree/bindings/mfd/da90*.txt
  F:    Documentation/devicetree/bindings/input/da90??-onkey.txt
  F:    Documentation/devicetree/bindings/thermal/da90??-thermal.txt
@@@ -4770,7 -4749,7 +4770,7 @@@ DME1737 HARDWARE MONITOR DRIVE
  M:    Juerg Haefliger <juergh@gmail.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/dme1737
 +F:    Documentation/hwmon/dme1737.rst
  F:    drivers/hwmon/dme1737.c
  
  DMI/SMBIOS SUPPORT
@@@ -5617,12 -5596,6 +5617,12 @@@ L:    linux-edac@vger.kernel.or
  S:    Maintained
  F:    drivers/edac/ghes_edac.c
  
 +EDAC-I10NM
 +M:    Tony Luck <tony.luck@intel.com>
 +L:    linux-edac@vger.kernel.org
 +S:    Maintained
 +F:    drivers/edac/i10nm_base.c
 +
  EDAC-I3000
  L:    linux-edac@vger.kernel.org
  S:    Orphan
@@@ -5704,7 -5677,7 +5704,7 @@@ EDAC-SKYLAK
  M:    Tony Luck <tony.luck@intel.com>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
 -F:    drivers/edac/skx_edac.c
 +F:    drivers/edac/skx_*.c
  
  EDAC-TI
  M:    Tero Kristo <t-kristo@ti.com>
@@@ -5860,7 -5833,7 +5860,7 @@@ L:      netdev@vger.kernel.or
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-mdio
  F:    Documentation/devicetree/bindings/net/mdio*
 -F:    Documentation/networking/phy.txt
 +F:    Documentation/networking/phy.rst
  F:    drivers/net/phy/
  F:    drivers/of/of_mdio.c
  F:    drivers/of/of_net.c
@@@ -5962,7 -5935,7 +5962,7 @@@ F71805F HARDWARE MONITORING DRIVE
  M:    Jean Delvare <jdelvare@suse.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/f71805f
 +F:    Documentation/hwmon/f71805f.rst
  F:    drivers/hwmon/f71805f.c
  
  FADDR2LINE
@@@ -6435,6 -6408,7 +6435,6 @@@ L:      linux-kernel@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core
  S:    Maintained
  F:    kernel/futex.c
 -F:    kernel/futex_compat.c
  F:    include/asm-generic/futex.h
  F:    include/linux/futex.h
  F:    include/uapi/linux/futex.h
@@@ -6487,7 -6461,7 +6487,7 @@@ S:      Maintaine
  F:    drivers/media/radio/radio-gemtek*
  
  GENERIC GPIO I2C DRIVER
 -M:    Haavard Skinnemoen <hskinnemoen@gmail.com>
 +M:    Wolfram Sang <wsa+renesas@sang-engineering.com>
  S:    Supported
  F:    drivers/i2c/busses/i2c-gpio.c
  F:    include/linux/platform_data/i2c-gpio.h
@@@ -6619,7 -6593,7 +6619,7 @@@ M:      Andy Shevchenko <andriy.shevchenko@l
  L:    linux-gpio@vger.kernel.org
  L:    linux-acpi@vger.kernel.org
  S:    Maintained
 -F:    Documentation/acpi/gpio-properties.txt
 +F:    Documentation/firmware-guide/acpi/gpio-properties.rst
  F:    drivers/gpio/gpiolib-acpi.c
  
  GPIO IR Transmitter
@@@ -7359,6 -7333,7 +7359,6 @@@ F:      Documentation/devicetree/bindings/i3
  F:    Documentation/driver-api/i3c
  F:    drivers/i3c/
  F:    include/linux/i3c/
 -F:    include/dt-bindings/i3c/
  
  I3C DRIVER FOR SYNOPSYS DESIGNWARE
  M:    Vitor Soares <vitor.soares@synopsys.com>
@@@ -7541,7 -7516,7 +7541,7 @@@ F:      include/net/mac802154.
  F:    include/net/af_ieee802154.h
  F:    include/net/cfg802154.h
  F:    include/net/ieee802154_netdev.h
 -F:    Documentation/networking/ieee802154.txt
 +F:    Documentation/networking/ieee802154.rst
  
  IFE PROTOCOL
  M:    Yotam Gigi <yotam.gi@gmail.com>
@@@ -7643,7 -7618,7 +7643,7 @@@ INA209 HARDWARE MONITOR DRIVE
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/ina209
 +F:    Documentation/hwmon/ina209.rst
  F:    Documentation/devicetree/bindings/hwmon/ina2xx.txt
  F:    drivers/hwmon/ina209.c
  
@@@ -7651,7 -7626,7 +7651,7 @@@ INA2XX HARDWARE MONITOR DRIVE
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/ina2xx
 +F:    Documentation/hwmon/ina2xx.rst
  F:    drivers/hwmon/ina2xx.c
  F:    include/linux/platform_data/ina2xx.h
  
@@@ -8071,7 -8046,6 +8071,7 @@@ F:      drivers/gpio/gpio-intel-mid.
  
  INTERCONNECT API
  M:    Georgi Djakov <georgi.djakov@linaro.org>
 +L:    linux-pm@vger.kernel.org
  S:    Maintained
  F:    Documentation/interconnect/
  F:    Documentation/devicetree/bindings/interconnect/
@@@ -8122,16 -8096,6 +8122,16 @@@ F:    include/linux/iommu.
  F:    include/linux/of_iommu.h
  F:    include/linux/iova.h
  
 +IO_URING
 +M:    Jens Axboe <axboe@kernel.dk>
 +L:    linux-block@vger.kernel.org
 +L:    linux-fsdevel@vger.kernel.org
 +T:    git git://git.kernel.dk/linux-block
 +T:    git git://git.kernel.dk/liburing
 +S:    Maintained
 +F:    fs/io_uring.c
 +F:    include/uapi/linux/io_uring.h
 +
  IP MASQUERADING
  M:    Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
  S:    Maintained
@@@ -8280,7 -8244,7 +8280,7 @@@ IT87 HARDWARE MONITORING DRIVE
  M:    Jean Delvare <jdelvare@suse.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/it87
 +F:    Documentation/hwmon/it87.rst
  F:    drivers/hwmon/it87.c
  
  IT913X MEDIA DRIVER
@@@ -8324,7 -8288,7 +8324,7 @@@ M:      Guenter Roeck <linux@roeck-us.net
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
  F:    drivers/hwmon/jc42.c
 -F:    Documentation/hwmon/jc42
 +F:    Documentation/hwmon/jc42.rst
  
  JFS FILESYSTEM
  M:    Dave Kleikamp <shaggy@kernel.org>
@@@ -8372,14 -8336,14 +8372,14 @@@ K10TEMP HARDWARE MONITORING DRIVE
  M:    Clemens Ladisch <clemens@ladisch.de>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/k10temp
 +F:    Documentation/hwmon/k10temp.rst
  F:    drivers/hwmon/k10temp.c
  
  K8TEMP HARDWARE MONITORING DRIVER
  M:    Rudolf Marek <r.marek@assembler.cz>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/k8temp
 +F:    Documentation/hwmon/k8temp.rst
  F:    drivers/hwmon/k8temp.c
  
  KASAN
@@@ -8734,7 -8698,6 +8734,7 @@@ F:      scripts/leaking_addresses.p
  LED SUBSYSTEM
  M:    Jacek Anaszewski <jacek.anaszewski@gmail.com>
  M:    Pavel Machek <pavel@ucw.cz>
 +R:    Dan Murphy <dmurphy@ti.com>
  L:    linux-leds@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds.git
  S:    Maintained
@@@ -9020,7 -8983,7 +9020,7 @@@ R:      Daniel Lustig <dlustig@nvidia.com
  L:    linux-kernel@vger.kernel.org
  L:    linux-arch@vger.kernel.org
  S:    Supported
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev
  F:    tools/memory-model/
  F:    Documentation/atomic_bitops.txt
  F:    Documentation/atomic_t.txt
@@@ -9071,21 -9034,21 +9071,21 @@@ LM78 HARDWARE MONITOR DRIVE
  M:    Jean Delvare <jdelvare@suse.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/lm78
 +F:    Documentation/hwmon/lm78.rst
  F:    drivers/hwmon/lm78.c
  
  LM83 HARDWARE MONITOR DRIVER
  M:    Jean Delvare <jdelvare@suse.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/lm83
 +F:    Documentation/hwmon/lm83.rst
  F:    drivers/hwmon/lm83.c
  
  LM90 HARDWARE MONITOR DRIVER
  M:    Jean Delvare <jdelvare@suse.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/lm90
 +F:    Documentation/hwmon/lm90.rst
  F:    Documentation/devicetree/bindings/hwmon/lm90.txt
  F:    drivers/hwmon/lm90.c
  F:    include/dt-bindings/thermal/lm90.h
@@@ -9094,7 -9057,7 +9094,7 @@@ LM95234 HARDWARE MONITOR DRIVE
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/lm95234
 +F:    Documentation/hwmon/lm95234.rst
  F:    drivers/hwmon/lm95234.c
  
  LME2510 MEDIA DRIVER
@@@ -9126,6 -9089,7 +9126,6 @@@ F:      arch/*/include/asm/spinlock*.
  F:    include/linux/rwlock*.h
  F:    include/linux/mutex*.h
  F:    include/linux/rwsem*.h
 -F:    arch/*/include/asm/rwsem.h
  F:    include/linux/seqlock.h
  F:    lib/locking*.[ch]
  F:    kernel/locking/
@@@ -9167,7 -9131,7 +9167,7 @@@ LTC4261 HARDWARE MONITOR DRIVE
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/ltc4261
 +F:    Documentation/hwmon/ltc4261.rst
  F:    drivers/hwmon/ltc4261.c
  
  LTC4306 I2C MULTIPLEXER DRIVER
@@@ -9398,7 -9362,7 +9398,7 @@@ MAX16065 HARDWARE MONITOR DRIVE
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/max16065
 +F:    Documentation/hwmon/max16065.rst
  F:    drivers/hwmon/max16065.c
  
  MAX2175 SDR TUNER DRIVER
@@@ -9414,14 -9378,14 +9414,14 @@@ F:   include/uapi/linux/max2175.
  MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
  L:    linux-hwmon@vger.kernel.org
  S:    Orphan
 -F:    Documentation/hwmon/max6650
 +F:    Documentation/hwmon/max6650.rst
  F:    drivers/hwmon/max6650.c
  
  MAX6697 HARDWARE MONITOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/max6697
 +F:    Documentation/hwmon/max6697.rst
  F:    Documentation/devicetree/bindings/hwmon/max6697.txt
  F:    drivers/hwmon/max6697.c
  F:    include/linux/platform_data/max6697.h
@@@ -9433,13 -9397,6 +9433,13 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/sound/max9860.txt
  F:    sound/soc/codecs/max9860.*
  
 +MAXBOTIX ULTRASONIC RANGER IIO DRIVER
 +M:    Andreas Klinger <ak@it-klinger.de>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/proximity/maxbotix,mb1232.txt
 +F:    drivers/iio/proximity/mb1232.c
 +
  MAXIM MAX77802 PMIC REGULATOR DEVICE DRIVER
  M:    Javier Martinez Canillas <javier@dowhile0.org>
  L:    linux-kernel@vger.kernel.org
@@@ -9808,17 -9765,9 +9808,17 @@@ F:    drivers/media/platform/mtk-vpu
  F:    Documentation/devicetree/bindings/media/mediatek-vcodec.txt
  F:    Documentation/devicetree/bindings/media/mediatek-vpu.txt
  
 +MEDIATEK MMC/SD/SDIO DRIVER
 +M:    Chaotian Jing <chaotian.jing@mediatek.com>
 +S:    Maintained
 +F:    drivers/mmc/host/mtk-sd.c
 +F:    Documentation/devicetree/bindings/mmc/mtk-sd.txt
 +
  MEDIATEK MT76 WIRELESS LAN DRIVER
  M:    Felix Fietkau <nbd@nbd.name>
  M:    Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
 +R:    Ryder Lee <ryder.lee@mediatek.com>
 +R:    Roy Luo <royluo@google.com>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
  F:    drivers/net/wireless/mediatek/mt76/
@@@ -9917,6 -9866,15 +9917,6 @@@ F:     drivers/net/ethernet/mellanox/mlx5/c
  F:    drivers/net/ethernet/mellanox/mlx5/core/fpga/*
  F:    include/linux/mlx5/mlx5_ifc_fpga.h
  
 -MELLANOX ETHERNET INNOVA IPSEC DRIVER
 -R:    Boris Pismenny <borisp@mellanox.com>
 -L:    netdev@vger.kernel.org
 -S:    Supported
 -W:    http://www.mellanox.com
 -Q:    http://patchwork.ozlabs.org/project/netdev/list/
 -F:    drivers/net/ethernet/mellanox/mlx5/core/en_ipsec/*
 -F:    drivers/net/ethernet/mellanox/mlx5/core/ipsec*
 -
  MELLANOX ETHERNET SWITCH DRIVERS
  M:    Jiri Pirko <jiri@mellanox.com>
  M:    Ido Schimmel <idosch@mellanox.com>
@@@ -10073,7 -10031,7 +10073,7 @@@ F:   drivers/mfd/menf21bmc.
  F:    drivers/watchdog/menf21bmc_wdt.c
  F:    drivers/leds/leds-menf21bmc.c
  F:    drivers/hwmon/menf21bmc_hwmon.c
 -F:    Documentation/hwmon/menf21bmc
 +F:    Documentation/hwmon/menf21bmc.rst
  
  MEN Z069 WATCHDOG DRIVER
  M:    Johannes Thumshirn <jth@kernel.org>
@@@ -10177,7 -10135,7 +10177,7 @@@ F:   drivers/spi/spi-at91-usart.
  F:    Documentation/devicetree/bindings/mfd/atmel-usart.txt
  
  MICROCHIP KSZ SERIES ETHERNET SWITCH DRIVER
 -M:    Woojung Huh <Woojung.Huh@microchip.com>
 +M:    Woojung Huh <woojung.huh@microchip.com>
  M:    Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
@@@ -10466,7 -10424,7 +10466,7 @@@ F:   include/uapi/linux/meye.
  MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD
  M:    Jiri Slaby <jirislaby@gmail.com>
  S:    Maintained
 -F:    Documentation/serial/moxa-smartio
 +F:    Documentation/serial/moxa-smartio.rst
  F:    drivers/tty/mxser.*
  
  MR800 AVERMEDIA USB FM RADIO DRIVER
@@@ -10701,7 -10659,7 +10701,7 @@@ NCT6775 HARDWARE MONITOR DRIVE
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/nct6775
 +F:    Documentation/hwmon/nct6775.rst
  F:    drivers/hwmon/nct6775.c
  
  NET_FAILOVER MODULE
@@@ -10779,7 -10737,6 +10779,7 @@@ L:   linux-block@vger.kernel.or
  L:    nbd@other.debian.org
  F:    Documentation/blockdev/nbd.txt
  F:    drivers/block/nbd.c
 +F:    include/trace/events/nbd.h
  F:    include/uapi/linux/nbd.h
  
  NETWORK DROP MONITOR
@@@ -11150,16 -11107,6 +11150,16 @@@ F: Documentation/ABI/stable/sysfs-bus-n
  F:    include/linux/nvmem-consumer.h
  F:    include/linux/nvmem-provider.h
  
 +NXP FXAS21002C DRIVER
 +M:    Rui Miguel Silva <rmfrfs@gmail.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/gyroscope/fxas21002c.txt
 +F:    drivers/iio/gyro/fxas21002c_core.c
 +F:    drivers/iio/gyro/fxas21002c.h
 +F:    drivers/iio/gyro/fxas21002c_i2c.c
 +F:    drivers/iio/gyro/fxas21002c_spi.c
 +
  NXP SGTL5000 DRIVER
  M:    Fabio Estevam <festevam@gmail.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
@@@ -11167,12 -11114,6 +11167,12 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/sound/sgtl5000.txt
  F:    sound/soc/codecs/sgtl5000*
  
 +NXP SJA1105 ETHERNET SWITCH DRIVER
 +M:    Vladimir Oltean <olteanv@gmail.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/dsa/sja1105
 +
  NXP TDA998X DRM DRIVER
  M:    Russell King <linux@armlinux.org.uk>
  S:    Maintained
@@@ -11726,14 -11667,6 +11726,14 @@@ L: linux-i2c@vger.kernel.or
  S:    Orphan
  F:    drivers/i2c/busses/i2c-pasemi.c
  
 +PACKING
 +M:    Vladimir Oltean <olteanv@gmail.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    lib/packing.c
 +F:    include/linux/packing.h
 +F:    Documentation/packing.txt
 +
  PADATA PARALLEL EXECUTION MECHANISM
  M:    Steffen Klassert <steffen.klassert@secunet.com>
  L:    linux-crypto@vger.kernel.org
@@@ -11820,7 -11753,7 +11820,7 @@@ PC87360 HARDWARE MONITORING DRIVE
  M:    Jim Cromie <jim.cromie@gmail.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/pc87360
 +F:    Documentation/hwmon/pc87360.rst
  F:    drivers/hwmon/pc87360.c
  
  PC8736x GPIO DRIVER
@@@ -11832,7 -11765,7 +11832,7 @@@ PC87427 HARDWARE MONITORING DRIVE
  M:    Jean Delvare <jdelvare@suse.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/pc87427
 +F:    Documentation/hwmon/pc87427.rst
  F:    drivers/hwmon/pc87427.c
  
  PCA9532 LED DRIVER
@@@ -12232,7 -12165,6 +12232,7 @@@ F:   arch/*/kernel/*/*/perf_event*.
  F:    arch/*/include/asm/perf_event.h
  F:    arch/*/kernel/perf_callchain.c
  F:    arch/*/events/*
 +F:    arch/*/events/*/*
  F:    tools/perf/
  
  PERSONALITY HANDLING
@@@ -12401,23 -12333,23 +12401,23 @@@ S:        Maintaine
  F:    Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt
  F:    Documentation/devicetree/bindings/hwmon/max31785.txt
  F:    Documentation/devicetree/bindings/hwmon/ltc2978.txt
 -F:    Documentation/hwmon/adm1275
 -F:    Documentation/hwmon/ibm-cffps
 -F:    Documentation/hwmon/ir35221
 -F:    Documentation/hwmon/lm25066
 -F:    Documentation/hwmon/ltc2978
 -F:    Documentation/hwmon/ltc3815
 -F:    Documentation/hwmon/max16064
 -F:    Documentation/hwmon/max20751
 -F:    Documentation/hwmon/max31785
 -F:    Documentation/hwmon/max34440
 -F:    Documentation/hwmon/max8688
 -F:    Documentation/hwmon/pmbus
 -F:    Documentation/hwmon/pmbus-core
 -F:    Documentation/hwmon/tps40422
 -F:    Documentation/hwmon/ucd9000
 -F:    Documentation/hwmon/ucd9200
 -F:    Documentation/hwmon/zl6100
 +F:    Documentation/hwmon/adm1275.rst
 +F:    Documentation/hwmon/ibm-cffps.rst
 +F:    Documentation/hwmon/ir35221.rst
 +F:    Documentation/hwmon/lm25066.rst
 +F:    Documentation/hwmon/ltc2978.rst
 +F:    Documentation/hwmon/ltc3815.rst
 +F:    Documentation/hwmon/max16064.rst
 +F:    Documentation/hwmon/max20751.rst
 +F:    Documentation/hwmon/max31785.rst
 +F:    Documentation/hwmon/max34440.rst
 +F:    Documentation/hwmon/max8688.rst
 +F:    Documentation/hwmon/pmbus.rst
 +F:    Documentation/hwmon/pmbus-core.rst
 +F:    Documentation/hwmon/tps40422.rst
 +F:    Documentation/hwmon/ucd9000.rst
 +F:    Documentation/hwmon/ucd9200.rst
 +F:    Documentation/hwmon/zl6100.rst
  F:    drivers/hwmon/pmbus/
  F:    include/linux/pmbus.h
  
@@@ -12473,7 -12405,7 +12473,7 @@@ M:   Mark Rutland <mark.rutland@arm.com
  M:    Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
  L:    linux-arm-kernel@lists.infradead.org
  S:    Maintained
 -F:    drivers/firmware/psci*.c
 +F:    drivers/firmware/psci/
  F:    include/linux/psci.h
  F:    include/uapi/linux/psci.h
  
@@@ -12681,7 -12613,7 +12681,7 @@@ M:   Bartlomiej Zolnierkiewicz <b.zolnier
  L:    linux-hwmon@vger.kernel.org
  S:    Supported
  F:    Documentation/devicetree/bindings/hwmon/pwm-fan.txt
 -F:    Documentation/hwmon/pwm-fan
 +F:    Documentation/hwmon/pwm-fan.rst
  F:    drivers/hwmon/pwm-fan.c
  
  PWM IR Transmitter
@@@ -13099,9 -13031,9 +13099,9 @@@ M:   Josh Triplett <josh@joshtriplett.org
  R:    Steven Rostedt <rostedt@goodmis.org>
  R:    Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  R:    Lai Jiangshan <jiangshanlai@gmail.com>
 -L:    linux-kernel@vger.kernel.org
 +L:    rcu@vger.kernel.org
  S:    Supported
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev
  F:    tools/testing/selftests/rcutorture
  
  RDC R-321X SoC
@@@ -13147,10 -13079,10 +13147,10 @@@ R:        Steven Rostedt <rostedt@goodmis.org
  R:    Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  R:    Lai Jiangshan <jiangshanlai@gmail.com>
  R:    Joel Fernandes <joel@joelfernandes.org>
 -L:    linux-kernel@vger.kernel.org
 +L:    rcu@vger.kernel.org
  W:    http://www.rdrop.com/users/paulmck/RCU/
  S:    Supported
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev
  F:    Documentation/RCU/
  X:    Documentation/RCU/torture.txt
  F:    include/linux/rcu*
@@@ -13376,7 -13308,7 +13376,7 @@@ ROCKETPORT DRIVE
  P:    Comtrol Corp.
  W:    http://www.comtrol.com
  S:    Maintained
 -F:    Documentation/serial/rocket.txt
 +F:    Documentation/serial/rocket.rst
  F:    drivers/tty/rocket*
  
  ROCKETPORT EXPRESS/INFINITY DRIVER
@@@ -13460,12 -13392,6 +13460,12 @@@ T: git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    drivers/net/wireless/realtek/rtlwifi/
  
 +REALTEK WIRELESS DRIVER (rtw88)
 +M:    Yan-Hsuan Chuang <yhchuang@realtek.com>
 +L:    linux-wireless@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/wireless/realtek/rtw88/
 +
  RTL8XXXU WIRELESS DRIVER (rtl8xxxu)
  M:    Jes Sorensen <Jes.Sorensen@gmail.com>
  L:    linux-wireless@vger.kernel.org
@@@ -14011,7 -13937,7 +14011,7 @@@ W:   https://selinuxproject.or
  W:    https://github.com/SELinuxProject
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux.git
  S:    Supported
 -F:    include/linux/selinux*
 +F:    include/uapi/linux/selinux_netlink.h
  F:    security/selinux/
  F:    scripts/selinux/
  F:    Documentation/admin-guide/LSM/SELinux.rst
@@@ -14046,7 -13972,7 +14046,7 @@@ F:   drivers/media/rc/serial_ir.
  SFC NETWORK DRIVER
  M:    Solarflare linux maintainers <linux-net-drivers@solarflare.com>
  M:    Edward Cree <ecree@solarflare.com>
 -M:    Bert Kenward <bkenward@solarflare.com>
 +M:    Martin Habets <mhabets@solarflare.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/sfc/
@@@ -14308,10 -14234,10 +14308,10 @@@ M:        "Paul E. McKenney" <paulmck@linux.ib
  M:    Josh Triplett <josh@joshtriplett.org>
  R:    Steven Rostedt <rostedt@goodmis.org>
  R:    Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
 -L:    linux-kernel@vger.kernel.org
 +L:    rcu@vger.kernel.org
  W:    http://www.rdrop.com/users/paulmck/RCU/
  S:    Supported
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev
  F:    include/linux/srcu*.h
  F:    kernel/rcu/srcu*.c
  
@@@ -14352,21 -14278,21 +14352,21 @@@ SMM665 HARDWARE MONITOR DRIVE
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/smm665
 +F:    Documentation/hwmon/smm665.rst
  F:    drivers/hwmon/smm665.c
  
  SMSC EMC2103 HARDWARE MONITOR DRIVER
  M:    Steve Glendinning <steve.glendinning@shawell.net>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/emc2103
 +F:    Documentation/hwmon/emc2103.rst
  F:    drivers/hwmon/emc2103.c
  
  SMSC SCH5627 HARDWARE MONITOR DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Supported
 -F:    Documentation/hwmon/sch5627
 +F:    Documentation/hwmon/sch5627.rst
  F:    drivers/hwmon/sch5627.c
  
  SMSC UFX6000 and UFX7000 USB to VGA DRIVER
@@@ -14379,7 -14305,7 +14379,7 @@@ SMSC47B397 HARDWARE MONITOR DRIVE
  M:    Jean Delvare <jdelvare@suse.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/smsc47b397
 +F:    Documentation/hwmon/smsc47b397.rst
  F:    drivers/hwmon/smsc47b397.c
  
  SMSC911x ETHERNET DRIVER
@@@ -14537,15 -14463,16 +14537,15 @@@ T:        git git://linuxtv.org/media_tree.gi
  S:    Maintained
  F:    drivers/media/i2c/imx355.c
  
 -SONY MEMORYSTICK CARD SUPPORT
 -M:    Alex Dubov <oakad@yahoo.com>
 -W:    http://tifmxx.berlios.de/
 -S:    Maintained
 -F:    drivers/memstick/host/tifm_ms.c
 -
 -SONY MEMORYSTICK STANDARD SUPPORT
 +SONY MEMORYSTICK SUBSYSTEM
  M:    Maxim Levitsky <maximlevitsky@gmail.com>
 +M:    Alex Dubov <oakad@yahoo.com>
 +M:    Ulf Hansson <ulf.hansson@linaro.org>
 +L:    linux-mmc@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc.git
  S:    Maintained
 -F:    drivers/memstick/core/ms_block.*
 +F:    drivers/memstick/
 +F:    include/linux/memstick.h
  
  SONY VAIO CONTROL DEVICE DRIVER
  M:    Mattia Dongili <malattia@linux.it>
@@@ -15377,11 -15304,6 +15377,11 @@@ M: Laxman Dewangan <ldewangan@nvidia.co
  S:    Supported
  F:    drivers/spi/spi-tegra*
  
 +TEGRA XUSB PADCTL DRIVER
 +M:    JC Kuo <jckuo@nvidia.com>
 +S:    Supported
 +F:    drivers/phy/tegra/xusb*
 +
  TEHUTI ETHERNET DRIVER
  M:    Andy Gospodarek <andy@greyhouse.net>
  L:    netdev@vger.kernel.org
@@@ -15575,11 -15497,9 +15575,11 @@@ S: Maintaine
  F:    drivers/net/ethernet/ti/cpsw*
  F:    drivers/net/ethernet/ti/davinci*
  
 -TI FLASH MEDIA INTERFACE DRIVER
 +TI FLASH MEDIA MEMORYSTICK/MMC DRIVERS
  M:    Alex Dubov <oakad@yahoo.com>
  S:    Maintained
 +W:    http://tifmxx.berlios.de/
 +F:    drivers/memstick/host/tifm_ms.c
  F:    drivers/misc/tifm*
  F:    drivers/mmc/host/tifm_sd.c
  F:    include/linux/tifm.h
@@@ -15731,7 -15651,7 +15731,7 @@@ TMP401 HARDWARE MONITOR DRIVE
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/tmp401
 +F:    Documentation/hwmon/tmp401.rst
  F:    drivers/hwmon/tmp401.c
  
  TMPFS (SHMEM FILESYSTEM)
@@@ -15764,7 -15684,7 +15764,7 @@@ M:   "Paul E. McKenney" <paulmck@linux.ib
  M:    Josh Triplett <josh@joshtriplett.org>
  L:    linux-kernel@vger.kernel.org
  S:    Supported
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev
  F:    Documentation/RCU/torture.txt
  F:    kernel/torture.c
  F:    kernel/rcu/rcutorture.c
@@@ -16006,12 -15926,6 +16006,12 @@@ F: drivers/uwb
  F:    include/linux/uwb.h
  F:    include/linux/uwb/
  
 +UNICODE SUBSYSTEM:
 +M:    Gabriel Krisman Bertazi <krisman@collabora.com>
 +L:    linux-fsdevel@vger.kernel.org
 +S:    Supported
 +F:    fs/unicode/
 +
  UNICORE32 ARCHITECTURE:
  M:    Guan Xuetao <gxt@pku.edu.cn>
  W:    http://mprc.pku.edu.cn/~guanxuetao/linux
@@@ -16057,6 -15971,13 +16057,13 @@@ L: linux-scsi@vger.kernel.or
  S:    Supported
  F:    drivers/scsi/ufs/*dwc*
  
+ UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER MEDIATEK HOOKS
+ M:    Stanley Chu <stanley.chu@mediatek.com>
+ L:    linux-scsi@vger.kernel.org
+ L:    linux-mediatek@lists.infradead.org (moderated for non-subscribers)
+ S:    Maintained
+ F:    drivers/scsi/ufs/ufs-mediatek*
  UNSORTED BLOCK IMAGES (UBI)
  M:    Artem Bityutskiy <dedekind1@gmail.com>
  M:    Richard Weinberger <richard@nod.at>
@@@ -16160,14 -16081,6 +16167,14 @@@ L: linux-usb@vger.kernel.or
  S:    Maintained
  F:    drivers/usb/roles/intel-xhci-usb-role-switch.c
  
 +USB IP DRIVER FOR HISILICON KIRIN
 +M:    Yu Chen <chenyu56@huawei.com>
 +M:    Binghui Wang <wangbinghui@hisilicon.com>
 +L:    linux-usb@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/phy/phy-hi3660-usb3.txt
 +F:    drivers/phy/hisilicon/phy-hi3660-usb3.c
 +
  USB ISP116X DRIVER
  M:    Olav Kongas <ok@artecdesign.ee>
  L:    linux-usb@vger.kernel.org
@@@ -16593,7 -16506,7 +16600,7 @@@ F:   drivers/char/virtio_console.
  F:    include/linux/virtio_console.h
  F:    include/uapi/linux/virtio_console.h
  
 -VIRTIO CORE, NET AND BLOCK DRIVERS
 +VIRTIO CORE AND NET DRIVERS
  M:    "Michael S. Tsirkin" <mst@redhat.com>
  M:    Jason Wang <jasowang@redhat.com>
  L:    virtualization@lists.linux-foundation.org
@@@ -16608,19 -16521,6 +16615,19 @@@ F: include/uapi/linux/virtio_*.
  F:    drivers/crypto/virtio/
  F:    mm/balloon_compaction.c
  
 +VIRTIO BLOCK AND SCSI DRIVERS
 +M:    "Michael S. Tsirkin" <mst@redhat.com>
 +M:    Jason Wang <jasowang@redhat.com>
 +R:    Paolo Bonzini <pbonzini@redhat.com>
 +R:    Stefan Hajnoczi <stefanha@redhat.com>
 +L:    virtualization@lists.linux-foundation.org
 +S:    Maintained
 +F:    drivers/block/virtio_blk.c
 +F:    drivers/scsi/virtio_scsi.c
 +F:    include/uapi/linux/virtio_blk.h
 +F:    include/uapi/linux/virtio_scsi.h
 +F:    drivers/vhost/scsi.c
 +
  VIRTIO CRYPTO DRIVER
  M:    Gonglei <arei.gonglei@huawei.com>
  L:    virtualization@lists.linux-foundation.org
@@@ -16783,7 -16683,7 +16790,7 @@@ VT1211 HARDWARE MONITOR DRIVE
  M:    Juerg Haefliger <juergh@gmail.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/vt1211
 +F:    Documentation/hwmon/vt1211.rst
  F:    drivers/hwmon/vt1211.c
  
  VT8231 HARDWARE MONITOR DRIVER
@@@ -16811,14 -16711,14 +16818,14 @@@ W83791D HARDWARE MONITORING DRIVE
  M:    Marc Hulsman <m.hulsman@tudelft.nl>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/w83791d
 +F:    Documentation/hwmon/w83791d.rst
  F:    drivers/hwmon/w83791d.c
  
  W83793 HARDWARE MONITORING DRIVER
  M:    Rudolf Marek <r.marek@assembler.cz>
  L:    linux-hwmon@vger.kernel.org
  S:    Maintained
 -F:    Documentation/hwmon/w83793
 +F:    Documentation/hwmon/w83793.rst
  F:    drivers/hwmon/w83793.c
  
  W83795 HARDWARE MONITORING DRIVER
@@@ -16927,7 -16827,7 +16934,7 @@@ L:   patches@opensource.cirrus.co
  T:    git https://github.com/CirrusLogic/linux-drivers.git
  W:    https://github.com/CirrusLogic/linux-drivers/wiki
  S:    Supported
 -F:    Documentation/hwmon/wm83??
 +F:    Documentation/hwmon/wm83??.rst
  F:    Documentation/devicetree/bindings/extcon/extcon-arizona.txt
  F:    Documentation/devicetree/bindings/regulator/arizona-regulator.txt
  F:    Documentation/devicetree/bindings/mfd/arizona.txt
@@@ -17017,7 -16917,7 +17024,7 @@@ M:   Tony Luck <tony.luck@intel.com
  M:    Borislav Petkov <bp@alien8.de>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
 -F:    arch/x86/kernel/cpu/mcheck/*
 +F:    arch/x86/kernel/cpu/mce/*
  
  X86 MICROCODE UPDATE SUPPORT
  M:    Borislav Petkov <bp@alien8.de>
diff --combined drivers/nvme/host/fc.c
@@@ -14,7 -14,7 +14,7 @@@
  #include "fabrics.h"
  #include <linux/nvme-fc-driver.h>
  #include <linux/nvme-fc.h>
+ #include <scsi/scsi_transport_fc.h>
  
  /* *************************** Data Structures/Defines ****************** */
  
@@@ -1845,7 -1845,7 +1845,7 @@@ nvme_fc_init_queue(struct nvme_fc_ctrl 
        memset(queue, 0, sizeof(*queue));
        queue->ctrl = ctrl;
        queue->qnum = idx;
 -      atomic_set(&queue->csn, 1);
 +      atomic_set(&queue->csn, 0);
        queue->dev = ctrl->dev;
  
        if (idx > 0)
@@@ -1887,7 -1887,7 +1887,7 @@@ nvme_fc_free_queue(struct nvme_fc_queu
         */
  
        queue->connection_id = 0;
 -      atomic_set(&queue->csn, 1);
 +      atomic_set(&queue->csn, 0);
  }
  
  static void
@@@ -2183,6 -2183,7 +2183,6 @@@ nvme_fc_start_fcp_op(struct nvme_fc_ctr
  {
        struct nvme_fc_cmd_iu *cmdiu = &op->cmd_iu;
        struct nvme_command *sqe = &cmdiu->sqe;
 -      u32 csn;
        int ret, opstate;
  
        /*
  
        /* format the FC-NVME CMD IU and fcp_req */
        cmdiu->connection_id = cpu_to_be64(queue->connection_id);
 -      csn = atomic_inc_return(&queue->csn);
 -      cmdiu->csn = cpu_to_be32(csn);
        cmdiu->data_len = cpu_to_be32(data_len);
        switch (io_dir) {
        case NVMEFC_FCP_WRITE:
        if (!(op->flags & FCOP_FLAGS_AEN))
                blk_mq_start_request(op->rq);
  
 +      cmdiu->csn = cpu_to_be32(atomic_inc_return(&queue->csn));
        ret = ctrl->lport->ops->fcp_io(&ctrl->lport->localport,
                                        &ctrl->rport->remoteport,
                                        queue->lldd_handle, &op->fcp_req);
  
        if (ret) {
 +              /*
 +               * If the lld fails to send the command is there an issue with
 +               * the csn value?  If the command that fails is the Connect,
 +               * no - as the connection won't be live.  If it is a command
 +               * post-connect, it's possible a gap in csn may be created.
 +               * Does this matter?  As Linux initiators don't send fused
 +               * commands, no.  The gap would exist, but as there's nothing
 +               * that depends on csn order to be delivered on the target
 +               * side, it shouldn't hurt.  It would be difficult for a
 +               * target to even detect the csn gap as it has no idea when the
 +               * cmd with the csn was supposed to arrive.
 +               */
                opstate = atomic_xchg(&op->state, FCPOP_STATE_COMPLETE);
                __nvme_fc_fcpop_chk_teardowns(ctrl, op, opstate);
  
@@@ -1666,7 -1666,7 +1666,7 @@@ ahc_handle_scsiint(struct ahc_softc *ah
                                        printk("\tCRC Value Mismatch\n");
                                if ((sstat2 & CRCENDERR) != 0)
                                        printk("\tNo terminal CRC packet "
-                                              "recevied\n");
+                                              "received\n");
                                if ((sstat2 & CRCREQERR) != 0)
                                        printk("\tIllegal CRC packet "
                                               "request\n");
@@@ -4920,30 -4920,24 +4920,30 @@@ ahc_fini_scbdata(struct ahc_softc *ahc
                }
                ahc_dma_tag_destroy(ahc, scb_data->sg_dmat);
        }
 +              /* fall through */
        case 6:
                ahc_dmamap_unload(ahc, scb_data->sense_dmat,
                                  scb_data->sense_dmamap);
 +              /* fall through */
        case 5:
                ahc_dmamem_free(ahc, scb_data->sense_dmat, scb_data->sense,
                                scb_data->sense_dmamap);
                ahc_dmamap_destroy(ahc, scb_data->sense_dmat,
                                   scb_data->sense_dmamap);
 +              /* fall through */
        case 4:
                ahc_dma_tag_destroy(ahc, scb_data->sense_dmat);
 +              /* fall through */
        case 3:
                ahc_dmamap_unload(ahc, scb_data->hscb_dmat,
                                  scb_data->hscb_dmamap);
 +              /* fall through */
        case 2:
                ahc_dmamem_free(ahc, scb_data->hscb_dmat, scb_data->hscbs,
                                scb_data->hscb_dmamap);
                ahc_dmamap_destroy(ahc, scb_data->hscb_dmat,
                                   scb_data->hscb_dmamap);
 +              /* fall through */
        case 1:
                ahc_dma_tag_destroy(ahc, scb_data->hscb_dmat);
                break;
@@@ -6008,8 -6002,8 +6008,8 @@@ ahc_search_qinfifo(struct ahc_softc *ah
                                if ((scb->flags & SCB_ACTIVE) == 0)
                                        printk("Inactive SCB in Waiting List\n");
                                ahc_done(ahc, scb);
 -                              /* FALLTHROUGH */
                        }
 +                              /* fall through */
                        case SEARCH_REMOVE:
                                next = ahc_rem_wscb(ahc, next, prev);
                                break;
@@@ -7014,8 -7008,8 +7014,8 @@@ ahc_download_instr(struct ahc_softc *ah
                }
                address -= address_offset;
                fmt3_ins->address = address;
 -              /* FALLTHROUGH */
        }
 +              /* fall through */
        case AIC_OP_OR:
        case AIC_OP_AND:
        case AIC_OP_XOR:
                        fmt1_ins->opcode = AIC_OP_AND;
                        fmt1_ins->immediate = 0xff;
                }
 -              /* FALLTHROUGH */
 +              /* fall through */
        case AIC_OP_ROL:
                if ((ahc->features & AHC_ULTRA2) != 0) {
                        int i, count;
@@@ -815,6 -815,7 +815,6 @@@ megasas_fire_cmd_skinny(struct megasas_
               &(regs)->inbound_high_queue_port);
        writel((lower_32_bits(frame_phys_addr) | (frame_count<<1))|1,
               &(regs)->inbound_low_queue_port);
 -      mmiowb();
        spin_unlock_irqrestore(&instance->hba_lock, flags);
  }
  
@@@ -2724,7 -2725,7 +2724,7 @@@ static int megasas_wait_for_outstanding
        do {
                if ((fw_state == MFI_STATE_FAULT) || atomic_read(&instance->fw_outstanding)) {
                        dev_info(&instance->pdev->dev,
-                               "%s:%d waiting_for_outstanding: before issue OCR. FW state = 0x%x, oustanding 0x%x\n",
+                               "%s:%d waiting_for_outstanding: before issue OCR. FW state = 0x%x, outstanding 0x%x\n",
                                __func__, __LINE__, fw_state, atomic_read(&instance->fw_outstanding));
                        if (i == 3)
                                goto kill_hba_and_failed;
@@@ -4647,7 -4648,7 +4647,7 @@@ megasas_ld_list_query(struct megasas_in
   * Return:                    0 if DCMD succeeded
   *                             non-zero if failed
   */
- int
static int
  megasas_host_device_list_query(struct megasas_instance *instance,
                               bool is_probe)
  {
@@@ -242,6 -242,7 +242,6 @@@ megasas_fire_cmd_fusion(struct megasas_
                &instance->reg_set->inbound_low_queue_port);
        writel(le32_to_cpu(req_desc->u.high),
                &instance->reg_set->inbound_high_queue_port);
 -      mmiowb();
        spin_unlock_irqrestore(&instance->hba_lock, flags);
  #endif
  }
@@@ -4418,7 -4419,7 +4418,7 @@@ int megasas_task_abort_fusion(struct sc
        if (!smid) {
                ret = SUCCESS;
                scmd_printk(KERN_NOTICE, scmd, "Command for which abort is"
-                       " issued is not found in oustanding commands\n");
+                       " issued is not found in outstanding commands\n");
                mutex_unlock(&instance->reset_mutex);
                goto out;
        }
@@@ -94,6 -94,11 +94,11 @@@ module_param(max_msix_vectors, int, 0)
  MODULE_PARM_DESC(max_msix_vectors,
        " max msix vectors");
  
+ static int irqpoll_weight = -1;
+ module_param(irqpoll_weight, int, 0);
+ MODULE_PARM_DESC(irqpoll_weight,
+       "irq poll weight (default= one fourth of HBA queue depth)");
  static int mpt3sas_fwfault_debug;
  MODULE_PARM_DESC(mpt3sas_fwfault_debug,
        " enable detection of firmware fault and halt firmware - (default=0)");
@@@ -1382,20 -1387,30 +1387,30 @@@ union reply_descriptor 
        } u;
  };
  
+ static u32 base_mod64(u64 dividend, u32 divisor)
+ {
+       u32 remainder;
+       if (!divisor)
+               pr_err("mpt3sas: DIVISOR is zero, in div fn\n");
+       remainder = do_div(dividend, divisor);
+       return remainder;
+ }
  /**
-  * _base_interrupt - MPT adapter (IOC) specific interrupt handler.
-  * @irq: irq number (not used)
-  * @bus_id: bus identifier cookie == pointer to MPT_ADAPTER structure
+  * _base_process_reply_queue - Process reply descriptors from reply
+  *            descriptor post queue.
+  * @reply_q: per IRQ's reply queue object.
   *
-  * Return: IRQ_HANDLED if processed, else IRQ_NONE.
+  * Return: number of reply descriptors processed from reply
+  *            descriptor queue.
   */
- static irqreturn_t
- _base_interrupt(int irq, void *bus_id)
+ static int
+ _base_process_reply_queue(struct adapter_reply_queue *reply_q)
  {
-       struct adapter_reply_queue *reply_q = bus_id;
        union reply_descriptor rd;
-       u32 completed_cmds;
-       u8 request_desript_type;
+       u64 completed_cmds;
+       u8 request_descript_type;
        u16 smid;
        u8 cb_idx;
        u32 reply;
        Mpi2ReplyDescriptorsUnion_t *rpf;
        u8 rc;
  
-       if (ioc->mask_interrupts)
-               return IRQ_NONE;
+       completed_cmds = 0;
        if (!atomic_add_unless(&reply_q->busy, 1, 1))
-               return IRQ_NONE;
+               return completed_cmds;
  
        rpf = &reply_q->reply_post_free[reply_q->reply_post_host_index];
-       request_desript_type = rpf->Default.ReplyFlags
+       request_descript_type = rpf->Default.ReplyFlags
             & MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK;
-       if (request_desript_type == MPI2_RPY_DESCRIPT_FLAGS_UNUSED) {
+       if (request_descript_type == MPI2_RPY_DESCRIPT_FLAGS_UNUSED) {
                atomic_dec(&reply_q->busy);
-               return IRQ_NONE;
+               return completed_cmds;
        }
  
-       completed_cmds = 0;
        cb_idx = 0xFF;
        do {
                rd.word = le64_to_cpu(rpf->Words);
                        goto out;
                reply = 0;
                smid = le16_to_cpu(rpf->Default.DescriptorTypeDependent1);
-               if (request_desript_type ==
+               if (request_descript_type ==
                    MPI25_RPY_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO_SUCCESS ||
-                   request_desript_type ==
+                   request_descript_type ==
                    MPI2_RPY_DESCRIPT_FLAGS_SCSI_IO_SUCCESS ||
-                   request_desript_type ==
+                   request_descript_type ==
                    MPI26_RPY_DESCRIPT_FLAGS_PCIE_ENCAPSULATED_SUCCESS) {
                        cb_idx = _base_get_cb_idx(ioc, smid);
                        if ((likely(cb_idx < MPT_MAX_CALLBACKS)) &&
                                if (rc)
                                        mpt3sas_base_free_smid(ioc, smid);
                        }
-               } else if (request_desript_type ==
+               } else if (request_descript_type ==
                    MPI2_RPY_DESCRIPT_FLAGS_ADDRESS_REPLY) {
                        reply = le32_to_cpu(
                            rpf->AddressReply.ReplyFrameAddress);
                    (reply_q->reply_post_host_index ==
                    (ioc->reply_post_queue_depth - 1)) ? 0 :
                    reply_q->reply_post_host_index + 1;
-               request_desript_type =
+               request_descript_type =
                    reply_q->reply_post_free[reply_q->reply_post_host_index].
                    Default.ReplyFlags & MPI2_RPY_DESCRIPT_FLAGS_TYPE_MASK;
                completed_cmds++;
                 * So that FW can find enough entries to post the Reply
                 * Descriptors in the reply descriptor post queue.
                 */
-               if (completed_cmds > ioc->hba_queue_depth/3) {
+               if (!base_mod64(completed_cmds, ioc->thresh_hold)) {
                        if (ioc->combined_reply_queue) {
                                writel(reply_q->reply_post_host_index |
                                                ((msix_index  & 7) <<
                                                 MPI2_RPHI_MSIX_INDEX_SHIFT),
                                                &ioc->chip->ReplyPostHostIndex);
                        }
-                       completed_cmds = 1;
+                       if (!reply_q->irq_poll_scheduled) {
+                               reply_q->irq_poll_scheduled = true;
+                               irq_poll_sched(&reply_q->irqpoll);
+                       }
+                       atomic_dec(&reply_q->busy);
+                       return completed_cmds;
                }
-               if (request_desript_type == MPI2_RPY_DESCRIPT_FLAGS_UNUSED)
+               if (request_descript_type == MPI2_RPY_DESCRIPT_FLAGS_UNUSED)
                        goto out;
                if (!reply_q->reply_post_host_index)
                        rpf = reply_q->reply_post_free;
  
        if (!completed_cmds) {
                atomic_dec(&reply_q->busy);
-               return IRQ_NONE;
+               return completed_cmds;
        }
  
        if (ioc->is_warpdrive) {
                writel(reply_q->reply_post_host_index,
                ioc->reply_post_host_index[msix_index]);
                atomic_dec(&reply_q->busy);
-               return IRQ_HANDLED;
+               return completed_cmds;
        }
  
        /* Update Reply Post Host Index.
                        MPI2_RPHI_MSIX_INDEX_SHIFT),
                        &ioc->chip->ReplyPostHostIndex);
        atomic_dec(&reply_q->busy);
-       return IRQ_HANDLED;
+       return completed_cmds;
+ }
+ /**
+  * _base_interrupt - MPT adapter (IOC) specific interrupt handler.
+  * @irq: irq number (not used)
+  * @bus_id: bus identifier cookie == pointer to MPT_ADAPTER structure
+  *
+  * Return: IRQ_HANDLED if processed, else IRQ_NONE.
+  */
+ static irqreturn_t
+ _base_interrupt(int irq, void *bus_id)
+ {
+       struct adapter_reply_queue *reply_q = bus_id;
+       struct MPT3SAS_ADAPTER *ioc = reply_q->ioc;
+       if (ioc->mask_interrupts)
+               return IRQ_NONE;
+       if (reply_q->irq_poll_scheduled)
+               return IRQ_HANDLED;
+       return ((_base_process_reply_queue(reply_q) > 0) ?
+                       IRQ_HANDLED : IRQ_NONE);
+ }
+ /**
+  * _base_irqpoll - IRQ poll callback handler
+  * @irqpoll - irq_poll object
+  * @budget - irq poll weight
+  *
+  * returns number of reply descriptors processed
+  */
+ static int
+ _base_irqpoll(struct irq_poll *irqpoll, int budget)
+ {
+       struct adapter_reply_queue *reply_q;
+       int num_entries = 0;
+       reply_q = container_of(irqpoll, struct adapter_reply_queue,
+                       irqpoll);
+       if (reply_q->irq_line_enable) {
+               disable_irq(reply_q->os_irq);
+               reply_q->irq_line_enable = false;
+       }
+       num_entries = _base_process_reply_queue(reply_q);
+       if (num_entries < budget) {
+               irq_poll_complete(irqpoll);
+               reply_q->irq_poll_scheduled = false;
+               reply_q->irq_line_enable = true;
+               enable_irq(reply_q->os_irq);
+       }
+       return num_entries;
+ }
+ /**
+  * _base_init_irqpolls - initliaze IRQ polls
+  * @ioc: per adapter object
+  *
+  * returns nothing
+  */
+ static void
+ _base_init_irqpolls(struct MPT3SAS_ADAPTER *ioc)
+ {
+       struct adapter_reply_queue *reply_q, *next;
+       if (list_empty(&ioc->reply_queue_list))
+               return;
+       list_for_each_entry_safe(reply_q, next, &ioc->reply_queue_list, list) {
+               irq_poll_init(&reply_q->irqpoll,
+                       ioc->hba_queue_depth/4, _base_irqpoll);
+               reply_q->irq_poll_scheduled = false;
+               reply_q->irq_line_enable = true;
+               reply_q->os_irq = pci_irq_vector(ioc->pdev,
+                   reply_q->msix_index);
+       }
  }
  
  /**
@@@ -1596,6 -1688,17 +1688,17 @@@ mpt3sas_base_sync_reply_irqs(struct MPT
                /* TMs are on msix_index == 0 */
                if (reply_q->msix_index == 0)
                        continue;
+               if (reply_q->irq_poll_scheduled) {
+                       /* Calling irq_poll_disable will wait for any pending
+                        * callbacks to have completed.
+                        */
+                       irq_poll_disable(&reply_q->irqpoll);
+                       irq_poll_enable(&reply_q->irqpoll);
+                       reply_q->irq_poll_scheduled = false;
+                       reply_q->irq_line_enable = true;
+                       enable_irq(reply_q->os_irq);
+                       continue;
+               }
                synchronize_irq(pci_irq_vector(ioc->pdev, reply_q->msix_index));
        }
  }
@@@ -2757,6 -2860,11 +2860,11 @@@ _base_assign_reply_queues(struct MPT3SA
  
        if (!_base_is_controller_msix_enabled(ioc))
                return;
+       ioc->msix_load_balance = false;
+       if (ioc->reply_queue_count < num_online_cpus()) {
+               ioc->msix_load_balance = true;
+               return;
+       }
  
        memset(ioc->cpu_msix_table, 0, ioc->cpu_msix_table_sz);
  
@@@ -3015,6 -3123,8 +3123,8 @@@ mpt3sas_base_map_resources(struct MPT3S
        if (r)
                goto out_fail;
  
+       if (!ioc->is_driver_loading)
+               _base_init_irqpolls(ioc);
        /* Use the Combined reply queue feature only for SAS3 C0 & higher
         * revision HBAs and also only when reply queue count is greater than 8
         */
@@@ -3158,6 -3268,12 +3268,12 @@@ mpt3sas_base_get_reply_virt_addr(struc
  static inline u8
  _base_get_msix_index(struct MPT3SAS_ADAPTER *ioc)
  {
+       /* Enables reply_queue load balancing */
+       if (ioc->msix_load_balance)
+               return ioc->reply_queue_count ?
+                   base_mod64(atomic64_add_return(1,
+                   &ioc->total_io_cnt), ioc->reply_queue_count) : 0;
        return ioc->cpu_msix_table[raw_smp_processor_id()];
  }
  
@@@ -3333,6 -3449,7 +3449,6 @@@ _base_mpi_ep_writeq(__u64 b, volatile v
        spin_lock_irqsave(writeq_lock, flags);
        __raw_writel((u32)(b), addr);
        __raw_writel((u32)(b >> 32), (addr + 4));
 -      mmiowb();
        spin_unlock_irqrestore(writeq_lock, flags);
  }
  
@@@ -6506,6 -6623,12 +6622,12 @@@ mpt3sas_base_attach(struct MPT3SAS_ADAP
        if (r)
                goto out_free_resources;
  
+       if (irqpoll_weight > 0)
+               ioc->thresh_hold = irqpoll_weight;
+       else
+               ioc->thresh_hold = ioc->hba_queue_depth/4;
+       _base_init_irqpolls(ioc);
        init_waitqueue_head(&ioc->reset_wq);
  
        /* allocate memory pd handle bitmask list */
@@@ -155,12 -155,10 +155,10 @@@ static void qedi_tmf_resp_work(struct w
        struct iscsi_conn *conn = qedi_conn->cls_conn->dd_data;
        struct iscsi_session *session = conn->session;
        struct iscsi_tm_rsp *resp_hdr_ptr;
-       struct iscsi_cls_session *cls_sess;
        int rval = 0;
  
        set_bit(QEDI_CONN_FW_CLEANUP, &qedi_conn->flags);
        resp_hdr_ptr =  (struct iscsi_tm_rsp *)qedi_cmd->tmf_resp_buf;
-       cls_sess = iscsi_conn_to_session(qedi_conn->cls_conn);
  
        iscsi_block_session(session->cls_session);
        rval = qedi_cleanup_all_io(qedi, qedi_conn, qedi_cmd->task, true);
@@@ -985,6 -983,7 +983,6 @@@ static void qedi_ring_doorbell(struct q
         * others they are two different assembly operations.
         */
        wmb();
 -      mmiowb();
        QEDI_INFO(&qedi_conn->qedi->dbg_ctx, QEDI_LOG_MP_REQ,
                  "prod_idx=0x%x, fw_prod_idx=0x%x, cid=0x%x\n",
                  qedi_conn->ep->sq_prod_idx, qedi_conn->ep->fw_sq_prod_idx,
@@@ -1366,7 -1365,6 +1364,6 @@@ static void qedi_tmf_work(struct work_s
        struct qedi_conn *qedi_conn = qedi_cmd->conn;
        struct qedi_ctx *qedi = qedi_conn->qedi;
        struct iscsi_conn *conn = qedi_conn->cls_conn->dd_data;
-       struct iscsi_cls_session *cls_sess;
        struct qedi_work_map *list_work = NULL;
        struct iscsi_task *mtask;
        struct qedi_cmd *cmd;
  
        mtask = qedi_cmd->task;
        tmf_hdr = (struct iscsi_tm *)mtask->hdr;
-       cls_sess = iscsi_conn_to_session(qedi_conn->cls_conn);
        set_bit(QEDI_CONN_FW_CLEANUP, &qedi_conn->flags);
  
        ctask = iscsi_itt_to_task(conn, tmf_hdr->rtt);
diff --combined drivers/scsi/scsi_lib.c
@@@ -141,8 -141,6 +141,6 @@@ scsi_set_blocked(struct scsi_cmnd *cmd
  
  static void scsi_mq_requeue_cmd(struct scsi_cmnd *cmd)
  {
-       struct scsi_device *sdev = cmd->device;
        if (cmd->request->rq_flags & RQF_DONTPREP) {
                cmd->request->rq_flags &= ~RQF_DONTPREP;
                scsi_mq_uninit_cmd(cmd);
                WARN_ON_ONCE(true);
        }
        blk_mq_requeue_request(cmd->request, true);
-       put_device(&sdev->sdev_gendev);
  }
  
  /**
@@@ -189,19 -186,7 +186,7 @@@ static void __scsi_queue_insert(struct 
         */
        cmd->result = 0;
  
-       /*
-        * 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);
  }
  
  /*
@@@ -619,7 -604,6 +604,6 @@@ static bool scsi_end_request(struct req
                blk_mq_run_hw_queues(q, true);
  
        percpu_ref_put(&q->q_usage_counter);
-       put_device(&sdev->sdev_gendev);
        return false;
  }
  
@@@ -1613,7 -1597,6 +1597,6 @@@ static void scsi_mq_put_budget(struct b
        struct scsi_device *sdev = q->queuedata;
  
        atomic_dec(&sdev->device_busy);
-       put_device(&sdev->sdev_gendev);
  }
  
  static bool scsi_mq_get_budget(struct blk_mq_hw_ctx *hctx)
        struct request_queue *q = hctx->queue;
        struct scsi_device *sdev = q->queuedata;
  
-       if (!get_device(&sdev->sdev_gendev))
-               goto out;
-       if (!scsi_dev_queue_ready(q, sdev))
-               goto out_put_device;
-       return true;
+       if (scsi_dev_queue_ready(q, sdev))
+               return true;
  
- out_put_device:
-       put_device(&sdev->sdev_gendev);
- out:
        if (atomic_read(&sdev->device_busy) == 0 && !scsi_device_blocked(sdev))
                blk_mq_delay_run_hw_queue(hctx, SCSI_QUEUE_DELAY);
        return false;
@@@ -1706,12 -1682,8 +1682,12 @@@ out_put_budget
                        ret = BLK_STS_DEV_RESOURCE;
                break;
        default:
 +              if (unlikely(!scsi_device_online(sdev)))
 +                      scsi_req(req)->result = DID_NO_CONNECT << 16;
 +              else
 +                      scsi_req(req)->result = DID_ERROR << 16;
                /*
 -               * Make sure to release all allocated ressources when
 +               * Make sure to release all allocated resources when
                 * we hit an error, as we will never see this command
                 * again.
                 */
@@@ -1770,7 -1742,7 +1746,7 @@@ static int scsi_map_queues(struct blk_m
  
        if (shost->hostt->map_queues)
                return shost->hostt->map_queues(shost);
-       return blk_mq_map_queues(&set->map[0]);
+       return blk_mq_map_queues(&set->map[HCTX_TYPE_DEFAULT]);
  }
  
  void __scsi_init_queue(struct Scsi_Host *shost, struct request_queue *q)
diff --combined drivers/scsi/ufs/Kconfig
@@@ -99,7 -99,6 +99,7 @@@ config SCSI_UFS_DWC_TC_PLATFOR
  config SCSI_UFS_QCOM
        tristate "QCOM specific hooks to UFS controller platform driver"
        depends on SCSI_UFSHCD_PLATFORM && ARCH_QCOM
 +      select RESET_CONTROLLER
        help
          This selects the QCOM specific additions to UFSHCD platform driver.
          UFS host on QCOM needs some vendor specific configuration before
          Select this if you have UFS controller on QCOM chipset.
          If unsure, say N.
  
+ config SCSI_UFS_MEDIATEK
+       tristate "Mediatek specific hooks to UFS controller platform driver"
+       depends on SCSI_UFSHCD_PLATFORM && ARCH_MEDIATEK
+       select PHY_MTK_UFS
+       help
+         This selects the Mediatek specific additions to UFSHCD platform driver.
+         UFS host on Mediatek needs some vendor specific configuration before
+         accessing the hardware which includes PHY configuration and vendor
+         specific registers.
+         Select this if you have UFS controller on Mediatek chipset.
+         If unsure, say N.
  config SCSI_UFS_HISI
        tristate "Hisilicon specific hooks to UFS controller platform driver"
        depends on (ARCH_HISI || COMPILE_TEST) && SCSI_UFSHCD_PLATFORM
@@@ -16,7 -16,6 +16,7 @@@
  #include <linux/of.h>
  #include <linux/platform_device.h>
  #include <linux/phy/phy.h>
 +#include <linux/reset-controller.h>
  
  #include "ufshcd.h"
  #include "ufshcd-pltfrm.h"
@@@ -50,11 -49,6 +50,11 @@@ static void ufs_qcom_get_default_testbu
  static int ufs_qcom_set_dme_vs_core_clk_ctrl_clear_div(struct ufs_hba *hba,
                                                       u32 clk_cycles);
  
 +static struct ufs_qcom_host *rcdev_to_ufs_host(struct reset_controller_dev *rcd)
 +{
 +      return container_of(rcd, struct ufs_qcom_host, rcdev);
 +}
 +
  static void ufs_qcom_dump_regs_wrapper(struct ufs_hba *hba, int offset, int len,
                                       const char *prefix, void *priv)
  {
@@@ -261,6 -255,11 +261,6 @@@ static int ufs_qcom_power_up_sequence(s
        if (is_rate_B)
                phy_set_mode(phy, PHY_MODE_UFS_HS_B);
  
 -      /* Assert PHY reset and apply PHY calibration values */
 -      ufs_qcom_assert_reset(hba);
 -      /* provide 1ms delay to let the reset pulse propagate */
 -      usleep_range(1000, 1100);
 -
        /* phy initialization - calibrate the phy */
        ret = phy_init(phy);
        if (ret) {
                goto out;
        }
  
 -      /* De-assert PHY reset and start serdes */
 -      ufs_qcom_deassert_reset(hba);
 -
 -      /*
 -       * after reset deassertion, phy will need all ref clocks,
 -       * voltage, current to settle down before starting serdes.
 -       */
 -      usleep_range(1000, 1100);
 -
        /* power on phy - start serdes and phy's power and clocks */
        ret = phy_power_on(phy);
        if (ret) {
        return 0;
  
  out_disable_phy:
 -      ufs_qcom_assert_reset(hba);
        phy_exit(phy);
  out:
        return ret;
@@@ -545,10 -554,21 +545,10 @@@ static int ufs_qcom_suspend(struct ufs_
                ufs_qcom_disable_lane_clks(host);
                phy_power_off(phy);
  
 -              /* Assert PHY soft reset */
 -              ufs_qcom_assert_reset(hba);
 -              goto out;
 -      }
 -
 -      /*
 -       * If UniPro link is not active, PHY ref_clk, main PHY analog power
 -       * rail and low noise analog power rail for PLL can be switched off.
 -       */
 -      if (!ufs_qcom_is_link_active(hba)) {
 +      } else if (!ufs_qcom_is_link_active(hba)) {
                ufs_qcom_disable_lane_clks(host);
 -              phy_power_off(phy);
        }
  
 -out:
        return ret;
  }
  
@@@ -558,126 -578,23 +558,28 @@@ static int ufs_qcom_resume(struct ufs_h
        struct phy *phy = host->generic_phy;
        int err;
  
 -      err = phy_power_on(phy);
 -      if (err) {
 -              dev_err(hba->dev, "%s: failed enabling regs, err = %d\n",
 -                      __func__, err);
 -              goto out;
 -      }
 +      if (ufs_qcom_is_link_off(hba)) {
 +              err = phy_power_on(phy);
 +              if (err) {
 +                      dev_err(hba->dev, "%s: failed PHY power on: %d\n",
 +                              __func__, err);
 +                      return err;
 +              }
  
 -      err = ufs_qcom_enable_lane_clks(host);
 -      if (err)
 -              goto out;
 +              err = ufs_qcom_enable_lane_clks(host);
 +              if (err)
 +                      return err;
  
 -      hba->is_sys_suspended = false;
 +      } else if (!ufs_qcom_is_link_active(hba)) {
 +              err = ufs_qcom_enable_lane_clks(host);
 +              if (err)
 +                      return err;
 +      }
  
 -out:
 -      return err;
 +      hba->is_sys_suspended = false;
 +      return 0;
  }
  
- struct ufs_qcom_dev_params {
-       u32 pwm_rx_gear;        /* pwm rx gear to work in */
-       u32 pwm_tx_gear;        /* pwm tx gear to work in */
-       u32 hs_rx_gear;         /* hs rx gear to work in */
-       u32 hs_tx_gear;         /* hs tx gear to work in */
-       u32 rx_lanes;           /* number of rx lanes */
-       u32 tx_lanes;           /* number of tx lanes */
-       u32 rx_pwr_pwm;         /* rx pwm working pwr */
-       u32 tx_pwr_pwm;         /* tx pwm working pwr */
-       u32 rx_pwr_hs;          /* rx hs working pwr */
-       u32 tx_pwr_hs;          /* tx hs working pwr */
-       u32 hs_rate;            /* rate A/B to work in HS */
-       u32 desired_working_mode;
- };
- static int ufs_qcom_get_pwr_dev_param(struct ufs_qcom_dev_params *qcom_param,
-                                     struct ufs_pa_layer_attr *dev_max,
-                                     struct ufs_pa_layer_attr *agreed_pwr)
- {
-       int min_qcom_gear;
-       int min_dev_gear;
-       bool is_dev_sup_hs = false;
-       bool is_qcom_max_hs = false;
-       if (dev_max->pwr_rx == FAST_MODE)
-               is_dev_sup_hs = true;
-       if (qcom_param->desired_working_mode == FAST) {
-               is_qcom_max_hs = true;
-               min_qcom_gear = min_t(u32, qcom_param->hs_rx_gear,
-                                     qcom_param->hs_tx_gear);
-       } else {
-               min_qcom_gear = min_t(u32, qcom_param->pwm_rx_gear,
-                                     qcom_param->pwm_tx_gear);
-       }
-       /*
-        * device doesn't support HS but qcom_param->desired_working_mode is
-        * HS, thus device and qcom_param don't agree
-        */
-       if (!is_dev_sup_hs && is_qcom_max_hs) {
-               pr_err("%s: failed to agree on power mode (device doesn't support HS but requested power is HS)\n",
-                       __func__);
-               return -ENOTSUPP;
-       } else if (is_dev_sup_hs && is_qcom_max_hs) {
-               /*
-                * since device supports HS, it supports FAST_MODE.
-                * since qcom_param->desired_working_mode is also HS
-                * then final decision (FAST/FASTAUTO) is done according
-                * to qcom_params as it is the restricting factor
-                */
-               agreed_pwr->pwr_rx = agreed_pwr->pwr_tx =
-                                               qcom_param->rx_pwr_hs;
-       } else {
-               /*
-                * here qcom_param->desired_working_mode is PWM.
-                * it doesn't matter whether device supports HS or PWM,
-                * in both cases qcom_param->desired_working_mode will
-                * determine the mode
-                */
-                agreed_pwr->pwr_rx = agreed_pwr->pwr_tx =
-                                               qcom_param->rx_pwr_pwm;
-       }
-       /*
-        * we would like tx to work in the minimum number of lanes
-        * between device capability and vendor preferences.
-        * the same decision will be made for rx
-        */
-       agreed_pwr->lane_tx = min_t(u32, dev_max->lane_tx,
-                                               qcom_param->tx_lanes);
-       agreed_pwr->lane_rx = min_t(u32, dev_max->lane_rx,
-                                               qcom_param->rx_lanes);
-       /* device maximum gear is the minimum between device rx and tx gears */
-       min_dev_gear = min_t(u32, dev_max->gear_rx, dev_max->gear_tx);
-       /*
-        * if both device capabilities and vendor pre-defined preferences are
-        * both HS or both PWM then set the minimum gear to be the chosen
-        * working gear.
-        * if one is PWM and one is HS then the one that is PWM get to decide
-        * what is the gear, as it is the one that also decided previously what
-        * pwr the device will be configured to.
-        */
-       if ((is_dev_sup_hs && is_qcom_max_hs) ||
-           (!is_dev_sup_hs && !is_qcom_max_hs))
-               agreed_pwr->gear_rx = agreed_pwr->gear_tx =
-                       min_t(u32, min_dev_gear, min_qcom_gear);
-       else if (!is_dev_sup_hs)
-               agreed_pwr->gear_rx = agreed_pwr->gear_tx = min_dev_gear;
-       else
-               agreed_pwr->gear_rx = agreed_pwr->gear_tx = min_qcom_gear;
-       agreed_pwr->hs_rate = qcom_param->hs_rate;
-       return 0;
- }
  #ifdef CONFIG_MSM_BUS_SCALING
  static int ufs_qcom_get_bus_vote(struct ufs_qcom_host *host,
                const char *speed_mode)
@@@ -905,7 -822,7 +807,7 @@@ static int ufs_qcom_pwr_change_notify(s
  {
        u32 val;
        struct ufs_qcom_host *host = ufshcd_get_variant(hba);
-       struct ufs_qcom_dev_params ufs_qcom_cap;
+       struct ufs_dev_params ufs_qcom_cap;
        int ret = 0;
  
        if (!dev_req_params) {
                                ufs_qcom_cap.hs_rx_gear = UFS_HS_G2;
                }
  
-               ret = ufs_qcom_get_pwr_dev_param(&ufs_qcom_cap,
-                                                dev_max_params,
-                                                dev_req_params);
+               ret = ufshcd_get_pwr_dev_param(&ufs_qcom_cap,
+                                              dev_max_params,
+                                              dev_req_params);
                if (ret) {
                        pr_err("%s: failed to determine capabilities\n",
                                        __func__);
@@@ -1103,6 -1020,8 +1005,6 @@@ static int ufs_qcom_setup_clocks(struc
                return 0;
  
        if (on && (status == POST_CHANGE)) {
 -              phy_power_on(host->generic_phy);
 -
                /* enable the device ref clock for HS mode*/
                if (ufshcd_is_hs_mode(&hba->pwr_info))
                        ufs_qcom_dev_ref_clk_ctrl(host, true);
                if (!ufs_qcom_is_link_active(hba)) {
                        /* disable device ref_clk */
                        ufs_qcom_dev_ref_clk_ctrl(host, false);
 -
 -                      /* powering off PHY during aggressive clk gating */
 -                      phy_power_off(host->generic_phy);
                }
  
                vote = host->bus_vote.min_bw_vote;
        return err;
  }
  
 +static int
 +ufs_qcom_reset_assert(struct reset_controller_dev *rcdev, unsigned long id)
 +{
 +      struct ufs_qcom_host *host = rcdev_to_ufs_host(rcdev);
 +
 +      /* Currently this code only knows about a single reset. */
 +      WARN_ON(id);
 +      ufs_qcom_assert_reset(host->hba);
 +      /* provide 1ms delay to let the reset pulse propagate. */
 +      usleep_range(1000, 1100);
 +      return 0;
 +}
 +
 +static int
 +ufs_qcom_reset_deassert(struct reset_controller_dev *rcdev, unsigned long id)
 +{
 +      struct ufs_qcom_host *host = rcdev_to_ufs_host(rcdev);
 +
 +      /* Currently this code only knows about a single reset. */
 +      WARN_ON(id);
 +      ufs_qcom_deassert_reset(host->hba);
 +
 +      /*
 +       * after reset deassertion, phy will need all ref clocks,
 +       * voltage, current to settle down before starting serdes.
 +       */
 +      usleep_range(1000, 1100);
 +      return 0;
 +}
 +
 +static const struct reset_control_ops ufs_qcom_reset_ops = {
 +      .assert = ufs_qcom_reset_assert,
 +      .deassert = ufs_qcom_reset_deassert,
 +};
 +
  #define       ANDROID_BOOT_DEV_MAX    30
  static char android_boot_dev[ANDROID_BOOT_DEV_MAX];
  
@@@ -1206,17 -1093,6 +1108,17 @@@ static int ufs_qcom_init(struct ufs_hb
        host->hba = hba;
        ufshcd_set_variant(hba, host);
  
 +      /* Fire up the reset controller. Failure here is non-fatal. */
 +      host->rcdev.of_node = dev->of_node;
 +      host->rcdev.ops = &ufs_qcom_reset_ops;
 +      host->rcdev.owner = dev->driver->owner;
 +      host->rcdev.nr_resets = 1;
 +      err = devm_reset_controller_register(dev, &host->rcdev);
 +      if (err) {
 +              dev_warn(dev, "Failed to register reset controller\n");
 +              err = 0;
 +      }
 +
        /*
         * voting/devoting device ref_clk source is time consuming hence
         * skip devoting it during aggressive clock gating. This clock
@@@ -659,7 -659,7 +659,7 @@@ static int virtscsi_abort(struct scsi_c
  static int virtscsi_map_queues(struct Scsi_Host *shost)
  {
        struct virtio_scsi *vscsi = shost_priv(shost);
-       struct blk_mq_queue_map *qmap = &shost->tag_set.map[0];
+       struct blk_mq_queue_map *qmap = &shost->tag_set.map[HCTX_TYPE_DEFAULT];
  
        return blk_mq_virtio_map_queues(qmap, vscsi->vdev, 2);
  }
@@@ -793,7 -793,6 +793,7 @@@ static int virtscsi_probe(struct virtio
  
        /* We need to know how many queues before we allocate. */
        num_queues = virtscsi_config_get(vdev, num_queues) ? : 1;
 +      num_queues = min_t(unsigned int, nr_cpu_ids, num_queues);
  
        num_targets = virtscsi_config_get(vdev, max_target) + 1;