Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 2 Apr 2014 01:49:04 +0000 (18:49 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 2 Apr 2014 01:49:04 +0000 (18:49 -0700)
Pull first round of SCSI updates from James Bottomley:
 "This patch consists of the usual driver updates (megaraid_sas,
  scsi_debug, qla2xxx, qla4xxx, lpfc, bnx2fc, be2iscsi, hpsa, ipr) plus
  an assortment of minor fixes and the first precursors of SCSI-MQ (the
  code path simplifications) and the bug fix for the USB oops on remove
  (which involves an infrastructure change, so is sent via the main tree
  with a delayed backport after a cycle in which it is shown to
  introduce no new bugs)"

* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (196 commits)
  [SCSI] sd: Quiesce mode sense error messages
  [SCSI] add support for per-host cmd pools
  [SCSI] simplify command allocation and freeing a bit
  [SCSI] megaraid: simplify internal command handling
  [SCSI] ses: Use vpd information from scsi_device
  [SCSI] Add EVPD page 0x83 and 0x80 to sysfs
  [SCSI] Return VPD page length in scsi_vpd_inquiry()
  [SCSI] scsi_sysfs: Implement 'is_visible' callback
  [SCSI] hpsa: update driver version to 3.4.4-1
  [SCSI] hpsa: fix bad endif placement in RAID 5 mapper code
  [SCSI] qla2xxx: Fix build errors related to invalid print fields on some architectures.
  [SCSI] bfa: Replace large udelay() with mdelay()
  [SCSI] vmw_pvscsi: Some improvements in pvscsi driver.
  [SCSI] vmw_pvscsi: Add support for I/O requests coalescing.
  [SCSI] vmw_pvscsi: Fix pvscsi_abort() function.
  [SCSI] remove deprecated IRQF_DISABLED from SCSI
  [SCSI] bfa: Updating Maintainers email ids
  [SCSI] ipr: Add new CCIN definition for Grand Canyon support
  [SCSI] ipr: Format HCAM overlay ID 0x21
  [SCSI] ipr: Use pci_enable_msi_range() and pci_enable_msix_range()
  ...

1  2 
MAINTAINERS
drivers/scsi/bnx2fc/bnx2fc_io.c
drivers/scsi/bnx2fc/bnx2fc_tgt.c
drivers/scsi/bnx2i/bnx2i_hwi.c
drivers/scsi/bnx2i/bnx2i_iscsi.c
drivers/scsi/scsi_sysfs.c
include/linux/pci_ids.h

diff --combined MAINTAINERS
@@@ -73,8 -73,7 +73,8 @@@ Descriptions of section entries
        L: Mailing list that is relevant to this area
        W: Web-page with status/info
        Q: Patchwork web based patch tracking system site
 -      T: SCM tree type and location.  Type is one of: git, hg, quilt, stgit, topgit.
 +      T: SCM tree type and location.
 +         Type is one of: git, hg, quilt, stgit, topgit
        S: Status, one of the following:
           Supported:   Someone is actually paid to look after this.
           Maintained:  Someone actually looks after it.
@@@ -242,8 -241,8 +242,8 @@@ S: Maintaine
  F:    drivers/platform/x86/acer-wmi.c
  
  ACPI
 -M:    Len Brown <lenb@kernel.org>
  M:    Rafael J. Wysocki <rjw@rjwysocki.net>
 +M:    Len Brown <lenb@kernel.org>
  L:    linux-acpi@vger.kernel.org
  W:    https://01.org/linux-acpi
  Q:    https://patchwork.kernel.org/project/linux-acpi/list/
@@@ -474,7 -473,7 +474,7 @@@ F: net/rxrpc/af_rxrpc.
  
  AGPGART DRIVER
  M:    David Airlie <airlied@linux.ie>
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
 +T:    git git://people.freedesktop.org/~airlied/linux (part of drm maint)
  S:    Maintained
  F:    drivers/char/agp/
  F:    include/linux/agp*
@@@ -539,7 -538,7 +539,7 @@@ F: arch/alpha
  ALTERA UART/JTAG UART SERIAL DRIVERS
  M:    Tobias Klauser <tklauser@distanz.ch>
  L:    linux-serial@vger.kernel.org
 -L:    nios2-dev@sopc.et.ntust.edu.tw (moderated for non-subscribers)
 +L:    nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
  S:    Maintained
  F:    drivers/tty/serial/altera_uart.c
  F:    drivers/tty/serial/altera_jtaguart.c
@@@ -911,11 -910,11 +911,11 @@@ F:      arch/arm/include/asm/hardware/dec212
  F:    arch/arm/mach-footbridge/
  
  ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
 -M:    Shawn Guo <shawn.guo@linaro.org>
 +M:    Shawn Guo <shawn.guo@freescale.com>
  M:    Sascha Hauer <kernel@pengutronix.de>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -T:    git git://git.linaro.org/people/shawnguo/linux-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
  F:    arch/arm/mach-imx/
  F:    arch/arm/boot/dts/imx*
  F:    arch/arm/configs/imx*_defconfig
@@@ -1320,7 -1319,6 +1320,7 @@@ M:      Linus Walleij <linus.walleij@linaro.
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    arch/arm/mach-u300/
 +F:    drivers/clocksource/timer-u300.c
  F:    drivers/i2c/busses/i2c-stu300.c
  F:    drivers/rtc/rtc-coh901331.c
  F:    drivers/watchdog/coh901327_wdt.c
@@@ -1614,11 -1612,11 +1614,11 @@@ S:   Maintaine
  F:    drivers/net/wireless/atmel*
  
  ATTO EXPRESSSAS SAS/SATA RAID SCSI DRIVER
 -M:      Bradley Grove <linuxdrivers@attotech.com>
 -L:      linux-scsi@vger.kernel.org
 -W:      http://www.attotech.com
 -S:      Supported
 -F:      drivers/scsi/esas2r
 +M:    Bradley Grove <linuxdrivers@attotech.com>
 +L:    linux-scsi@vger.kernel.org
 +W:    http://www.attotech.com
 +S:    Supported
 +F:    drivers/scsi/esas2r
  
  AUDIT SUBSYSTEM
  M:    Eric Paris <eparis@redhat.com>
@@@ -1739,7 -1737,6 +1739,7 @@@ F:      include/uapi/linux/bfs_fs.
  BLACKFIN ARCHITECTURE
  M:    Steven Miao <realmz6@gmail.com>
  L:    adi-buildroot-devel@lists.sourceforge.net
 +T:    git git://git.code.sf.net/p/adi-linux/code
  W:    http://blackfin.uclinux.org
  S:    Supported
  F:    arch/blackfin/
@@@ -1833,8 -1830,8 +1833,8 @@@ F:      net/bluetooth
  F:    include/net/bluetooth/
  
  BONDING DRIVER
 -M:    Jay Vosburgh <fubar@us.ibm.com>
 -M:    Veaceslav Falico <vfalico@redhat.com>
 +M:    Jay Vosburgh <j.vosburgh@gmail.com>
 +M:    Veaceslav Falico <vfalico@gmail.com>
  M:    Andy Gospodarek <andy@greyhouse.net>
  L:    netdev@vger.kernel.org
  W:    http://sourceforge.net/projects/bonding/
@@@ -1863,7 -1860,6 +1863,7 @@@ F:      drivers/net/ethernet/broadcom/bnx2x
  
  BROADCOM BCM281XX/BCM11XXX ARM ARCHITECTURE
  M:    Christian Daudt <bcm@fixthebug.org>
 +M:    Matt Porter <mporter@linaro.org>
  L:    bcm-kernel-feedback-list@broadcom.com
  T:    git git://git.github.com/broadcom/bcm11351
  S:    Maintained
@@@ -1921,8 -1917,8 +1921,8 @@@ F:      drivers/bcma
  F:    include/linux/bcma/
  
  BROCADE BFA FC SCSI DRIVER
- M:    Anil Gurumurthy <agurumur@brocade.com>
- M:    Vijaya Mohan Guvva <vmohan@brocade.com>
+ M:    Anil Gurumurthy <anil.gurumurthy@qlogic.com>
+ M:    Sudarsana Kalluru <sudarsana.kalluru@qlogic.com>
  L:    linux-scsi@vger.kernel.org
  S:    Supported
  F:    drivers/scsi/bfa/
@@@ -2162,7 -2158,7 +2162,7 @@@ F:      Documentation/zh_CN
  
  CHIPIDEA USB HIGH SPEED DUAL ROLE CONTROLLER
  M:    Peter Chen <Peter.Chen@freescale.com>
 -T:    git://github.com/hzpeterchen/linux-usb.git
 +T:    git git://github.com/hzpeterchen/linux-usb.git
  L:    linux-usb@vger.kernel.org
  S:    Maintained
  F:    drivers/usb/chipidea/
@@@ -2182,9 -2178,9 +2182,9 @@@ S:      Supporte
  F:    drivers/net/ethernet/cisco/enic/
  
  CISCO VIC LOW LATENCY NIC DRIVER
 -M:      Upinder Malhi <umalhi@cisco.com>
 -S:      Supported
 -F:      drivers/infiniband/hw/usnic
 +M:    Upinder Malhi <umalhi@cisco.com>
 +S:    Supported
 +F:    drivers/infiniband/hw/usnic
  
  CIRRUS LOGIC EP93XX ETHERNET DRIVER
  M:    Hartley Sweeten <hsweeten@visionengravers.com>
@@@ -2204,13 -2200,6 +2204,13 @@@ L:    alsa-devel@alsa-project.org (moderat
  S:    Odd Fixes
  F:    sound/soc/codecs/cs4270*
  
 +CIRRUS LOGIC AUDIO CODEC DRIVERS
 +M:    Brian Austin <brian.austin@cirrus.com>
 +M:    Paul Handrigan <Paul.Handrigan@cirrus.com>
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    sound/soc/codecs/cs*
 +
  CLEANCACHE API
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  L:    linux-kernel@vger.kernel.org
@@@ -2388,20 -2377,20 +2388,20 @@@ F:   drivers/cpufreq/arm_big_little.
  F:    drivers/cpufreq/arm_big_little_dt.c
  
  CPUIDLE DRIVER - ARM BIG LITTLE
 -M:      Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
 -M:      Daniel Lezcano <daniel.lezcano@linaro.org>
 -L:      linux-pm@vger.kernel.org
 -L:      linux-arm-kernel@lists.infradead.org
 -T:      git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
 -S:      Maintained
 -F:      drivers/cpuidle/cpuidle-big_little.c
 +M:    Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
 +M:    Daniel Lezcano <daniel.lezcano@linaro.org>
 +L:    linux-pm@vger.kernel.org
 +L:    linux-arm-kernel@lists.infradead.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
 +S:    Maintained
 +F:    drivers/cpuidle/cpuidle-big_little.c
  
  CPUIDLE DRIVERS
  M:    Rafael J. Wysocki <rjw@rjwysocki.net>
  M:    Daniel Lezcano <daniel.lezcano@linaro.org>
  L:    linux-pm@vger.kernel.org
  S:    Maintained
 -T:    git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
  F:    drivers/cpuidle/*
  F:    include/linux/cpuidle.h
  
@@@ -2419,10 -2408,8 +2419,10 @@@ F:    tools/power/cpupower
  
  CPUSETS
  M:    Li Zefan <lizefan@huawei.com>
 +L:    cgroups@vger.kernel.org
  W:    http://www.bullopensource.org/cpuset/
  W:    http://oss.sgi.com/projects/cpusets/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git
  S:    Maintained
  F:    Documentation/cgroups/cpusets.txt
  F:    include/linux/cpuset.h
@@@ -2468,9 -2455,9 +2468,9 @@@ S:      Maintaine
  F:    sound/pci/cs5535audio/
  
  CW1200 WLAN driver
 -M:     Solomon Peachy <pizza@shaftnet.org>
 -S:     Maintained
 -F:     drivers/net/wireless/cw1200/
 +M:    Solomon Peachy <pizza@shaftnet.org>
 +S:    Maintained
 +F:    drivers/net/wireless/cw1200/
  
  CX18 VIDEO4LINUX DRIVER
  M:    Andy Walls <awalls@md.metrocast.net>
@@@ -2621,9 -2608,9 +2621,9 @@@ DC395x SCSI drive
  M:    Oliver Neukum <oliver@neukum.org>
  M:    Ali Akcaagac <aliakc@web.de>
  M:    Jamie Lenehan <lenehan@twibble.org>
 -W:    http://twibble.org/dist/dc395x/
  L:    dc395x@twibble.org
 -L:    http://lists.twibble.org/mailman/listinfo/dc395x/
 +W:    http://twibble.org/dist/dc395x/
 +W:    http://lists.twibble.org/mailman/listinfo/dc395x/
  S:    Maintained
  F:    Documentation/scsi/dc395x.txt
  F:    drivers/scsi/dc395x.*
@@@ -2809,9 -2796,9 +2809,9 @@@ S:      Supporte
  F:    drivers/acpi/dock.c
  
  DOCUMENTATION
 -M:    Rob Landley <rob@landley.net>
 +M:    Randy Dunlap <rdunlap@infradead.org>
  L:    linux-doc@vger.kernel.org
 -T:    TBD
 +T:    quilt http://www.infradead.org/~rdunlap/Doc/patches/
  S:    Maintained
  F:    Documentation/
  
@@@ -2858,22 -2845,12 +2858,22 @@@ F:   lib/kobj
  DRM DRIVERS
  M:    David Airlie <airlied@linux.ie>
  L:    dri-devel@lists.freedesktop.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
 +T:    git git://people.freedesktop.org/~airlied/linux
  S:    Maintained
  F:    drivers/gpu/drm/
  F:    include/drm/
  F:    include/uapi/drm/
  
 +RADEON DRM DRIVERS
 +M:    Alex Deucher <alexander.deucher@amd.com>
 +M:    Christian König <christian.koenig@amd.com>
 +L:    dri-devel@lists.freedesktop.org
 +T:    git git://people.freedesktop.org/~agd5f/linux
 +S:    Supported
 +F:    drivers/gpu/drm/radeon/
 +F:    include/drm/radeon*
 +F:    include/uapi/drm/radeon*
 +
  INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
  M:    Daniel Vetter <daniel.vetter@ffwll.ch>
  M:    Jani Nikula <jani.nikula@linux.intel.com>
@@@ -3105,8 -3082,6 +3105,8 @@@ F:      fs/ecryptfs
  
  EDAC-CORE
  M:    Doug Thompson <dougthompson@xmission.com>
 +M:    Borislav Petkov <bp@alien8.de>
 +M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
  L:    linux-edac@vger.kernel.org
  W:    bluesmoke.sourceforge.net
  S:    Supported
@@@ -3665,8 -3640,8 +3665,8 @@@ S:      Maintaine
  F:    fs/freevxfs/
  
  FREEZER
 -M:    Pavel Machek <pavel@ucw.cz>
  M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
 +M:    Pavel Machek <pavel@ucw.cz>
  L:    linux-pm@vger.kernel.org
  S:    Supported
  F:    Documentation/power/freezing-of-tasks.txt
@@@ -4030,8 -4005,8 +4030,8 @@@ S:      Maintaine
  F:    drivers/video/hgafb.c
  
  HIBERNATION (aka Software Suspend, aka swsusp)
 -M:    Pavel Machek <pavel@ucw.cz>
  M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
 +M:    Pavel Machek <pavel@ucw.cz>
  L:    linux-pm@vger.kernel.org
  S:    Supported
  F:    arch/x86/power/
@@@ -4553,7 -4528,6 +4553,7 @@@ M:      Greg Rose <gregory.v.rose@intel.com
  M:    Alex Duyck <alexander.h.duyck@intel.com>
  M:    John Ronciak <john.ronciak@intel.com>
  M:    Mitch Williams <mitch.a.williams@intel.com>
 +M:    Linux NICS <linux.nics@intel.com>
  L:    e1000-devel@lists.sourceforge.net
  W:    http://www.intel.com/support/feedback.htm
  W:    http://e1000.sourceforge.net/
@@@ -4571,7 -4545,6 +4571,7 @@@ F:      Documentation/networking/ixgbevf.tx
  F:    Documentation/networking/i40e.txt
  F:    Documentation/networking/i40evf.txt
  F:    drivers/net/ethernet/intel/
 +F:    drivers/net/ethernet/intel/*/
  
  INTEL-MID GPIO DRIVER
  M:    David Cohen <david.a.cohen@linux.intel.com>
@@@ -4928,7 -4901,7 +4928,7 @@@ F:      drivers/staging/ktap
  KCONFIG
  M:    "Yann E. MORIN" <yann.morin.1998@free.fr>
  L:    linux-kbuild@vger.kernel.org
 -T:    git://gitorious.org/linux-kconfig/linux-kconfig
 +T:    git git://gitorious.org/linux-kconfig/linux-kconfig
  S:    Maintained
  F:    Documentation/kbuild/kconfig-language.txt
  F:    scripts/kconfig/
@@@ -5485,11 -5458,11 +5485,11 @@@ S:   Maintaine
  F:    drivers/media/tuners/m88ts2022*
  
  MA901 MASTERKIT USB FM RADIO DRIVER
 -M:      Alexey Klimov <klimov.linux@gmail.com>
 -L:      linux-media@vger.kernel.org
 -T:      git git://linuxtv.org/media_tree.git
 -S:      Maintained
 -F:      drivers/media/radio/radio-ma901.c
 +M:    Alexey Klimov <klimov.linux@gmail.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/radio/radio-ma901.c
  
  MAC80211
  M:    Johannes Berg <johannes@sipsolutions.net>
@@@ -5525,11 -5498,6 +5525,11 @@@ W:    http://www.kernel.org/doc/man-page
  L:    linux-man@vger.kernel.org
  S:    Maintained
  
 +MARVELL ARMADA DRM SUPPORT
 +M:    Russell King <rmk+kernel@arm.linux.org.uk>
 +S:    Maintained
 +F:    drivers/gpu/drm/armada/
 +
  MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2)
  M:    Mirko Lindner <mlindner@marvell.com>
  M:    Stephen Hemminger <stephen@networkplumber.org>
@@@ -5650,7 -5618,7 +5650,7 @@@ F:      drivers/scsi/megaraid
  
  MELLANOX ETHERNET DRIVER (mlx4_en)
  M:    Amir Vadai <amirv@mellanox.com>
 -L:    netdev@vger.kernel.org
 +L:    netdev@vger.kernel.org
  S:    Supported
  W:    http://www.mellanox.com
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
@@@ -5691,17 -5659,11 +5691,17 @@@ F:   include/linux/mtd
  F:    include/uapi/mtd/
  
  MEN A21 WATCHDOG DRIVER
 -M:    Johannes Thumshirn <johannes.thumshirn@men.de>
 +M:    Johannes Thumshirn <johannes.thumshirn@men.de>
  L:    linux-watchdog@vger.kernel.org
  S:    Supported
  F:    drivers/watchdog/mena21_wdt.c
  
 +MEN CHAMELEON BUS (mcb)
 +M:    Johannes Thumshirn <johannes.thumshirn@men.de>
 +S:    Supported
 +F:    drivers/mcb/
 +F:    include/linux/mcb.h
 +
  METAG ARCHITECTURE
  M:    James Hogan <james.hogan@imgtec.com>
  L:    linux-metag@vger.kernel.org
@@@ -5753,20 -5715,20 +5753,20 @@@ L:   linux-rdma@vger.kernel.or
  W:    http://www.mellanox.com
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
  Q:    http://patchwork.kernel.org/project/linux-rdma/list/
 -T:    git://openfabrics.org/~eli/connect-ib.git
 +T:    git git://openfabrics.org/~eli/connect-ib.git
  S:    Supported
  F:    drivers/net/ethernet/mellanox/mlx5/core/
  F:    include/linux/mlx5/
  
  Mellanox MLX5 IB driver
 -M:      Eli Cohen <eli@mellanox.com>
 -L:      linux-rdma@vger.kernel.org
 -W:      http://www.mellanox.com
 -Q:      http://patchwork.kernel.org/project/linux-rdma/list/
 -T:      git://openfabrics.org/~eli/connect-ib.git
 -S:      Supported
 -F:      include/linux/mlx5/
 -F:      drivers/infiniband/hw/mlx5/
 +M:    Eli Cohen <eli@mellanox.com>
 +L:    linux-rdma@vger.kernel.org
 +W:    http://www.mellanox.com
 +Q:    http://patchwork.kernel.org/project/linux-rdma/list/
 +T:    git git://openfabrics.org/~eli/connect-ib.git
 +S:    Supported
 +F:    include/linux/mlx5/
 +F:    drivers/infiniband/hw/mlx5/
  
  MODULE SUPPORT
  M:    Rusty Russell <rusty@rustcorp.com.au>
@@@ -6018,9 -5980,6 +6018,9 @@@ F:      include/linux/netdevice.
  F:    include/uapi/linux/in.h
  F:    include/uapi/linux/net.h
  F:    include/uapi/linux/netdevice.h
 +F:    tools/net/
 +F:    tools/testing/selftests/net/
 +F:    lib/random32.c
  
  NETWORKING [IPv4/IPv6]
  M:    "David S. Miller" <davem@davemloft.net>
@@@ -6194,12 -6153,6 +6194,12 @@@ S:    Supporte
  F:    drivers/block/nvme*
  F:    include/linux/nvme.h
  
 +NXP TDA998X DRM DRIVER
 +M:    Russell King <rmk+kernel@arm.linux.org.uk>
 +S:    Supported
 +F:    drivers/gpu/drm/i2c/tda998x_drv.c
 +F:    include/drm/i2c/tda998x.h
 +
  OMAP SUPPORT
  M:    Tony Lindgren <tony@atomide.com>
  L:    linux-omap@vger.kernel.org
@@@ -7419,26 -7372,10 +7419,26 @@@ W:   http://www.ibm.com/developerworks/li
  S:    Supported
  F:    arch/s390/
  F:    drivers/s390/
 -F:    block/partitions/ibm.c
  F:    Documentation/s390/
  F:    Documentation/DocBook/s390*
  
 +S390 COMMON I/O LAYER
 +M:    Sebastian Ott <sebott@linux.vnet.ibm.com>
 +M:    Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
 +L:    linux-s390@vger.kernel.org
 +W:    http://www.ibm.com/developerworks/linux/linux390/
 +S:    Supported
 +F:    drivers/s390/cio/
 +
 +S390 DASD DRIVER
 +M:    Stefan Weinhuber <wein@de.ibm.com>
 +M:    Stefan Haberland <stefan.haberland@de.ibm.com>
 +L:    linux-s390@vger.kernel.org
 +W:    http://www.ibm.com/developerworks/linux/linux390/
 +S:    Supported
 +F:    drivers/s390/block/dasd*
 +F:    block/partitions/ibm.c
 +
  S390 NETWORK DRIVERS
  M:    Ursula Braun <ursula.braun@de.ibm.com>
  M:    Frank Blaschka <blaschka@linux.vnet.ibm.com>
@@@ -7448,15 -7385,6 +7448,15 @@@ W:    http://www.ibm.com/developerworks/li
  S:    Supported
  F:    drivers/s390/net/
  
 +S390 PCI SUBSYSTEM
 +M:    Sebastian Ott <sebott@linux.vnet.ibm.com>
 +M:    Gerald Schaefer <gerald.schaefer@de.ibm.com>
 +L:    linux-s390@vger.kernel.org
 +W:    http://www.ibm.com/developerworks/linux/linux390/
 +S:    Supported
 +F:    arch/s390/pci/
 +F:    drivers/pci/hotplug/s390_pci_hpc.c
 +
  S390 ZCRYPT DRIVER
  M:    Ingo Tuchscherer <ingo.tuchscherer@de.ibm.com>
  M:    linux390@de.ibm.com
@@@ -8394,12 -8322,6 +8394,12 @@@ M:    Teddy Wang <teddy.wang@siliconmotion
  S:    Odd Fixes
  F:    drivers/staging/sm7xxfb/
  
 +STAGING - SLICOSS
 +M:    Lior Dotan <liodot@gmail.com>
 +M:    Christopher Harrer <charrer@alacritech.com>
 +S:    Odd Fixes
 +F:    drivers/staging/slicoss/
 +
  STAGING - SOFTLOGIC 6x10 MPEG CODEC
  M:    Ismael Luceno <ismael.luceno@corp.bluecherry.net>
  S:    Supported
@@@ -8472,9 -8394,9 +8472,9 @@@ F:      arch/sh
  F:    drivers/sh/
  
  SUSPEND TO RAM
 +M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
  M:    Len Brown <len.brown@intel.com>
  M:    Pavel Machek <pavel@ucw.cz>
 -M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
  L:    linux-pm@vger.kernel.org
  S:    Supported
  F:    Documentation/power/
@@@ -8518,8 -8440,8 +8518,8 @@@ TARGET SUBSYSTE
  M:    Nicholas A. Bellinger <nab@linux-iscsi.org>
  L:    linux-scsi@vger.kernel.org
  L:    target-devel@vger.kernel.org
 -L:    http://groups.google.com/group/linux-iscsi-target-dev
  W:    http://www.linux-iscsi.org
 +W:    http://groups.google.com/group/linux-iscsi-target-dev
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending.git master
  S:    Supported
  F:    drivers/target/
@@@ -8760,17 -8682,17 +8760,17 @@@ S:   Maintaine
  F:    drivers/media/radio/radio-raremono.c
  
  THERMAL
 -M:      Zhang Rui <rui.zhang@intel.com>
 -M:      Eduardo Valentin <eduardo.valentin@ti.com>
 -L:      linux-pm@vger.kernel.org
 -T:      git git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git
 -T:      git git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal.git
 -Q:      https://patchwork.kernel.org/project/linux-pm/list/
 -S:      Supported
 -F:      drivers/thermal/
 -F:      include/linux/thermal.h
 -F:      include/linux/cpu_cooling.h
 -F:      Documentation/devicetree/bindings/thermal/
 +M:    Zhang Rui <rui.zhang@intel.com>
 +M:    Eduardo Valentin <eduardo.valentin@ti.com>
 +L:    linux-pm@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux-soc-thermal.git
 +Q:    https://patchwork.kernel.org/project/linux-pm/list/
 +S:    Supported
 +F:    drivers/thermal/
 +F:    include/linux/thermal.h
 +F:    include/linux/cpu_cooling.h
 +F:    Documentation/devicetree/bindings/thermal/
  
  THINGM BLINK(1) USB RGB LED DRIVER
  M:    Vivien Didelot <vivien.didelot@savoirfairelinux.com>
@@@ -9085,13 -9007,6 +9085,13 @@@ F:    drivers/cdrom/cdrom.
  F:    include/linux/cdrom.h
  F:    include/uapi/linux/cdrom.h
  
 +UNISYS S-PAR DRIVERS
 +M:     Benjamin Romer <benjamin.romer@unisys.com>
 +M:     David Kershner <david.kershner@unisys.com>
 +L:     sparmaintainer@unisys.com (Unisys internal)
 +S:     Supported
 +F:     drivers/staging/unisys/
 +
  UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER
  M:    Vinayak Holikatti <vinholikatti@gmail.com>
  M:    Santosh Y <santoshsy@gmail.com>
@@@ -9130,7 -9045,8 +9130,7 @@@ S:      Maintaine
  F:    drivers/net/wireless/ath/ar5523/
  
  USB ATTACHED SCSI
 -M:    Matthew Wilcox <willy@linux.intel.com>
 -M:    Sarah Sharp <sarah.a.sharp@linux.intel.com>
 +M:    Hans de Goede <hdegoede@redhat.com>
  M:    Gerd Hoffmann <kraxel@redhat.com>
  L:    linux-usb@vger.kernel.org
  L:    linux-scsi@vger.kernel.org
@@@ -9356,7 -9272,7 +9356,7 @@@ S:      Maintaine
  F:    drivers/net/wireless/rndis_wlan.c
  
  USB XHCI DRIVER
 -M:    Sarah Sharp <sarah.a.sharp@linux.intel.com>
 +M:    Mathias Nyman <mathias.nyman@intel.com>
  L:    linux-usb@vger.kernel.org
  S:    Supported
  F:    drivers/usb/host/xhci*
@@@ -9810,6 -9726,7 +9810,6 @@@ F:      drivers/xen/*swiotlb
  XFS FILESYSTEM
  P:    Silicon Graphics Inc
  M:    Dave Chinner <david@fromorbit.com>
 -M:    Ben Myers <bpm@sgi.com>
  M:    xfs@oss.sgi.com
  L:    xfs@oss.sgi.com
  W:    http://oss.sgi.com/projects/xfs
@@@ -9834,12 -9751,6 +9834,12 @@@ L:    linux-serial@vger.kernel.or
  S:    Maintained
  F:    drivers/tty/serial/uartlite.c
  
 +XTENSA XTFPGA PLATFORM SUPPORT
 +M:    Max Filippov <jcmvbkbc@gmail.com>
 +L:    linux-xtensa@linux-xtensa.org
 +S:    Maintained
 +F:    drivers/spi/spi-xtensa-xtfpga.c
 +
  YAM DRIVER FOR AX.25
  M:    Jean-Paul Roubelat <jpr@f6fbb.org>
  L:    linux-hams@vger.kernel.org
@@@ -9884,7 -9795,7 +9884,7 @@@ ZR36067 VIDEO FOR LINUX DRIVE
  L:    mjpeg-users@lists.sourceforge.net
  L:    linux-media@vger.kernel.org
  W:    http://mjpeg.sourceforge.net/driver-zoran/
 -T:    Mercurial http://linuxtv.org/hg/v4l-dvb
 +T:    hg http://linuxtv.org/hg/v4l-dvb
  S:    Odd Fixes
  F:    drivers/media/pci/zoran/
  
@@@ -594,13 -594,13 +594,13 @@@ static void bnx2fc_free_mp_resc(struct 
                mp_req->mp_resp_bd = NULL;
        }
        if (mp_req->req_buf) {
 -              dma_free_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +              dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                     mp_req->req_buf,
                                     mp_req->req_buf_dma);
                mp_req->req_buf = NULL;
        }
        if (mp_req->resp_buf) {
 -              dma_free_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +              dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                     mp_req->resp_buf,
                                     mp_req->resp_buf_dma);
                mp_req->resp_buf = NULL;
@@@ -622,7 -622,7 +622,7 @@@ int bnx2fc_init_mp_req(struct bnx2fc_cm
  
        mp_req->req_len = sizeof(struct fcp_cmnd);
        io_req->data_xfer_len = mp_req->req_len;
 -      mp_req->req_buf = dma_alloc_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +      mp_req->req_buf = dma_alloc_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                             &mp_req->req_buf_dma,
                                             GFP_ATOMIC);
        if (!mp_req->req_buf) {
                return FAILED;
        }
  
 -      mp_req->resp_buf = dma_alloc_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +      mp_req->resp_buf = dma_alloc_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                              &mp_req->resp_buf_dma,
                                              GFP_ATOMIC);
        if (!mp_req->resp_buf) {
                bnx2fc_free_mp_resc(io_req);
                return FAILED;
        }
 -      memset(mp_req->req_buf, 0, PAGE_SIZE);
 -      memset(mp_req->resp_buf, 0, PAGE_SIZE);
 +      memset(mp_req->req_buf, 0, CNIC_PAGE_SIZE);
 +      memset(mp_req->resp_buf, 0, CNIC_PAGE_SIZE);
  
        /* Allocate and map mp_req_bd and mp_resp_bd */
        sz = sizeof(struct fcoe_bd_ctx);
        mp_req_bd = mp_req->mp_req_bd;
        mp_req_bd->buf_addr_lo = (u32)addr & 0xffffffff;
        mp_req_bd->buf_addr_hi = (u32)((u64)addr >> 32);
 -      mp_req_bd->buf_len = PAGE_SIZE;
 +      mp_req_bd->buf_len = CNIC_PAGE_SIZE;
        mp_req_bd->flags = 0;
  
        /*
        addr = mp_req->resp_buf_dma;
        mp_resp_bd->buf_addr_lo = (u32)addr & 0xffffffff;
        mp_resp_bd->buf_addr_hi = (u32)((u64)addr >> 32);
 -      mp_resp_bd->buf_len = PAGE_SIZE;
 +      mp_resp_bd->buf_len = CNIC_PAGE_SIZE;
        mp_resp_bd->flags = 0;
  
        return SUCCESS;
@@@ -1871,7 -1871,15 +1871,15 @@@ int bnx2fc_queuecommand(struct Scsi_Hos
                rc = SCSI_MLQUEUE_TARGET_BUSY;
                goto exit_qcmd;
        }
+       if (tgt->retry_delay_timestamp) {
+               if (time_after(jiffies, tgt->retry_delay_timestamp)) {
+                       tgt->retry_delay_timestamp = 0;
+               } else {
+                       /* If retry_delay timer is active, flow off the ML */
+                       rc = SCSI_MLQUEUE_TARGET_BUSY;
+                       goto exit_qcmd;
+               }
+       }
        io_req = bnx2fc_cmd_alloc(tgt);
        if (!io_req) {
                rc = SCSI_MLQUEUE_HOST_BUSY;
@@@ -1961,6 -1969,15 +1969,15 @@@ void bnx2fc_process_scsi_cmd_compl(stru
                                 " fcp_resid = 0x%x\n",
                                io_req->cdb_status, io_req->fcp_resid);
                        sc_cmd->result = (DID_OK << 16) | io_req->cdb_status;
+                       if (io_req->cdb_status == SAM_STAT_TASK_SET_FULL ||
+                           io_req->cdb_status == SAM_STAT_BUSY) {
+                               /* Set the jiffies + retry_delay_timer * 100ms
+                                  for the rport/tgt */
+                               tgt->retry_delay_timestamp = jiffies +
+                                       fcp_rsp->retry_delay_timer * HZ / 10;
+                       }
                }
                if (io_req->fcp_resid)
                        scsi_set_resid(sc_cmd, io_req->fcp_resid);
@@@ -386,6 -386,7 +386,7 @@@ static int bnx2fc_init_tgt(struct bnx2f
        tgt->rq_prod_idx = 0x8000;
        tgt->rq_cons_idx = 0;
        atomic_set(&tgt->num_active_ios, 0);
+       tgt->retry_delay_timestamp = 0;
  
        if (rdata->flags & FC_RP_FLAGS_RETRY &&
            rdata->ids.roles & FC_RPORT_ROLE_FCP_TARGET &&
@@@ -673,8 -674,7 +674,8 @@@ static int bnx2fc_alloc_session_resc(st
  
        /* Allocate and map SQ */
        tgt->sq_mem_size = tgt->max_sqes * BNX2FC_SQ_WQE_SIZE;
 -      tgt->sq_mem_size = (tgt->sq_mem_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +      tgt->sq_mem_size = (tgt->sq_mem_size + (CNIC_PAGE_SIZE - 1)) &
 +                         CNIC_PAGE_MASK;
  
        tgt->sq = dma_alloc_coherent(&hba->pcidev->dev, tgt->sq_mem_size,
                                     &tgt->sq_dma, GFP_KERNEL);
  
        /* Allocate and map CQ */
        tgt->cq_mem_size = tgt->max_cqes * BNX2FC_CQ_WQE_SIZE;
 -      tgt->cq_mem_size = (tgt->cq_mem_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +      tgt->cq_mem_size = (tgt->cq_mem_size + (CNIC_PAGE_SIZE - 1)) &
 +                         CNIC_PAGE_MASK;
  
        tgt->cq = dma_alloc_coherent(&hba->pcidev->dev, tgt->cq_mem_size,
                                     &tgt->cq_dma, GFP_KERNEL);
  
        /* Allocate and map RQ and RQ PBL */
        tgt->rq_mem_size = tgt->max_rqes * BNX2FC_RQ_WQE_SIZE;
 -      tgt->rq_mem_size = (tgt->rq_mem_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +      tgt->rq_mem_size = (tgt->rq_mem_size + (CNIC_PAGE_SIZE - 1)) &
 +                         CNIC_PAGE_MASK;
  
        tgt->rq = dma_alloc_coherent(&hba->pcidev->dev, tgt->rq_mem_size,
                                        &tgt->rq_dma, GFP_KERNEL);
        }
        memset(tgt->rq, 0, tgt->rq_mem_size);
  
 -      tgt->rq_pbl_size = (tgt->rq_mem_size / PAGE_SIZE) * sizeof(void *);
 -      tgt->rq_pbl_size = (tgt->rq_pbl_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +      tgt->rq_pbl_size = (tgt->rq_mem_size / CNIC_PAGE_SIZE) * sizeof(void *);
 +      tgt->rq_pbl_size = (tgt->rq_pbl_size + (CNIC_PAGE_SIZE - 1)) &
 +                         CNIC_PAGE_MASK;
  
        tgt->rq_pbl = dma_alloc_coherent(&hba->pcidev->dev, tgt->rq_pbl_size,
                                         &tgt->rq_pbl_dma, GFP_KERNEL);
        }
  
        memset(tgt->rq_pbl, 0, tgt->rq_pbl_size);
 -      num_pages = tgt->rq_mem_size / PAGE_SIZE;
 +      num_pages = tgt->rq_mem_size / CNIC_PAGE_SIZE;
        page = tgt->rq_dma;
        pbl = (u32 *)tgt->rq_pbl;
  
                pbl++;
                *pbl = (u32)((u64)page >> 32);
                pbl++;
 -              page += PAGE_SIZE;
 +              page += CNIC_PAGE_SIZE;
        }
  
        /* Allocate and map XFERQ */
        tgt->xferq_mem_size = tgt->max_sqes * BNX2FC_XFERQ_WQE_SIZE;
 -      tgt->xferq_mem_size = (tgt->xferq_mem_size + (PAGE_SIZE - 1)) &
 -                             PAGE_MASK;
 +      tgt->xferq_mem_size = (tgt->xferq_mem_size + (CNIC_PAGE_SIZE - 1)) &
 +                             CNIC_PAGE_MASK;
  
        tgt->xferq = dma_alloc_coherent(&hba->pcidev->dev, tgt->xferq_mem_size,
                                        &tgt->xferq_dma, GFP_KERNEL);
  
        /* Allocate and map CONFQ & CONFQ PBL */
        tgt->confq_mem_size = tgt->max_sqes * BNX2FC_CONFQ_WQE_SIZE;
 -      tgt->confq_mem_size = (tgt->confq_mem_size + (PAGE_SIZE - 1)) &
 -                             PAGE_MASK;
 +      tgt->confq_mem_size = (tgt->confq_mem_size + (CNIC_PAGE_SIZE - 1)) &
 +                             CNIC_PAGE_MASK;
  
        tgt->confq = dma_alloc_coherent(&hba->pcidev->dev, tgt->confq_mem_size,
                                        &tgt->confq_dma, GFP_KERNEL);
        memset(tgt->confq, 0, tgt->confq_mem_size);
  
        tgt->confq_pbl_size =
 -              (tgt->confq_mem_size / PAGE_SIZE) * sizeof(void *);
 +              (tgt->confq_mem_size / CNIC_PAGE_SIZE) * sizeof(void *);
        tgt->confq_pbl_size =
 -              (tgt->confq_pbl_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +              (tgt->confq_pbl_size + (CNIC_PAGE_SIZE - 1)) & CNIC_PAGE_MASK;
  
        tgt->confq_pbl = dma_alloc_coherent(&hba->pcidev->dev,
                                            tgt->confq_pbl_size,
        }
  
        memset(tgt->confq_pbl, 0, tgt->confq_pbl_size);
 -      num_pages = tgt->confq_mem_size / PAGE_SIZE;
 +      num_pages = tgt->confq_mem_size / CNIC_PAGE_SIZE;
        page = tgt->confq_dma;
        pbl = (u32 *)tgt->confq_pbl;
  
                pbl++;
                *pbl = (u32)((u64)page >> 32);
                pbl++;
 -              page += PAGE_SIZE;
 +              page += CNIC_PAGE_SIZE;
        }
  
        /* Allocate and map ConnDB */
  
        /* Allocate and map LCQ */
        tgt->lcq_mem_size = (tgt->max_sqes + 8) * BNX2FC_SQ_WQE_SIZE;
 -      tgt->lcq_mem_size = (tgt->lcq_mem_size + (PAGE_SIZE - 1)) &
 -                           PAGE_MASK;
 +      tgt->lcq_mem_size = (tgt->lcq_mem_size + (CNIC_PAGE_SIZE - 1)) &
 +                           CNIC_PAGE_MASK;
  
        tgt->lcq = dma_alloc_coherent(&hba->pcidev->dev, tgt->lcq_mem_size,
                                      &tgt->lcq_dma, GFP_KERNEL);
@@@ -61,7 -61,7 +61,7 @@@ static void bnx2i_adjust_qp_size(struc
         * yield integral num of page buffers
         */
        /* adjust SQ */
 -      num_elements_per_pg = PAGE_SIZE / BNX2I_SQ_WQE_SIZE;
 +      num_elements_per_pg = CNIC_PAGE_SIZE / BNX2I_SQ_WQE_SIZE;
        if (hba->max_sqes < num_elements_per_pg)
                hba->max_sqes = num_elements_per_pg;
        else if (hba->max_sqes % num_elements_per_pg)
@@@ -69,7 -69,7 +69,7 @@@
                                 ~(num_elements_per_pg - 1);
  
        /* adjust CQ */
 -      num_elements_per_pg = PAGE_SIZE / BNX2I_CQE_SIZE;
 +      num_elements_per_pg = CNIC_PAGE_SIZE / BNX2I_CQE_SIZE;
        if (hba->max_cqes < num_elements_per_pg)
                hba->max_cqes = num_elements_per_pg;
        else if (hba->max_cqes % num_elements_per_pg)
@@@ -77,7 -77,7 +77,7 @@@
                                 ~(num_elements_per_pg - 1);
  
        /* adjust RQ */
 -      num_elements_per_pg = PAGE_SIZE / BNX2I_RQ_WQE_SIZE;
 +      num_elements_per_pg = CNIC_PAGE_SIZE / BNX2I_RQ_WQE_SIZE;
        if (hba->max_rqes < num_elements_per_pg)
                hba->max_rqes = num_elements_per_pg;
        else if (hba->max_rqes % num_elements_per_pg)
@@@ -959,7 -959,7 +959,7 @@@ static void setup_qp_page_tables(struc
  
        /* SQ page table */
        memset(ep->qp.sq_pgtbl_virt, 0, ep->qp.sq_pgtbl_size);
 -      num_pages = ep->qp.sq_mem_size / PAGE_SIZE;
 +      num_pages = ep->qp.sq_mem_size / CNIC_PAGE_SIZE;
        page = ep->qp.sq_phys;
  
        if (cnic_dev_10g)
                        ptbl++;
                        *ptbl = (u32) ((u64) page >> 32);
                        ptbl++;
 -                      page += PAGE_SIZE;
 +                      page += CNIC_PAGE_SIZE;
                } else {
                        /* PTE is written in big endian format for
                         * 5706/5708/5709 devices */
                        ptbl++;
                        *ptbl = (u32) page;
                        ptbl++;
 -                      page += PAGE_SIZE;
 +                      page += CNIC_PAGE_SIZE;
                }
        }
  
        /* RQ page table */
        memset(ep->qp.rq_pgtbl_virt, 0, ep->qp.rq_pgtbl_size);
 -      num_pages = ep->qp.rq_mem_size / PAGE_SIZE;
 +      num_pages = ep->qp.rq_mem_size / CNIC_PAGE_SIZE;
        page = ep->qp.rq_phys;
  
        if (cnic_dev_10g)
                        ptbl++;
                        *ptbl = (u32) ((u64) page >> 32);
                        ptbl++;
 -                      page += PAGE_SIZE;
 +                      page += CNIC_PAGE_SIZE;
                } else {
                        /* PTE is written in big endian format for
                         * 5706/5708/5709 devices */
                        ptbl++;
                        *ptbl = (u32) page;
                        ptbl++;
 -                      page += PAGE_SIZE;
 +                      page += CNIC_PAGE_SIZE;
                }
        }
  
        /* CQ page table */
        memset(ep->qp.cq_pgtbl_virt, 0, ep->qp.cq_pgtbl_size);
 -      num_pages = ep->qp.cq_mem_size / PAGE_SIZE;
 +      num_pages = ep->qp.cq_mem_size / CNIC_PAGE_SIZE;
        page = ep->qp.cq_phys;
  
        if (cnic_dev_10g)
                        ptbl++;
                        *ptbl = (u32) ((u64) page >> 32);
                        ptbl++;
 -                      page += PAGE_SIZE;
 +                      page += CNIC_PAGE_SIZE;
                } else {
                        /* PTE is written in big endian format for
                         * 5706/5708/5709 devices */
                        ptbl++;
                        *ptbl = (u32) page;
                        ptbl++;
 -                      page += PAGE_SIZE;
 +                      page += CNIC_PAGE_SIZE;
                }
        }
  }
@@@ -1064,11 -1064,11 +1064,11 @@@ int bnx2i_alloc_qp_resc(struct bnx2i_hb
        /* Allocate page table memory for SQ which is page aligned */
        ep->qp.sq_mem_size = hba->max_sqes * BNX2I_SQ_WQE_SIZE;
        ep->qp.sq_mem_size =
 -              (ep->qp.sq_mem_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +              (ep->qp.sq_mem_size + (CNIC_PAGE_SIZE - 1)) & CNIC_PAGE_MASK;
        ep->qp.sq_pgtbl_size =
 -              (ep->qp.sq_mem_size / PAGE_SIZE) * sizeof(void *);
 +              (ep->qp.sq_mem_size / CNIC_PAGE_SIZE) * sizeof(void *);
        ep->qp.sq_pgtbl_size =
 -              (ep->qp.sq_pgtbl_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +              (ep->qp.sq_pgtbl_size + (CNIC_PAGE_SIZE - 1)) & CNIC_PAGE_MASK;
  
        ep->qp.sq_pgtbl_virt =
                dma_alloc_coherent(&hba->pcidev->dev, ep->qp.sq_pgtbl_size,
        /* Allocate page table memory for CQ which is page aligned */
        ep->qp.cq_mem_size = hba->max_cqes * BNX2I_CQE_SIZE;
        ep->qp.cq_mem_size =
 -              (ep->qp.cq_mem_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +              (ep->qp.cq_mem_size + (CNIC_PAGE_SIZE - 1)) & CNIC_PAGE_MASK;
        ep->qp.cq_pgtbl_size =
 -              (ep->qp.cq_mem_size / PAGE_SIZE) * sizeof(void *);
 +              (ep->qp.cq_mem_size / CNIC_PAGE_SIZE) * sizeof(void *);
        ep->qp.cq_pgtbl_size =
 -              (ep->qp.cq_pgtbl_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +              (ep->qp.cq_pgtbl_size + (CNIC_PAGE_SIZE - 1)) & CNIC_PAGE_MASK;
  
        ep->qp.cq_pgtbl_virt =
                dma_alloc_coherent(&hba->pcidev->dev, ep->qp.cq_pgtbl_size,
        /* Allocate page table memory for RQ which is page aligned */
        ep->qp.rq_mem_size = hba->max_rqes * BNX2I_RQ_WQE_SIZE;
        ep->qp.rq_mem_size =
 -              (ep->qp.rq_mem_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +              (ep->qp.rq_mem_size + (CNIC_PAGE_SIZE - 1)) & CNIC_PAGE_MASK;
        ep->qp.rq_pgtbl_size =
 -              (ep->qp.rq_mem_size / PAGE_SIZE) * sizeof(void *);
 +              (ep->qp.rq_mem_size / CNIC_PAGE_SIZE) * sizeof(void *);
        ep->qp.rq_pgtbl_size =
 -              (ep->qp.rq_pgtbl_size + (PAGE_SIZE - 1)) & PAGE_MASK;
 +              (ep->qp.rq_pgtbl_size + (CNIC_PAGE_SIZE - 1)) & CNIC_PAGE_MASK;
  
        ep->qp.rq_pgtbl_virt =
                dma_alloc_coherent(&hba->pcidev->dev, ep->qp.rq_pgtbl_size,
@@@ -1270,7 -1270,7 +1270,7 @@@ int bnx2i_send_fw_iscsi_init_msg(struc
        bnx2i_adjust_qp_size(hba);
  
        iscsi_init.flags =
 -              ISCSI_PAGE_SIZE_4K << ISCSI_KWQE_INIT1_PAGE_SIZE_SHIFT;
 +              (CNIC_PAGE_BITS - 8) << ISCSI_KWQE_INIT1_PAGE_SIZE_SHIFT;
        if (en_tcp_dack)
                iscsi_init.flags |= ISCSI_KWQE_INIT1_DELAYED_ACK_ENABLE;
        iscsi_init.reserved0 = 0;
                        ((hba->num_ccell & 0xFFFF) | (hba->max_sqes << 16));
        iscsi_init.num_ccells_per_conn = hba->num_ccell;
        iscsi_init.num_tasks_per_conn = hba->max_sqes;
 -      iscsi_init.sq_wqes_per_page = PAGE_SIZE / BNX2I_SQ_WQE_SIZE;
 +      iscsi_init.sq_wqes_per_page = CNIC_PAGE_SIZE / BNX2I_SQ_WQE_SIZE;
        iscsi_init.sq_num_wqes = hba->max_sqes;
        iscsi_init.cq_log_wqes_per_page =
 -              (u8) bnx2i_power_of2(PAGE_SIZE / BNX2I_CQE_SIZE);
 +              (u8) bnx2i_power_of2(CNIC_PAGE_SIZE / BNX2I_CQE_SIZE);
        iscsi_init.cq_num_wqes = hba->max_cqes;
        iscsi_init.cq_num_pages = (hba->max_cqes * BNX2I_CQE_SIZE +
 -                                 (PAGE_SIZE - 1)) / PAGE_SIZE;
 +                                 (CNIC_PAGE_SIZE - 1)) / CNIC_PAGE_SIZE;
        iscsi_init.sq_num_pages = (hba->max_sqes * BNX2I_SQ_WQE_SIZE +
 -                                 (PAGE_SIZE - 1)) / PAGE_SIZE;
 +                                 (CNIC_PAGE_SIZE - 1)) / CNIC_PAGE_SIZE;
        iscsi_init.rq_buffer_size = BNX2I_RQ_WQE_SIZE;
        iscsi_init.rq_num_wqes = hba->max_rqes;
  
@@@ -1361,7 -1361,7 +1361,7 @@@ int bnx2i_process_scsi_cmd_resp(struct 
        u32 datalen = 0;
  
        resp_cqe = (struct bnx2i_cmd_response *)cqe;
-       spin_lock_bh(&session->lock);
+       spin_lock_bh(&session->back_lock);
        task = iscsi_itt_to_task(conn,
                                 resp_cqe->itt & ISCSI_CMD_RESPONSE_INDEX);
        if (!task)
@@@ -1432,7 -1432,7 +1432,7 @@@ done
        __iscsi_complete_pdu(conn, (struct iscsi_hdr *)hdr,
                             conn->data, datalen);
  fail:
-       spin_unlock_bh(&session->lock);
+       spin_unlock_bh(&session->back_lock);
        return 0;
  }
  
@@@ -1457,7 -1457,7 +1457,7 @@@ static int bnx2i_process_login_resp(str
        int pad_len;
  
        login = (struct bnx2i_login_response *) cqe;
-       spin_lock(&session->lock);
+       spin_lock(&session->back_lock);
        task = iscsi_itt_to_task(conn,
                                 login->itt & ISCSI_LOGIN_RESPONSE_INDEX);
        if (!task)
                bnx2i_conn->gen_pdu.resp_buf,
                bnx2i_conn->gen_pdu.resp_wr_ptr - bnx2i_conn->gen_pdu.resp_buf);
  done:
-       spin_unlock(&session->lock);
+       spin_unlock(&session->back_lock);
        return 0;
  }
  
@@@ -1525,7 -1525,7 +1525,7 @@@ static int bnx2i_process_text_resp(stru
        int pad_len;
  
        text = (struct bnx2i_text_response *) cqe;
-       spin_lock(&session->lock);
+       spin_lock(&session->back_lock);
        task = iscsi_itt_to_task(conn, text->itt & ISCSI_LOGIN_RESPONSE_INDEX);
        if (!task)
                goto done;
                             bnx2i_conn->gen_pdu.resp_wr_ptr -
                             bnx2i_conn->gen_pdu.resp_buf);
  done:
-       spin_unlock(&session->lock);
+       spin_unlock(&session->back_lock);
        return 0;
  }
  
@@@ -1584,7 -1584,7 +1584,7 @@@ static int bnx2i_process_tmf_resp(struc
        struct iscsi_tm_rsp *resp_hdr;
  
        tmf_cqe = (struct bnx2i_tmf_response *)cqe;
-       spin_lock(&session->lock);
+       spin_lock(&session->back_lock);
        task = iscsi_itt_to_task(conn,
                                 tmf_cqe->itt & ISCSI_TMF_RESPONSE_INDEX);
        if (!task)
  
        __iscsi_complete_pdu(conn, (struct iscsi_hdr *)resp_hdr, NULL, 0);
  done:
-       spin_unlock(&session->lock);
+       spin_unlock(&session->back_lock);
        return 0;
  }
  
@@@ -1623,7 -1623,7 +1623,7 @@@ static int bnx2i_process_logout_resp(st
        struct iscsi_logout_rsp *resp_hdr;
  
        logout = (struct bnx2i_logout_response *) cqe;
-       spin_lock(&session->lock);
+       spin_lock(&session->back_lock);
        task = iscsi_itt_to_task(conn,
                                 logout->itt & ISCSI_LOGOUT_RESPONSE_INDEX);
        if (!task)
  
        bnx2i_conn->ep->state = EP_STATE_LOGOUT_RESP_RCVD;
  done:
-       spin_unlock(&session->lock);
+       spin_unlock(&session->back_lock);
        return 0;
  }
  
@@@ -1668,12 -1668,12 +1668,12 @@@ static void bnx2i_process_nopin_local_c
        struct iscsi_task *task;
  
        nop_in = (struct bnx2i_nop_in_msg *)cqe;
-       spin_lock(&session->lock);
+       spin_lock(&session->back_lock);
        task = iscsi_itt_to_task(conn,
                                 nop_in->itt & ISCSI_NOP_IN_MSG_INDEX);
        if (task)
                __iscsi_put_task(task);
-       spin_unlock(&session->lock);
+       spin_unlock(&session->back_lock);
  }
  
  /**
@@@ -1712,7 -1712,7 +1712,7 @@@ static int bnx2i_process_nopin_mesg(str
  
        nop_in = (struct bnx2i_nop_in_msg *)cqe;
  
-       spin_lock(&session->lock);
+       spin_lock(&session->back_lock);
        hdr = (struct iscsi_nopin *)&bnx2i_conn->gen_pdu.resp_hdr;
        memset(hdr, 0, sizeof(struct iscsi_hdr));
        hdr->opcode = nop_in->op_code;
        }
  done:
        __iscsi_complete_pdu(conn, (struct iscsi_hdr *)hdr, NULL, 0);
-       spin_unlock(&session->lock);
+       spin_unlock(&session->back_lock);
  
        return tgt_async_nop;
  }
@@@ -1771,7 -1771,7 +1771,7 @@@ static void bnx2i_process_async_mesg(st
                return;
        }
  
-       spin_lock(&session->lock);
+       spin_lock(&session->back_lock);
        resp_hdr = (struct iscsi_async *) &bnx2i_conn->gen_pdu.resp_hdr;
        memset(resp_hdr, 0, sizeof(struct iscsi_hdr));
        resp_hdr->opcode = async_cqe->op_code;
  
        __iscsi_complete_pdu(bnx2i_conn->cls_conn->dd_data,
                             (struct iscsi_hdr *)resp_hdr, NULL, 0);
-       spin_unlock(&session->lock);
+       spin_unlock(&session->back_lock);
  }
  
  
@@@ -1817,7 -1817,7 +1817,7 @@@ static void bnx2i_process_reject_mesg(s
        } else
                bnx2i_unsol_pdu_adjust_rq(bnx2i_conn);
  
-       spin_lock(&session->lock);
+       spin_lock(&session->back_lock);
        hdr = (struct iscsi_reject *) &bnx2i_conn->gen_pdu.resp_hdr;
        memset(hdr, 0, sizeof(struct iscsi_hdr));
        hdr->opcode = reject->op_code;
        hdr->ffffffff = cpu_to_be32(RESERVED_ITT);
        __iscsi_complete_pdu(conn, (struct iscsi_hdr *)hdr, conn->data,
                             reject->data_length);
-       spin_unlock(&session->lock);
+       spin_unlock(&session->back_lock);
  }
  
  /**
@@@ -1848,13 -1848,13 +1848,13 @@@ static void bnx2i_process_cmd_cleanup_r
        struct iscsi_task *task;
  
        cmd_clean_rsp = (struct bnx2i_cleanup_response *)cqe;
-       spin_lock(&session->lock);
+       spin_lock(&session->back_lock);
        task = iscsi_itt_to_task(conn,
                        cmd_clean_rsp->itt & ISCSI_CLEANUP_RESPONSE_INDEX);
        if (!task)
                printk(KERN_ALERT "bnx2i: cmd clean ITT %x not active\n",
                        cmd_clean_rsp->itt & ISCSI_CLEANUP_RESPONSE_INDEX);
-       spin_unlock(&session->lock);
+       spin_unlock(&session->back_lock);
        complete(&bnx2i_conn->cmd_cleanup_cmpl);
  }
  
@@@ -1921,11 -1921,11 +1921,11 @@@ static int bnx2i_queue_scsi_cmd_resp(st
        int rc = 0;
        int cpu;
  
-       spin_lock(&session->lock);
+       spin_lock(&session->back_lock);
        task = iscsi_itt_to_task(bnx2i_conn->cls_conn->dd_data,
                                 cqe->itt & ISCSI_CMD_RESPONSE_INDEX);
        if (!task || !task->sc) {
-               spin_unlock(&session->lock);
+               spin_unlock(&session->back_lock);
                return -EINVAL;
        }
        sc = task->sc;
        else
                cpu = sc->request->cpu;
  
-       spin_unlock(&session->lock);
+       spin_unlock(&session->back_lock);
  
        p = &per_cpu(bnx2i_percpu, cpu);
        spin_lock(&p->p_work_lock);
@@@ -525,7 -525,7 +525,7 @@@ static int bnx2i_setup_mp_bdt(struct bn
        struct iscsi_bd *mp_bdt;
        u64 addr;
  
 -      hba->mp_bd_tbl = dma_alloc_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +      hba->mp_bd_tbl = dma_alloc_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                            &hba->mp_bd_dma, GFP_KERNEL);
        if (!hba->mp_bd_tbl) {
                printk(KERN_ERR "unable to allocate Middle Path BDT\n");
                goto out;
        }
  
 -      hba->dummy_buffer = dma_alloc_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +      hba->dummy_buffer = dma_alloc_coherent(&hba->pcidev->dev,
 +                                             CNIC_PAGE_SIZE,
                                               &hba->dummy_buf_dma, GFP_KERNEL);
        if (!hba->dummy_buffer) {
                printk(KERN_ERR "unable to alloc Middle Path Dummy Buffer\n");
 -              dma_free_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +              dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                  hba->mp_bd_tbl, hba->mp_bd_dma);
                hba->mp_bd_tbl = NULL;
                rc = -1;
        addr = (unsigned long) hba->dummy_buf_dma;
        mp_bdt->buffer_addr_lo = addr & 0xffffffff;
        mp_bdt->buffer_addr_hi = addr >> 32;
 -      mp_bdt->buffer_length = PAGE_SIZE;
 +      mp_bdt->buffer_length = CNIC_PAGE_SIZE;
        mp_bdt->flags = ISCSI_BD_LAST_IN_BD_CHAIN |
                        ISCSI_BD_FIRST_IN_BD_CHAIN;
  out:
  static void bnx2i_free_mp_bdt(struct bnx2i_hba *hba)
  {
        if (hba->mp_bd_tbl) {
 -              dma_free_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +              dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                  hba->mp_bd_tbl, hba->mp_bd_dma);
                hba->mp_bd_tbl = NULL;
        }
        if (hba->dummy_buffer) {
 -              dma_free_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +              dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                  hba->dummy_buffer, hba->dummy_buf_dma);
                hba->dummy_buffer = NULL;
        }
@@@ -935,14 -934,14 +935,14 @@@ static void bnx2i_conn_free_login_resou
                                            struct bnx2i_conn *bnx2i_conn)
  {
        if (bnx2i_conn->gen_pdu.resp_bd_tbl) {
 -              dma_free_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +              dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                  bnx2i_conn->gen_pdu.resp_bd_tbl,
                                  bnx2i_conn->gen_pdu.resp_bd_dma);
                bnx2i_conn->gen_pdu.resp_bd_tbl = NULL;
        }
  
        if (bnx2i_conn->gen_pdu.req_bd_tbl) {
 -              dma_free_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +              dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                  bnx2i_conn->gen_pdu.req_bd_tbl,
                                  bnx2i_conn->gen_pdu.req_bd_dma);
                bnx2i_conn->gen_pdu.req_bd_tbl = NULL;
@@@ -999,13 -998,13 +999,13 @@@ static int bnx2i_conn_alloc_login_resou
        bnx2i_conn->gen_pdu.resp_wr_ptr = bnx2i_conn->gen_pdu.resp_buf;
  
        bnx2i_conn->gen_pdu.req_bd_tbl =
 -              dma_alloc_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +              dma_alloc_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                   &bnx2i_conn->gen_pdu.req_bd_dma, GFP_KERNEL);
        if (bnx2i_conn->gen_pdu.req_bd_tbl == NULL)
                goto login_req_bd_tbl_failure;
  
        bnx2i_conn->gen_pdu.resp_bd_tbl =
 -              dma_alloc_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +              dma_alloc_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                                   &bnx2i_conn->gen_pdu.resp_bd_dma,
                                   GFP_KERNEL);
        if (bnx2i_conn->gen_pdu.resp_bd_tbl == NULL)
        return 0;
  
  login_resp_bd_tbl_failure:
 -      dma_free_coherent(&hba->pcidev->dev, PAGE_SIZE,
 +      dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE,
                          bnx2i_conn->gen_pdu.req_bd_tbl,
                          bnx2i_conn->gen_pdu.req_bd_dma);
        bnx2i_conn->gen_pdu.req_bd_tbl = NULL;
@@@ -1170,10 -1169,10 +1170,10 @@@ static void bnx2i_cleanup_task(struct i
        if (task->state == ISCSI_TASK_ABRT_TMF) {
                bnx2i_send_cmd_cleanup_req(hba, task->dd_data);
  
-               spin_unlock_bh(&conn->session->lock);
+               spin_unlock_bh(&conn->session->back_lock);
                wait_for_completion_timeout(&bnx2i_conn->cmd_cleanup_cmpl,
                                msecs_to_jiffies(ISCSI_CMD_CLEANUP_TIMEOUT));
-               spin_lock_bh(&conn->session->lock);
+               spin_lock_bh(&conn->session->back_lock);
        }
        bnx2i_iscsi_unmap_sg_list(task->dd_data);
  }
@@@ -2060,7 -2059,7 +2060,7 @@@ int bnx2i_hw_ep_disconnect(struct bnx2i
                goto out;
  
        if (session) {
-               spin_lock_bh(&session->lock);
+               spin_lock_bh(&session->frwd_lock);
                if (bnx2i_ep->state != EP_STATE_TCP_FIN_RCVD) {
                        if (session->state == ISCSI_STATE_LOGGING_OUT) {
                                if (bnx2i_ep->state == EP_STATE_LOGOUT_SENT) {
                } else
                        close = 1;
  
-               spin_unlock_bh(&session->lock);
+               spin_unlock_bh(&session->frwd_lock);
        }
  
        bnx2i_ep->state = EP_STATE_DISCONN_START;
@@@ -300,7 -300,9 +300,9 @@@ store_shost_eh_deadline(struct device *
        int ret = -EINVAL;
        unsigned long deadline, flags;
  
-       if (shost->transportt && shost->transportt->eh_strategy_handler)
+       if (shost->transportt &&
+           (shost->transportt->eh_strategy_handler ||
+            !shost->hostt->eh_host_reset_handler))
                return ret;
  
        if (!strncmp(buf, "off", strlen("off")))
@@@ -383,17 -385,14 +385,14 @@@ static void scsi_device_dev_release_use
  {
        struct scsi_device *sdev;
        struct device *parent;
-       struct scsi_target *starget;
        struct list_head *this, *tmp;
        unsigned long flags;
  
        sdev = container_of(work, struct scsi_device, ew.work);
  
        parent = sdev->sdev_gendev.parent;
-       starget = to_scsi_target(parent);
  
        spin_lock_irqsave(sdev->host->host_lock, flags);
-       starget->reap_ref++;
        list_del(&sdev->siblings);
        list_del(&sdev->same_target_siblings);
        list_del(&sdev->starved_entry);
        /* NULL queue means the device can't be used */
        sdev->request_queue = NULL;
  
-       scsi_target_reap(scsi_target(sdev));
+       kfree(sdev->vpd_pg83);
+       kfree(sdev->vpd_pg80);
        kfree(sdev->inquiry);
        kfree(sdev);
  
@@@ -579,7 -578,6 +578,6 @@@ static int scsi_sdev_check_buf_bit(cons
   * Create the actual show/store functions and data structures.
   */
  sdev_rd_attr (device_blocked, "%d\n");
- sdev_rd_attr (queue_depth, "%d\n");
  sdev_rd_attr (device_busy, "%d\n");
  sdev_rd_attr (type, "%d\n");
  sdev_rd_attr (scsi_level, "%d\n");
@@@ -649,12 -647,23 +647,12 @@@ store_rescan_field (struct device *dev
  }
  static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field);
  
 -static void sdev_store_delete_callback(struct device *dev)
 -{
 -      scsi_remove_device(to_scsi_device(dev));
 -}
 -
  static ssize_t
  sdev_store_delete(struct device *dev, struct device_attribute *attr,
                  const char *buf, size_t count)
  {
 -      int rc;
 -
 -      /* An attribute cannot be unregistered by one of its own methods,
 -       * so we have to use this roundabout approach.
 -       */
 -      rc = device_schedule_callback(dev, sdev_store_delete_callback);
 -      if (rc)
 -              count = rc;
 +      if (device_remove_file_self(dev, attr))
 +              scsi_remove_device(to_scsi_device(dev));
        return count;
  };
  static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);
@@@ -712,10 -721,64 +710,64 @@@ show_queue_type_field(struct device *de
        return snprintf(buf, 20, "%s\n", name);
  }
  
- static DEVICE_ATTR(queue_type, S_IRUGO, show_queue_type_field, NULL);
+ static ssize_t
+ store_queue_type_field(struct device *dev, struct device_attribute *attr,
+                      const char *buf, size_t count)
+ {
+       struct scsi_device *sdev = to_scsi_device(dev);
+       struct scsi_host_template *sht = sdev->host->hostt;
+       int tag_type = 0, retval;
+       int prev_tag_type = scsi_get_tag_type(sdev);
+       if (!sdev->tagged_supported || !sht->change_queue_type)
+               return -EINVAL;
+       if (strncmp(buf, "ordered", 7) == 0)
+               tag_type = MSG_ORDERED_TAG;
+       else if (strncmp(buf, "simple", 6) == 0)
+               tag_type = MSG_SIMPLE_TAG;
+       else if (strncmp(buf, "none", 4) != 0)
+               return -EINVAL;
+       if (tag_type == prev_tag_type)
+               return count;
+       retval = sht->change_queue_type(sdev, tag_type);
+       if (retval < 0)
+               return retval;
+       return count;
+ }
+ static DEVICE_ATTR(queue_type, S_IRUGO | S_IWUSR, show_queue_type_field,
+                  store_queue_type_field);
+ #define sdev_vpd_pg_attr(_page)                                               \
+ static ssize_t                                                        \
+ show_vpd_##_page(struct file *filp, struct kobject *kobj,     \
+                struct bin_attribute *bin_attr,                        \
+                char *buf, loff_t off, size_t count)                   \
+ {                                                                     \
+       struct device *dev = container_of(kobj, struct device, kobj);   \
+       struct scsi_device *sdev = to_scsi_device(dev);                 \
+       if (!sdev->vpd_##_page)                                         \
+               return -EINVAL;                                         \
+       return memory_read_from_buffer(buf, count, &off,                \
+                                      sdev->vpd_##_page,               \
+                                      sdev->vpd_##_page##_len);        \
+ }                                                                     \
+ static struct bin_attribute dev_attr_vpd_##_page = {          \
+       .attr = {.name = __stringify(vpd_##_page), .mode = S_IRUGO },   \
+       .size = 0,                                                      \
+       .read = show_vpd_##_page,                                       \
+ };
+ sdev_vpd_pg_attr(pg83);
+ sdev_vpd_pg_attr(pg80);
  
  static ssize_t
- show_iostat_counterbits(struct device *dev, struct device_attribute *attr,                            char *buf)
+ show_iostat_counterbits(struct device *dev, struct device_attribute *attr,
+                       char *buf)
  {
        return snprintf(buf, 20, "%d\n", (int)sizeof(atomic_t) * 8);
  }
@@@ -786,46 -849,9 +838,9 @@@ DECLARE_EVT(soft_threshold_reached, SOF
  DECLARE_EVT(mode_parameter_change_reported, MODE_PARAMETER_CHANGE_REPORTED)
  DECLARE_EVT(lun_change_reported, LUN_CHANGE_REPORTED)
  
- /* Default template for device attributes.  May NOT be modified */
- static struct attribute *scsi_sdev_attrs[] = {
-       &dev_attr_device_blocked.attr,
-       &dev_attr_type.attr,
-       &dev_attr_scsi_level.attr,
-       &dev_attr_device_busy.attr,
-       &dev_attr_vendor.attr,
-       &dev_attr_model.attr,
-       &dev_attr_rev.attr,
-       &dev_attr_rescan.attr,
-       &dev_attr_delete.attr,
-       &dev_attr_state.attr,
-       &dev_attr_timeout.attr,
-       &dev_attr_eh_timeout.attr,
-       &dev_attr_iocounterbits.attr,
-       &dev_attr_iorequest_cnt.attr,
-       &dev_attr_iodone_cnt.attr,
-       &dev_attr_ioerr_cnt.attr,
-       &dev_attr_modalias.attr,
-       REF_EVT(media_change),
-       REF_EVT(inquiry_change_reported),
-       REF_EVT(capacity_change_reported),
-       REF_EVT(soft_threshold_reached),
-       REF_EVT(mode_parameter_change_reported),
-       REF_EVT(lun_change_reported),
-       NULL
- };
- static struct attribute_group scsi_sdev_attr_group = {
-       .attrs =        scsi_sdev_attrs,
- };
- static const struct attribute_group *scsi_sdev_attr_groups[] = {
-       &scsi_sdev_attr_group,
-       NULL
- };
  static ssize_t
- sdev_store_queue_depth_rw(struct device *dev, struct device_attribute *attr,
-                         const char *buf, size_t count)
+ sdev_store_queue_depth(struct device *dev, struct device_attribute *attr,
+                      const char *buf, size_t count)
  {
        int depth, retval;
        struct scsi_device *sdev = to_scsi_device(dev);
  
        return count;
  }
+ sdev_show_function(queue_depth, "%d\n");
  
- static struct device_attribute sdev_attr_queue_depth_rw =
-       __ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth,
-              sdev_store_queue_depth_rw);
+ static DEVICE_ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth,
+                  sdev_store_queue_depth);
  
  static ssize_t
  sdev_show_queue_ramp_up_period(struct device *dev,
@@@ -879,40 -905,79 +894,79 @@@ sdev_store_queue_ramp_up_period(struct 
        return period;
  }
  
- static struct device_attribute sdev_attr_queue_ramp_up_period =
-       __ATTR(queue_ramp_up_period, S_IRUGO | S_IWUSR,
-              sdev_show_queue_ramp_up_period,
-              sdev_store_queue_ramp_up_period);
+ static DEVICE_ATTR(queue_ramp_up_period, S_IRUGO | S_IWUSR,
+                  sdev_show_queue_ramp_up_period,
+                  sdev_store_queue_ramp_up_period);
  
- static ssize_t
- sdev_store_queue_type_rw(struct device *dev, struct device_attribute *attr,
-                        const char *buf, size_t count)
+ static umode_t scsi_sdev_attr_is_visible(struct kobject *kobj,
+                                        struct attribute *attr, int i)
  {
+       struct device *dev = container_of(kobj, struct device, kobj);
        struct scsi_device *sdev = to_scsi_device(dev);
-       struct scsi_host_template *sht = sdev->host->hostt;
-       int tag_type = 0, retval;
-       int prev_tag_type = scsi_get_tag_type(sdev);
  
-       if (!sdev->tagged_supported || !sht->change_queue_type)
-               return -EINVAL;
  
-       if (strncmp(buf, "ordered", 7) == 0)
-               tag_type = MSG_ORDERED_TAG;
-       else if (strncmp(buf, "simple", 6) == 0)
-               tag_type = MSG_SIMPLE_TAG;
-       else if (strncmp(buf, "none", 4) != 0)
-               return -EINVAL;
+       if (attr == &dev_attr_queue_depth.attr &&
+           !sdev->host->hostt->change_queue_depth)
+               return S_IRUGO;
  
-       if (tag_type == prev_tag_type)
-               return count;
+       if (attr == &dev_attr_queue_ramp_up_period.attr &&
+           !sdev->host->hostt->change_queue_depth)
+               return 0;
  
-       retval = sht->change_queue_type(sdev, tag_type);
-       if (retval < 0)
-               return retval;
+       if (attr == &dev_attr_queue_type.attr &&
+           !sdev->host->hostt->change_queue_type)
+               return S_IRUGO;
  
-       return count;
+       return attr->mode;
  }
  
+ /* Default template for device attributes.  May NOT be modified */
+ static struct attribute *scsi_sdev_attrs[] = {
+       &dev_attr_device_blocked.attr,
+       &dev_attr_type.attr,
+       &dev_attr_scsi_level.attr,
+       &dev_attr_device_busy.attr,
+       &dev_attr_vendor.attr,
+       &dev_attr_model.attr,
+       &dev_attr_rev.attr,
+       &dev_attr_rescan.attr,
+       &dev_attr_delete.attr,
+       &dev_attr_state.attr,
+       &dev_attr_timeout.attr,
+       &dev_attr_eh_timeout.attr,
+       &dev_attr_iocounterbits.attr,
+       &dev_attr_iorequest_cnt.attr,
+       &dev_attr_iodone_cnt.attr,
+       &dev_attr_ioerr_cnt.attr,
+       &dev_attr_modalias.attr,
+       &dev_attr_queue_depth.attr,
+       &dev_attr_queue_type.attr,
+       &dev_attr_queue_ramp_up_period.attr,
+       REF_EVT(media_change),
+       REF_EVT(inquiry_change_reported),
+       REF_EVT(capacity_change_reported),
+       REF_EVT(soft_threshold_reached),
+       REF_EVT(mode_parameter_change_reported),
+       REF_EVT(lun_change_reported),
+       NULL
+ };
+ static struct bin_attribute *scsi_sdev_bin_attrs[] = {
+       &dev_attr_vpd_pg83,
+       &dev_attr_vpd_pg80,
+       NULL
+ };
+ static struct attribute_group scsi_sdev_attr_group = {
+       .attrs =        scsi_sdev_attrs,
+       .bin_attrs =    scsi_sdev_bin_attrs,
+       .is_visible =   scsi_sdev_attr_is_visible,
+ };
+ static const struct attribute_group *scsi_sdev_attr_groups[] = {
+       &scsi_sdev_attr_group,
+       NULL
+ };
  static int scsi_target_add(struct scsi_target *starget)
  {
        int error;
        return 0;
  }
  
- static struct device_attribute sdev_attr_queue_type_rw =
-       __ATTR(queue_type, S_IRUGO | S_IWUSR, show_queue_type_field,
-              sdev_store_queue_type_rw);
  /**
   * scsi_sysfs_add_sdev - add scsi device to sysfs
   * @sdev:     scsi_device to add
@@@ -992,25 -1053,6 +1042,6 @@@ int scsi_sysfs_add_sdev(struct scsi_dev
        transport_add_device(&sdev->sdev_gendev);
        sdev->is_visible = 1;
  
-       /* create queue files, which may be writable, depending on the host */
-       if (sdev->host->hostt->change_queue_depth) {
-               error = device_create_file(&sdev->sdev_gendev,
-                                          &sdev_attr_queue_depth_rw);
-               error = device_create_file(&sdev->sdev_gendev,
-                                          &sdev_attr_queue_ramp_up_period);
-       }
-       else
-               error = device_create_file(&sdev->sdev_gendev, &dev_attr_queue_depth);
-       if (error)
-               return error;
-       if (sdev->host->hostt->change_queue_type)
-               error = device_create_file(&sdev->sdev_gendev, &sdev_attr_queue_type_rw);
-       else
-               error = device_create_file(&sdev->sdev_gendev, &dev_attr_queue_type);
-       if (error)
-               return error;
        error = bsg_register_queue(rq, &sdev->sdev_gendev, NULL, NULL);
  
        if (error)
@@@ -1060,6 -1102,13 +1091,13 @@@ void __scsi_remove_device(struct scsi_d
                sdev->host->hostt->slave_destroy(sdev);
        transport_destroy_device(dev);
  
+       /*
+        * Paired with the kref_get() in scsi_sysfs_initialize().  We have
+        * remoed sysfs visibility from the device, so make the target
+        * invisible if this was the last device underneath it.
+        */
+       scsi_target_reap(scsi_target(sdev));
        put_device(dev);
  }
  
@@@ -1122,7 -1171,7 +1160,7 @@@ void scsi_remove_target(struct device *
                        continue;
                if (starget->dev.parent == dev || &starget->dev == dev) {
                        /* assuming new targets arrive at the end */
-                       starget->reap_ref++;
+                       kref_get(&starget->reap_ref);
                        spin_unlock_irqrestore(shost->host_lock, flags);
                        if (last)
                                scsi_target_reap(last);
@@@ -1206,6 -1255,12 +1244,12 @@@ void scsi_sysfs_device_initialize(struc
        list_add_tail(&sdev->same_target_siblings, &starget->devices);
        list_add_tail(&sdev->siblings, &shost->__devices);
        spin_unlock_irqrestore(shost->host_lock, flags);
+       /*
+        * device can now only be removed via __scsi_remove_device() so hold
+        * the target.  Target will be held in CREATED state until something
+        * beneath it becomes visible (in which case it moves to RUNNING)
+        */
+       kref_get(&starget->reap_ref);
  }
  
  int scsi_is_sdev_device(const struct device *dev)
diff --combined include/linux/pci_ids.h
  #define PCI_DEVICE_ID_AMD_15H_NB_F5   0x1605
  #define PCI_DEVICE_ID_AMD_16H_NB_F3   0x1533
  #define PCI_DEVICE_ID_AMD_16H_NB_F4   0x1534
 +#define PCI_DEVICE_ID_AMD_16H_M30H_NB_F3 0x1583
 +#define PCI_DEVICE_ID_AMD_16H_M30H_NB_F4 0x1584
  #define PCI_DEVICE_ID_AMD_CNB17H_F3   0x1703
  #define PCI_DEVICE_ID_AMD_LANCE               0x2000
  #define PCI_DEVICE_ID_AMD_LANCE_HOME  0x2001
  #define PCI_DEVICE_ID_SI_7018         0x7018
  
  #define PCI_VENDOR_ID_HP              0x103c
+ #define PCI_VENDOR_ID_HP_3PAR         0x1590
  #define PCI_DEVICE_ID_HP_VISUALIZE_EG 0x1005
  #define PCI_DEVICE_ID_HP_VISUALIZE_FX6        0x1006
  #define PCI_DEVICE_ID_HP_VISUALIZE_FX4        0x1008
  
  #define PCI_VENDOR_ID_INTEL           0x8086
  #define PCI_DEVICE_ID_INTEL_EESSC     0x0008
 +#define PCI_DEVICE_ID_INTEL_SNB_IMC   0x0100
 +#define PCI_DEVICE_ID_INTEL_IVB_IMC   0x0154
 +#define PCI_DEVICE_ID_INTEL_HSW_IMC   0x0c00
  #define PCI_DEVICE_ID_INTEL_PXHD_0    0x0320
  #define PCI_DEVICE_ID_INTEL_PXHD_1    0x0321
  #define PCI_DEVICE_ID_INTEL_PXH_0     0x0329