Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
Linus Torvalds [Mon, 15 Oct 2007 15:19:33 +0000 (08:19 -0700)]
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (207 commits)
  [SCSI] gdth: fix CONFIG_ISA build failure
  [SCSI] esp_scsi: remove __dev{init,exit}
  [SCSI] gdth: !use_sg cleanup and use of scsi accessors
  [SCSI] gdth: Move members from SCp to gdth_cmndinfo, stage 2
  [SCSI] gdth: Setup proper per-command private data
  [SCSI] gdth: Remove gdth_ctr_tab[]
  [SCSI] gdth: switch to modern scsi host registration
  [SCSI] gdth: gdth_interrupt() gdth_get_status() & gdth_wait() fixes
  [SCSI] gdth: clean up host private data
  [SCSI] gdth: Remove virt hosts
  [SCSI] gdth: Reorder scsi_host_template intitializers
  [SCSI] gdth: kill gdth_{read,write}[bwl] wrappers
  [SCSI] gdth: Remove 2.4.x support, in-kernel changelog
  [SCSI] gdth: split out pci probing
  [SCSI] gdth: split out eisa probing
  [SCSI] gdth: split out isa probing
  gdth: Make one abuse of scsi_cmnd less obvious
  [SCSI] NCR5380: Use scsi_eh API for REQUEST_SENSE invocation
  [SCSI] usb storage: use scsi_eh API in REQUEST_SENSE execution
  [SCSI] scsi_error: Refactoring scsi_error to facilitate in synchronous REQUEST_SENSE
  ...

13 files changed:
1  2 
MAINTAINERS
arch/ia64/hp/sim/simscsi.c
drivers/infiniband/ulp/srp/ib_srp.c
drivers/message/fusion/mptlan.c
drivers/s390/scsi/zfcp_ccw.c
drivers/s390/scsi/zfcp_erp.c
drivers/scsi/Kconfig
drivers/scsi/aic94xx/aic94xx_task.c
drivers/scsi/esp_scsi.c
drivers/scsi/megaraid.c
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_sysfs.c
include/linux/pci_ids.h

diff --combined MAINTAINERS
@@@ -44,10 -44,9 +44,10 @@@ trivial patch so apply some common sens
        or does something very odd once a month document it.
  
        PLEASE remember that submissions must be made under the terms
 -      of the OSDL certificate of contribution
 -      (http://www.osdl.org/newsroom/press_releases/2004/2004_05_24_dco.html)
 -      and should include a Signed-off-by: line.
 +      of the OSDL certificate of contribution and should include a
 +      Signed-off-by: line.  The current version of this "Developer's
 +      Certificate of Origin" (DCO) is listed in the file
 +      Documentation/SubmittingPatches.
  
  6.    Make sure you have the right to send any changes you make. If you
        do changes at work you may find your employer owns the patch
@@@ -168,11 -167,11 +168,11 @@@ S:      Maintaine
  P:    Eric Van Hensbergen
  M:    ericvh@gmail.com
  P:    Ron Minnich
 -M:    rminnich@lanl.gov
 +M:    rminnich@sandia.gov
  P:    Latchesar Ionkov
  M:    lucho@ionkov.net
  L:    v9fs-developer@lists.sourceforge.net
 -W:    http://v9fs.sf.net
 +W:    http://swik.net/v9fs
  T:    git kernel.org:/pub/scm/linux/kernel/ericvh/v9fs.git
  S:    Maintained
  
@@@ -284,19 -283,17 +284,25 @@@ M:      corentin.labbe@geomatys.f
  L:    lm-sensors@lm-sensors.org
  S:    Maintained
  
 +ADM8211 WIRELESS DRIVER
 +P:    Michael Wu
 +M:    flamingice@sourmilk.net
 +L:    linux-wireless@vger.kernel.org
 +W:    http://linuxwireless.org/
 +T:    git kernel.org:/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
 +S:    Maintained
 +
  ADT746X FAN DRIVER
  P:    Colin Leroy
  M:    colin@colino.net
  S:    Maintained
  
+ ADVANSYS SCSI DRIVER
+ P:    Matthew Wilcox
+ M:    matthew@wil.cx
+ L:    linux-scsi@vger.kernel.org
+ S:    Maintained
  AEDSP16 DRIVER
  P:    Riccardo Facchetti
  M:    fizban@tin.it
@@@ -677,13 -674,6 +683,13 @@@ P:       Haavard Skinnemoe
  M:    hskinnemoen@atmel.com
  S:    Supported
  
 +ATMEL USBA UDC DRIVER
 +P:    Haavard Skinnemoen
 +M:    hskinnemoen@atmel.com
 +L:    kernel@avr32linux.org
 +W:    http://avr32linux.org/twiki/bin/view/Main/AtmelUsbDeviceDriver
 +S:    Supported
 +
  ATMEL WIRELESS DRIVER
  P:    Simon Kelley
  M:    simon@thekelleys.org.uk
@@@ -733,8 -723,34 +739,8 @@@ M:        rpurdie@rpsys.ne
  S:    Maintained
  
  BLACKFIN ARCHITECTURE
 -P:    Aubrey Li
 -M:    aubrey.li@analog.com
 -P:    Bernd Schmidt
 -M:    bernd.schmidt@analog.com
  P:    Bryan Wu
  M:    bryan.wu@analog.com
 -P:    Grace Pan
 -M:    grace.pan@analog.com
 -P:    Marc Hoffman
 -M:    marc.hoffman@analog.com
 -P:    Michael Hennerich
 -M:    michael.hennerich@analog.com
 -P:    Mike Frysinger
 -M:    michael.frysinger@analog.com
 -P:    Jerry Zeng
 -M:    jerry.zeng@analog.com
 -P:    Jie Zhang
 -M:    jie.zhang@analog.com
 -P:    Robin Getz
 -M:    robin.getz@analog.com
 -P:    Roy Huang
 -M:    roy.huang@analog.com
 -P:    Sonic Zhang
 -M:    sonic.zhang@analog.com
 -P:    Vivi Li
 -M:    vivi.li@analog.com
 -P:    Yi Li
 -M:    yi.li@analog.com
  L:    uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
  W:    http://blackfin.uclinux.org
  S:    Supported
@@@ -776,22 -792,6 +782,22 @@@ L:       linux-hams@vger.kernel.or
  W:    http://www.baycom.org/~tom/ham/ham.html
  S:    Maintained
  
 +B43 WIRELESS DRIVER
 +P:    Michael Buesch
 +M:    mb@bu3sch.de
 +P:    Stefano Brivio
 +M:    st3@riseup.net
 +L:    linux-wireless@vger.kernel.org
 +W:    http://bcm43xx.berlios.de/
 +S:    Maintained
 +
 +B43LEGACY WIRELESS DRIVER
 +P:    Larry Finger
 +M:    Larry.Finger@lwfinger.net
 +L:    linux-wireless@vger.kernel.org
 +W:    http://bcm43xx.berlios.de/
 +S:    Maintained
 +
  BCM43XX WIRELESS DRIVER (SOFTMAC BASED VERSION)
  P:    Larry Finger
  M:    Larry.Finger@lwfinger.net
@@@ -1015,7 -1015,7 +1021,7 @@@ P:      Steve Frenc
  M:    sfrench@samba.org
  L:    linux-cifs-client@lists.samba.org
  L:    samba-technical@lists.samba.org
 -W:    http://us1.samba.org/samba/Linux_CIFS_client.html
 +W:    http://linux-cifs.samba.org/
  T:    git kernel.org:/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git
  S:    Supported
  
@@@ -1255,6 -1255,12 +1261,6 @@@ L:     Eng.Linux@digi.co
  W:    http://www.digi.com
  S:    Orphaned
  
 -DIGI RIGHTSWITCH NETWORK DRIVER
 -P:    Rick Richardson
 -L:    netdev@vger.kernel.org
 -W:    http://www.digi.com
 -S:    Orphaned
 -
  DIRECTORY NOTIFICATION
  P:    Stephen Rothwell
  M:    sfr@canb.auug.org.au
@@@ -1542,7 -1548,7 +1548,7 @@@ P:      Pantelis Antonio
  M:    pantelis.antoniou@gmail.com
  P:    Vitaly Bordug
  M:    vbordug@ru.mvista.com
 -L:    linuxppc-embedded@ozlabs.org
 +L:    linuxppc-dev@ozlabs.org
  L:    netdev@vger.kernel.org
  S:    Maintained
  
@@@ -1550,14 -1556,14 +1556,14 @@@ FREESCALE HIGHSPEED USB DEVICE DRIVE
  P:    Li Yang
  M:    leoli@freescale.com
  L:    linux-usb-devel@lists.sourceforge.net
 -L:    linuxppc-embedded@ozlabs.org
 +L:    linuxppc-dev@ozlabs.org
  S:    Maintained
  
  FREESCALE QUICC ENGINE UCC ETHERNET DRIVER
  P:    Li Yang
  M:    leoli@freescale.com
  L:    netdev@vger.kernel.org
 -L:    linuxppc-embedded@ozlabs.org
 +L:    linuxppc-dev@ozlabs.org
  S:    Maintained
  
  FILE LOCKING (flock() and fcntl()/lockf())
@@@ -1660,8 -1666,7 +1666,8 @@@ P:      Mark M. Hoffma
  M:    mhoffman@lightlink.com
  L:    lm-sensors@lm-sensors.org
  W:    http://www.lm-sensors.org/
 -T:    git lm-sensors.org:/kernel/mhoffman/hwmon-2.6.git
 +T:    git lm-sensors.org:/kernel/mhoffman/hwmon-2.6.git testing
 +T:    git lm-sensors.org:/kernel/mhoffman/hwmon-2.6.git release
  S:    Maintained
  
  HARDWARE RANDOM NUMBER GENERATOR CORE
@@@ -1777,8 -1782,8 +1783,8 @@@ M:      venkatesh.pallipadi@intel.co
  S:    Maintained
  
  HPET: x86_64
 -P:    Andi Kleen and Vojtech Pavlik
 -M:    andi@firstfloor.org and vojtech@suse.cz
 +P:    Vojtech Pavlik
 +M:    vojtech@suse.cz
  S:    Maintained
  
  HPET: ACPI hpet.c
@@@ -1889,6 -1894,11 +1895,11 @@@ M:    Gadi Oxman <gadio@netvision.net.il
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  
+ IDE-SCSI DRIVER
+ L:    linux-ide@vger.kernel.org
+ L:    linux-scsi@vger.kernel.org
+ S:    Orphan
  IEEE 1394 SUBSYSTEM
  P:    Ben Collins
  M:    ben.collins@ubuntu.com
@@@ -2022,14 -2032,16 +2033,14 @@@ W:   http://sourceforge.net/projects/e100
  S:    Supported
  
  INTEL PRO/10GbE SUPPORT
 -P:    Jeff Kirsher
 -M:    jeffrey.t.kirsher@intel.com
  P:    Ayyappan Veeraiyan
  M:    ayyappan.veeraiyan@intel.com
 -P:    John Ronciak
 -M:    john.ronciak@intel.com
 -P:    Jesse Brandeburg
 -M:    jesse.brandeburg@intel.com
  P:    Auke Kok
  M:    auke-jan.h.kok@intel.com
 +P:    Jesse Brandeburg
 +M:    jesse.brandeburg@intel.com
 +P:    John Ronciak
 +M:    john.ronciak@intel.com
  L:    e1000-devel@lists.sourceforge.net
  W:    http://sourceforge.net/projects/e1000/
  S:    Supported
@@@ -2056,42 -2068,17 +2067,42 @@@ L:   http://lists.sourceforge.net/mailman
  W:    http://ipw2200.sourceforge.net
  S:    Supported
  
 -IOC3 DRIVER
 +INTEL WIRELESS WIFI LINK (iwlwifi)
 +P:    Zhu Yi
 +M:    yi.zhu@intel.com
 +L:    linux-wireless@vger.kernel.org
 +L:    ipw3945-devel@lists.sourceforge.net
 +W:    http://intellinuxwireless.org
 +T:    git git://intellinuxwireless.org/repos/iwlwifi
 +S:    Supported
 +
 +IOC3 ETHERNET DRIVER
  P:    Ralf Baechle
  M:    ralf@linux-mips.org
  L:    linux-mips@linux-mips.org
  S:    Maintained
  
 +IOC3 SERIAL DRIVER
 +P:    Pat Gefre
 +M:    pfg@sgi.com
 +L:    linux-kernel@linux-mips.org
 +S:    Maintained
 +
  IP MASQUERADING:
  P:    Juanjo Ciarlante
  M:    jjciarla@raiz.uncu.edu.ar
  S:    Maintained
  
 +IP1000A 10/100/1000 GIGABIT ETHERNET DRIVER
 +P:    Francois Romieu
 +M:    romieu@fr.zoreil.com
 +P:    Sorbica Shieh
 +M:    sorbica@icplus.com.tw
 +P:    Jesse Huang
 +M:    jesse@icplus.com.tw
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +
  IPATH DRIVER:
  P:    Arthur Jones
  M:    infinipath@qlogic.com
@@@ -2305,49 -2292,38 +2316,49 @@@ S:   Maintaine
  LINUX FOR POWERPC EMBEDDED MPC52XX
  P:    Sylvain Munaut
  M:    tnt@246tNt.com
 +P:    Grant Likely
 +M:    grant.likely@secretlab.ca
  W:    http://www.246tNt.com/mpc52xx/
  W:    http://www.penguinppc.org/
  L:    linuxppc-dev@ozlabs.org
  S:    Maintained
  
  LINUX FOR POWERPC EMBEDDED PPC4XX
 +P:    Josh Boyer
 +M:    jwboyer@linux.vnet.ibm.com
  P:    Matt Porter
  M:    mporter@kernel.crashing.org
  W:    http://www.penguinppc.org/
 -L:    linuxppc-embedded@ozlabs.org
 +L:    linuxppc-dev@ozlabs.org
 +T:    git kernel.org:/pub/scm/linux/kernel/git/jwboyer/powerpc.git
 +S:    Maintained
 +
 +LINUX FOR POWERPC EMBEDDED XILINX VIRTEX
 +P:    Grant Likely
 +M:    grant.likely@secretlab.ca
 +W:    http://wiki.secretlab.ca/index.php/Linux_on_Xilinx_Virtex
 +L:    linuxppc-dev@ozlabs.org
  S:    Maintained
  
  LINUX FOR POWERPC BOOT CODE
  P:    Tom Rini
  M:    trini@kernel.crashing.org
  W:    http://www.penguinppc.org/
 -L:    linuxppc-embedded@ozlabs.org
 +L:    linuxppc-dev@ozlabs.org
  S:    Maintained
  
  LINUX FOR POWERPC EMBEDDED PPC8XX
  P:    Marcelo Tosatti
  M:    marcelo@kvack.org
  W:    http://www.penguinppc.org/
 -L:    linuxppc-embedded@ozlabs.org
 +L:    linuxppc-dev@ozlabs.org
  S:    Maintained
  
  LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
  P:    Kumar Gala
  M:    galak@kernel.crashing.org
  W:    http://www.penguinppc.org/
 -L:    linuxppc-embedded@ozlabs.org
 +L:    linuxppc-dev@ozlabs.org
  S:    Maintained
  
  LINUX FOR POWERPC PA SEMI PWRFICIENT
@@@ -2404,7 -2380,7 +2415,7 @@@ LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI
  P:    Eric Moore
  M:    Eric.Moore@lsi.com
  M:    support@lsi.com
- L:    mpt_linux_developer@lsi.com
+ L:    DL-MPTFusionLinux@lsi.com
  L:    linux-scsi@vger.kernel.org
  W:    http://www.lsilogic.com/support
  S:    Supported
@@@ -2589,18 -2565,12 +2600,18 @@@ L:   linux-kernel@vger.kernel.or
  W:    http://www.atnf.csiro.au/~rgooch/linux/kernel-patches.html
  S:    Maintained
  
 -MULTIMEDIA CARD (MMC) AND SECURE DIGITAL (SD) SUBSYSTEM
 +MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM
  P:    Pierre Ossman
  M:    drzeus-mmc@drzeus.cx
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  
 +MULTIMEDIA CARD (MMC) ETC. OVER SPI
 +P:    David Brownell
 +M:    dbrownell@users.sourceforge.net
 +L:    linux-kernel@vger.kernel.org
 +S:    Odd fixes
 +
  MULTISOUND SOUND DRIVER
  P:    Andrew Veliath
  M:    andrewtv@usa.net
@@@ -2635,19 -2605,6 +2646,19 @@@ M:    shemminger@linux-foundation.or
  L:    netem@lists.linux-foundation.org
  S:    Maintained
  
 +NETERION (S2IO) Xframe 10GbE DRIVER
 +P:    Ramkrishna Vepa
 +M:    ram.vepa@neterion.com
 +P:    Rastapur Santosh
 +M:    santosh.rastapur@neterion.com
 +P:    Sivakumar Subramani
 +M:    sivakumar.subramani@neterion.com
 +P:    Sreenivasa Honnur
 +M:    sreenivasa.honnur@neterion.com
 +L:    netdev@vger.kernel.org
 +W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/TitleIndex?anonymous
 +S:    Supported
 +
  NETFILTER/IPTABLES/IPCHAINS
  P:    Rusty Russell
  P:    Marc Boucher
@@@ -2656,8 -2613,8 +2667,8 @@@ P:      Harald Welt
  P:    Jozsef Kadlecsik
  P:    Patrick McHardy
  M:    kaber@trash.net
 -L:    netfilter-devel@lists.netfilter.org
 -L:    netfilter@lists.netfilter.org (subscribers-only)
 +L:    netfilter-devel@vger.kernel.org
 +L:    netfilter@vger.kernel.org
  L:    coreteam@netfilter.org
  W:    http://www.netfilter.org/
  W:    http://www.iptables.org/
@@@ -2710,17 -2667,11 +2721,17 @@@ M:   jmorris@namei.or
  P:    Hideaki YOSHIFUJI
  M:    yoshfuji@linux-ipv6.org
  P:    Patrick McHardy
 -M:    kaber@coreworks.de
 +M:    kaber@trash.net
  L:    netdev@vger.kernel.org
  T:    git kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6.git
  S:    Maintained
  
 +NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK)
 +P:    Paul Moore
 +M:    paul.moore@hp.com
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +
  NETWORKING [WIRELESS]
  P:    John W. Linville
  M:    linville@tuxdriver.com
@@@ -2788,6 -2739,19 +2799,6 @@@ M:     adaplas@gmail.co
  L:    linux-fbdev-devel@lists.sourceforge.net (subscribers-only)
  S:    Maintained
  
 -NETERION (S2IO) Xframe 10GbE DRIVER
 -P:    Ramkrishna Vepa
 -M:    ram.vepa@neterion.com
 -P:    Rastapur Santosh
 -M:    santosh.rastapur@neterion.com
 -P:    Sivakumar Subramani
 -M:    sivakumar.subramani@neterion.com
 -P:    Sreenivasa Honnur
 -M:    sreenivasa.honnur@neterion.com
 -L:    netdev@vger.kernel.org
 -W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/TitleIndex?anonymous
 -S:    Supported
 -
  OPENCORES I2C BUS DRIVER
  P:    Peter Korsgaard
  M:    jacmet@sunsite.dk
@@@ -3009,7 -2973,7 +3020,7 @@@ POWERPC 4xx EMAC DRIVE
  P:    Eugene Surovegin
  M:    ebs@ebshome.net
  W:    http://kernel.ebshome.net/emac/
 -L:    linuxppc-embedded@ozlabs.org
 +L:    linuxppc-dev@ozlabs.org
  L:    netdev@vger.kernel.org
  S:    Maintained
  
@@@ -3053,14 -3017,6 +3064,14 @@@ L:    kpreempt-tech@lists.sourceforge.ne
  W:    ftp://ftp.kernel.org/pub/linux/kernel/people/rml/preempt-kernel
  S:    Supported
  
 +P54 WIRELESS DRIVER
 +P:    Michael Wu
 +M:    flamingice@sourmilk.net
 +L:    linux-wireless@vger.kernel.org
 +W:    http://prism54.org
 +T:    git kernel.org:/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
 +S:    Maintained
 +
  PRISM54 WIRELESS DRIVER
  P:    Luis R. Rodriguez
  M:    mcgrof@gmail.com
@@@ -3148,14 -3104,6 +3159,14 @@@ M:    corey@world.std.co
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
  
 +RALINK RT2X00 WLAN DRIVER
 +P:    rt2x00 project
 +L:    linux-wireless@vger.kernel.org
 +L:    rt2400-devel@lists.sourceforge.net
 +W:    http://rt2x00.serialmonkey.com/
 +S:    Maintained
 +F:    drivers/net/wireless/rt2x00/
 +
  RANDOM NUMBER DRIVER
  P:    Matt Mackall
  M:    mpm@selenic.com
@@@ -3241,8 -3189,8 +3252,8 @@@ W:      http://www.ibm.com/developerworks/li
  S:    Supported
  
  S390 NETWORK DRIVERS
 -P:    Frank Pavlic
 -M:    fpavlic@de.ibm.com
 +P:    Ursula Braun
 +M:    ubraun@linux.vnet.ibm.com
  M:    linux390@de.ibm.com
  L:    linux-s390@vger.kernel.org
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -3256,14 -3204,6 +3267,14 @@@ L:    linux-s390@vger.kernel.or
  W:    http://www.ibm.com/developerworks/linux/linux390/
  S:    Supported
  
 +S390 IUCV NETWORK LAYER
 +P:    Ursula Braun
 +M:    ubraun@linux.vnet.ibm.com
 +M:    linux390@de.ibm.com
 +L:    linux-s390@vger.kernel.org
 +W:    http://www.ibm.com/developerworks/linux/linux390/
 +S:    Supported
 +
  SAA7146 VIDEO4LINUX-2 DRIVER
  P:    Michael Hunold
  M:    michael@mihu.de
@@@ -3488,12 -3428,6 +3499,12 @@@ M:    tsbogend@alpha.franken.d
  L:    netdev@vger.kernel.org
  S:    Maintained
  
 +SONICS SILICON BACKPLANE DRIVER (SSB)
 +P:    Michael Buesch
 +M:    mb@bu3sch.de
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +
  SONY VAIO CONTROL DEVICE DRIVER
  P:    Mattia Dongili
  M:    malattia@linux.it
@@@ -3529,7 -3463,7 +3540,7 @@@ S:      Maintaine
  
  TPM DEVICE DRIVER
  P:    Kylene Hall
 -M:    kjhall@us.ibm.com
 +M:    tpmdd-devel@lists.sourceforge.net
  W:    http://tpmdd.sourceforge.net
  P:    Marcel Selhorst
  M:    tpm@selhorst.net
@@@ -3678,14 -3612,6 +3689,14 @@@ M:    hlhung3i@gmail.co
  W:    http://tcp-lp-mod.sourceforge.net/
  S:    Maintained
  
 +TEHUTI ETHERNET DRIVER
 +P:    Alexander Indenbaum
 +M:    baum@tehutinetworks.net
 +P:    Andy Gospodarek
 +M:    andy@greyhouse.net
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +
  TI FLASH MEDIA INTERFACE DRIVER
  P:      Alex Dubov
  M:      oakad@yahoo.com
@@@ -4178,7 -4104,7 +4189,7 @@@ W83791D HARDWARE MONITORING DRIVE
  P:    Charles Spirakis
  M:    bezaur@gmail.com
  L:    lm-sensors@lm-sensors.org
 -S:    Maintained
 +S:    Odd Fixes
  
  W83793 HARDWARE MONITORING DRIVER
  P:    Rudolf Marek
@@@ -4248,13 -4174,6 +4259,13 @@@ W:    http://oss.sgi.com/projects/xf
  T:    git git://oss.sgi.com:8090/xfs/xfs-2.6.git
  S:    Supported
  
 +XILINX SYSTEMACE DRIVER
 +P:    Grant Likely
 +M:    grant.likely@secretlab.ca
 +W:    http://www.secretlab.ca/
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +
  XILINX UARTLITE SERIAL DRIVER
  P:    Peter Korsgaard
  M:    jacmet@sunsite.dk
@@@ -4266,6 -4185,14 +4277,6 @@@ P:     Ingo Molna
  M:    mingo@redhat.com
  S:    Maintained
  
 -X86-64 port
 -P:    Andi Kleen
 -M:    ak@suse.de
 -L:    discuss@x86-64.org
 -W:    http://www.x86-64.org
 -T:    quilt ftp://ftp.firstfloor.org/pub/ak/x86_64/quilt-current
 -S:    Maintained
 -
  YAM DRIVER FOR AX.25
  P:    Jean-Paul Roubelat
  M:    jpr@f6fbb.org
@@@ -14,7 -14,6 +14,7 @@@
  #include <linux/kernel.h>
  #include <linux/timer.h>
  #include <asm/irq.h>
 +#include "hpsim_ssc.h"
  
  #include <scsi/scsi.h>
  #include <scsi/scsi_cmnd.h>
@@@ -60,6 -59,8 +60,6 @@@ struct disk_stat 
        unsigned count;
  };
  
 -extern long ia64_ssc (long arg0, long arg1, long arg2, long arg3, int nr);
 -
  static int desc[16] = {
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
  };
@@@ -372,8 -373,13 +372,13 @@@ simscsi_init(void
                return -ENOMEM;
  
        error = scsi_add_host(host, NULL);
-       if (!error)
-               scsi_scan_host(host);
+       if (error)
+               goto free_host;
+       scsi_scan_host(host);
+       return 0;
+  free_host:
+       scsi_host_put(host);
        return error;
  }
  
@@@ -47,6 -47,7 +47,7 @@@
  #include <scsi/scsi_device.h>
  #include <scsi/scsi_dbg.h>
  #include <scsi/srp.h>
+ #include <scsi/scsi_transport_srp.h>
  
  #include <rdma/ib_cache.h>
  
@@@ -75,17 -76,23 +76,19 @@@ module_param(topspin_workarounds, int, 
  MODULE_PARM_DESC(topspin_workarounds,
                 "Enable workarounds for Topspin/Cisco SRP target bugs if != 0");
  
 -static const u8 topspin_oui[3] = { 0x00, 0x05, 0xad };
 -
  static int mellanox_workarounds = 1;
  
  module_param(mellanox_workarounds, int, 0444);
  MODULE_PARM_DESC(mellanox_workarounds,
                 "Enable workarounds for Mellanox SRP target bugs if != 0");
  
 -static const u8 mellanox_oui[3] = { 0x00, 0x02, 0xc9 };
 -
  static void srp_add_one(struct ib_device *device);
  static void srp_remove_one(struct ib_device *device);
  static void srp_completion(struct ib_cq *cq, void *target_ptr);
  static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event);
  
+ static struct scsi_transport_template *ib_srp_transport_template;
  static struct ib_client srp_client = {
        .name   = "srp",
        .add    = srp_add_one,
@@@ -104,24 -111,6 +107,24 @@@ static const char *srp_target_info(stru
        return host_to_target(host)->target_name;
  }
  
 +static int srp_target_is_topspin(struct srp_target_port *target)
 +{
 +      static const u8 topspin_oui[3] = { 0x00, 0x05, 0xad };
 +      static const u8 cisco_oui[3]   = { 0x00, 0x1b, 0x0d };
 +
 +      return topspin_workarounds &&
 +              (!memcmp(&target->ioc_guid, topspin_oui, sizeof topspin_oui) ||
 +               !memcmp(&target->ioc_guid, cisco_oui, sizeof cisco_oui));
 +}
 +
 +static int srp_target_is_mellanox(struct srp_target_port *target)
 +{
 +      static const u8 mellanox_oui[3] = { 0x00, 0x02, 0xc9 };
 +
 +      return mellanox_workarounds &&
 +              !memcmp(&target->ioc_guid, mellanox_oui, sizeof mellanox_oui);
 +}
 +
  static struct srp_iu *srp_alloc_iu(struct srp_host *host, size_t size,
                                   gfp_t gfp_mask,
                                   enum dma_data_direction direction)
@@@ -285,7 -274,6 +288,7 @@@ static int srp_lookup_path(struct srp_t
                                                   target->srp_host->dev->dev,
                                                   target->srp_host->port,
                                                   &target->path,
 +                                                 IB_SA_PATH_REC_SERVICE_ID    |
                                                   IB_SA_PATH_REC_DGID          |
                                                   IB_SA_PATH_REC_SGID          |
                                                   IB_SA_PATH_REC_NUMB_PATH     |
@@@ -375,7 -363,7 +378,7 @@@ static int srp_send_req(struct srp_targ
         * zero out the first 8 bytes of our initiator port ID and set
         * the second 8 bytes to the local node GUID.
         */
 -      if (topspin_workarounds && !memcmp(&target->ioc_guid, topspin_oui, 3)) {
 +      if (srp_target_is_topspin(target)) {
                printk(KERN_DEBUG PFX "Topspin/Cisco initiator port ID workaround "
                       "activated for target GUID %016llx\n",
                       (unsigned long long) be64_to_cpu(target->ioc_guid));
@@@ -420,6 -408,7 +423,7 @@@ static void srp_remove_work(struct work
        list_del(&target->list);
        spin_unlock(&target->srp_host->target_lock);
  
+       srp_remove_host(target->scsi_host);
        scsi_remove_host(target->scsi_host);
        ib_destroy_cm_id(target->cm_id);
        srp_free_target_ib(target);
@@@ -600,8 -589,8 +604,8 @@@ static int srp_map_fmr(struct srp_targe
        if (!dev->fmr_pool)
                return -ENODEV;
  
 -      if ((ib_sg_dma_address(ibdev, &scat[0]) & ~dev->fmr_page_mask) &&
 -          mellanox_workarounds && !memcmp(&target->ioc_guid, mellanox_oui, 3))
 +      if (srp_target_is_mellanox(target) &&
 +          (ib_sg_dma_address(ibdev, &scat[0]) & ~dev->fmr_page_mask))
                return -EINVAL;
  
        len = page_cnt = 0;
@@@ -1102,7 -1091,8 +1106,7 @@@ static void srp_cm_rej_handler(struct i
                break;
  
        case IB_CM_REJ_PORT_REDIRECT:
 -              if (topspin_workarounds &&
 -                  !memcmp(&target->ioc_guid, topspin_oui, 3)) {
 +              if (srp_target_is_topspin(target)) {
                        /*
                         * Topspin/Cisco SRP gateways incorrectly send
                         * reject reason code 25 when they mean 24
@@@ -1544,12 -1534,24 +1548,24 @@@ static struct scsi_host_template srp_te
  
  static int srp_add_target(struct srp_host *host, struct srp_target_port *target)
  {
+       struct srp_rport_identifiers ids;
+       struct srp_rport *rport;
        sprintf(target->target_name, "SRP.T10:%016llX",
                 (unsigned long long) be64_to_cpu(target->id_ext));
  
        if (scsi_add_host(target->scsi_host, host->dev->dev->dma_device))
                return -ENODEV;
  
+       memcpy(ids.port_id, &target->id_ext, 8);
+       memcpy(ids.port_id + 8, &target->ioc_guid, 8);
+       ids.roles = SRP_RPORT_ROLE_TARGET;
+       rport = srp_rport_add(target->scsi_host, &ids);
+       if (IS_ERR(rport)) {
+               scsi_remove_host(target->scsi_host);
+               return PTR_ERR(rport);
+       }
        spin_lock(&host->target_lock);
        list_add_tail(&target->list, &host->target_list);
        spin_unlock(&host->target_lock);
@@@ -1693,7 -1695,6 +1709,7 @@@ static int srp_parse_options(const cha
                                goto out;
                        }
                        target->service_id = cpu_to_be64(simple_strtoull(p, NULL, 16));
 +                      target->path.service_id = target->service_id;
                        kfree(p);
                        break;
  
@@@ -1775,6 -1776,7 +1791,7 @@@ static ssize_t srp_create_target(struc
        if (!target_host)
                return -ENOMEM;
  
+       target_host->transportt = ib_srp_transport_template;
        target_host->max_lun     = SRP_MAX_LUN;
        target_host->max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)->cdb;
  
@@@ -2054,10 -2056,18 +2071,18 @@@ static void srp_remove_one(struct ib_de
        kfree(srp_dev);
  }
  
+ static struct srp_function_template ib_srp_transport_functions = {
+ };
  static int __init srp_init_module(void)
  {
        int ret;
  
+       ib_srp_transport_template =
+               srp_attach_transport(&ib_srp_transport_functions);
+       if (!ib_srp_transport_template)
+               return -ENOMEM;
        srp_template.sg_tablesize = srp_sg_tablesize;
        srp_max_iu_len = (sizeof (struct srp_cmd) +
                          sizeof (struct srp_indirect_buf) +
        ret = class_register(&srp_class);
        if (ret) {
                printk(KERN_ERR PFX "couldn't register class infiniband_srp\n");
+               srp_release_transport(ib_srp_transport_template);
                return ret;
        }
  
        ret = ib_register_client(&srp_client);
        if (ret) {
                printk(KERN_ERR PFX "couldn't register IB client\n");
+               srp_release_transport(ib_srp_transport_template);
                ib_sa_unregister_client(&srp_sa_client);
                class_unregister(&srp_class);
                return ret;
@@@ -2087,6 -2099,7 +2114,7 @@@ static void __exit srp_cleanup_module(v
        ib_unregister_client(&srp_client);
        ib_sa_unregister_client(&srp_sa_client);
        class_unregister(&srp_class);
+       srp_release_transport(ib_srp_transport_template);
  }
  
  module_init(srp_init_module);
@@@ -1,10 -1,10 +1,10 @@@
  /*
   *  linux/drivers/message/fusion/mptlan.c
   *      IP Over Fibre Channel device driver.
-  *      For use with LSI Logic Fibre Channel PCI chip/adapters
-  *      running LSI Logic Fusion MPT (Message Passing Technology) firmware.
+  *      For use with LSI Fibre Channel PCI chip/adapters
+  *      running LSI Fusion MPT (Message Passing Technology) firmware.
   *
-  *  Copyright (c) 2000-2007 LSI Logic Corporation
+  *  Copyright (c) 2000-2007 LSI Corporation
   *  (mailto:DL-MPTFusionLinux@lsi.com)
   *
   */
@@@ -154,7 -154,7 +154,7 @@@ static unsigned short mpt_lan_type_tran
  /*
   *  Fusion MPT LAN private data
   */
- static int LanCtx = -1;
+ static u8 LanCtx = MPT_MAX_PROTOCOL_DRIVERS;
  
  static u32 max_buckets_out = 127;
  static u32 tx_max_out_p = 127 - 16;
@@@ -165,12 -165,6 +165,6 @@@ DEFINE_RWLOCK(bad_naa_lock)
  #endif
  
  /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
- /*
-  * Fusion MPT LAN external data
-  */
- extern int mpt_lan_index;
- /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
  /**
   *    lan_reply - Handle all data sent from the hardware.
   *    @ioc: Pointer to MPT_ADAPTER structure
@@@ -1230,6 -1224,8 +1224,8 @@@ mpt_lan_post_receive_buckets(struct mpt
                }
                pRecvReq = (LANReceivePostRequest_t *) mf;
  
+               i = le16_to_cpu(mf->u.frame.hwhdr.msgctxu.fld.req_idx);
+               mpt_dev->RequestNB[i] = 0;
                count = buckets;
                if (count > max)
                        count = max;
@@@ -1351,10 -1347,11 +1347,11 @@@ mpt_lan_post_receive_buckets_work(struc
  static struct net_device *
  mpt_register_lan_device (MPT_ADAPTER *mpt_dev, int pnum)
  {
-       struct net_device *dev = alloc_fcdev(sizeof(struct mpt_lan_priv));
-       struct mpt_lan_priv *priv = NULL;
+       struct net_device *dev;
+       struct mpt_lan_priv *priv;
        u8 HWaddr[FC_ALEN], *a;
  
+       dev = alloc_fcdev(sizeof(struct mpt_lan_priv));
        if (!dev)
                return NULL;
  
        priv->mpt_dev = mpt_dev;
        priv->pnum = pnum;
  
-       memset(&priv->post_buckets_task, 0, sizeof(priv->post_buckets_task));
        INIT_DELAYED_WORK(&priv->post_buckets_task,
                          mpt_lan_post_receive_buckets_work);
        priv->post_buckets_active = 0;
        spin_lock_init(&priv->txfidx_lock);
        spin_lock_init(&priv->rxfidx_lock);
  
-       memset(&priv->stats, 0, sizeof(priv->stats));
        /*  Grab pre-fetched LANPage1 stuff. :-) */
        a = (u8 *) &mpt_dev->lan_cnfg_page1.HardwareAddressLow;
  
        dlprintk((KERN_INFO MYNAM ": Finished registering dev "
                "and setting initial values\n"));
  
 -      SET_MODULE_OWNER(dev);
 -
        if (register_netdev(dev) != 0) {
                free_netdev(dev);
                dev = NULL;
@@@ -1508,9 -1504,6 +1502,6 @@@ static int __init mpt_lan_init (void
                return -EBUSY;
        }
  
-       /* Set the callback index to be used by driver core for turbo replies */
-       mpt_lan_index = LanCtx;
        dlprintk((KERN_INFO MYNAM ": assigned context of %d\n", LanCtx));
  
        if (mpt_reset_register(LanCtx, mpt_lan_ioc_reset)) {
@@@ -1531,10 -1524,9 +1522,9 @@@ static void __exit mpt_lan_exit(void
        mpt_device_driver_deregister(MPTLAN_DRIVER);
        mpt_reset_deregister(LanCtx);
  
-       if (LanCtx >= 0) {
+       if (LanCtx) {
                mpt_deregister(LanCtx);
-               LanCtx = -1;
-               mpt_lan_index = 0;
+               LanCtx = MPT_MAX_PROTOCOL_DRIVERS;
        }
  }
  
@@@ -28,7 -28,7 +28,7 @@@ static void zfcp_ccw_remove(struct ccw_
  static int zfcp_ccw_set_online(struct ccw_device *);
  static int zfcp_ccw_set_offline(struct ccw_device *);
  static int zfcp_ccw_notify(struct ccw_device *, int);
 -static void zfcp_ccw_shutdown(struct device *);
 +static void zfcp_ccw_shutdown(struct ccw_device *);
  
  static struct ccw_device_id zfcp_ccw_device_id[] = {
        {CCW_DEVICE_DEVTYPE(ZFCP_CONTROL_UNIT_TYPE,
@@@ -51,7 -51,9 +51,7 @@@ static struct ccw_driver zfcp_ccw_drive
        .set_online  = zfcp_ccw_set_online,
        .set_offline = zfcp_ccw_set_offline,
        .notify      = zfcp_ccw_notify,
 -      .driver      = {
 -              .shutdown = zfcp_ccw_shutdown,
 -      },
 +      .shutdown    = zfcp_ccw_shutdown,
  };
  
  MODULE_DEVICE_TABLE(ccw, zfcp_ccw_device_id);
@@@ -148,15 -150,12 +148,12 @@@ zfcp_ccw_set_online(struct ccw_device *
        down(&zfcp_data.config_sema);
        adapter = dev_get_drvdata(&ccw_device->dev);
  
-       retval = zfcp_adapter_debug_register(adapter);
-       if (retval)
-               goto out;
        retval = zfcp_erp_thread_setup(adapter);
        if (retval) {
                ZFCP_LOG_INFO("error: start of error recovery thread for "
                              "adapter %s failed\n",
                              zfcp_get_busid_by_adapter(adapter));
-               goto out_erp_thread;
+               goto out;
        }
  
        retval = zfcp_adapter_scsi_register(adapter);
  
   out_scsi_register:
        zfcp_erp_thread_kill(adapter);
-  out_erp_thread:
-       zfcp_adapter_debug_unregister(adapter);
   out:
        up(&zfcp_data.config_sema);
        return retval;
@@@ -199,7 -196,6 +194,6 @@@ zfcp_ccw_set_offline(struct ccw_device 
        zfcp_erp_adapter_shutdown(adapter, 0);
        zfcp_erp_wait(adapter);
        zfcp_erp_thread_kill(adapter);
-       zfcp_adapter_debug_unregister(adapter);
        up(&zfcp_data.config_sema);
        return 0;
  }
@@@ -275,12 -271,12 +269,12 @@@ zfcp_ccw_register(void
   * Makes sure that QDIO queues are down when the system gets stopped.
   */
  static void
 -zfcp_ccw_shutdown(struct device *dev)
 +zfcp_ccw_shutdown(struct ccw_device *cdev)
  {
        struct zfcp_adapter *adapter;
  
        down(&zfcp_data.config_sema);
 -      adapter = dev_get_drvdata(dev);
 +      adapter = dev_get_drvdata(&cdev->dev);
        zfcp_erp_adapter_shutdown(adapter, 0);
        zfcp_erp_wait(adapter);
        up(&zfcp_data.config_sema);
@@@ -1,22 -1,22 +1,22 @@@
- /* 
+ /*
   * This file is part of the zfcp device driver for
   * FCP adapters for IBM System z9 and zSeries.
   *
   * (C) Copyright IBM Corp. 2002, 2006
-  * 
-  * This program is free software; you can redistribute it and/or modify 
-  * it under the terms of the GNU General Public License as published by 
-  * the Free Software Foundation; either version 2, or (at your option) 
-  * any later version. 
-  * 
-  * This program is distributed in the hope that it will be useful, 
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of 
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
-  * GNU General Public License for more details. 
-  * 
-  * You should have received a copy of the GNU General Public License 
-  * along with this program; if not, write to the Free Software 
-  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
+  *
+  * This program is free software; you can redistribute it and/or modify
+  * it under the terms of the GNU General Public License as published by
+  * the Free Software Foundation; either version 2, or (at your option)
+  * any later version.
+  *
+  * This program is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  * GNU General Public License for more details.
+  *
+  * You should have received a copy of the GNU General Public License
+  * along with this program; if not, write to the Free Software
+  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   */
  
  #define ZFCP_LOG_AREA                 ZFCP_LOG_AREA_ERP
@@@ -54,7 -54,7 +54,7 @@@ static int zfcp_erp_strategy_check_adap
  static int zfcp_erp_strategy_statechange(int, u32, struct zfcp_adapter *,
                                         struct zfcp_port *,
                                         struct zfcp_unit *, int);
 -static inline int zfcp_erp_strategy_statechange_detected(atomic_t *, u32);
 +static int zfcp_erp_strategy_statechange_detected(atomic_t *, u32);
  static int zfcp_erp_strategy_followup_actions(int, struct zfcp_adapter *,
                                              struct zfcp_port *,
                                              struct zfcp_unit *, int);
@@@ -106,8 -106,8 +106,8 @@@ static void zfcp_erp_action_cleanup(int
  static void zfcp_erp_action_ready(struct zfcp_erp_action *);
  static int  zfcp_erp_action_exists(struct zfcp_erp_action *);
  
 -static inline void zfcp_erp_action_to_ready(struct zfcp_erp_action *);
 -static inline void zfcp_erp_action_to_running(struct zfcp_erp_action *);
 +static void zfcp_erp_action_to_ready(struct zfcp_erp_action *);
 +static void zfcp_erp_action_to_running(struct zfcp_erp_action *);
  
  static void zfcp_erp_memwait_handler(unsigned long);
  
@@@ -191,7 -191,7 +191,7 @@@ void zfcp_fsf_start_timer(struct zfcp_f
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   called if an adapter failed,
   *            initiates adapter recovery which is done
@@@ -228,7 -228,7 +228,7 @@@ zfcp_erp_adapter_reopen_internal(struc
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   Wrappper for zfcp_erp_adapter_reopen_internal
   *              used to ensure the correct locking
@@@ -476,7 -476,7 +476,7 @@@ zfcp_test_link(struct zfcp_port *port
  
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   called if a port failed to be opened normally
   *            initiates Forced Reopen recovery which is done
@@@ -517,7 -517,7 +517,7 @@@ zfcp_erp_port_forced_reopen_internal(st
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   Wrappper for zfcp_erp_port_forced_reopen_internal
   *              used to ensure the correct locking
@@@ -543,7 -543,7 +543,7 @@@ zfcp_erp_port_forced_reopen(struct zfcp
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   called if a port is to be opened
   *            initiates Reopen recovery which is done
@@@ -612,7 -612,7 +612,7 @@@ zfcp_erp_port_reopen(struct zfcp_port *
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   called if a unit is to be opened
   *            initiates Reopen recovery which is done
@@@ -704,7 -704,7 +704,7 @@@ static void zfcp_erp_adapter_unblock(st
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   disable I/O,
   *            return any open requests and clean them up,
@@@ -725,7 -725,7 +725,7 @@@ zfcp_erp_port_block(struct zfcp_port *p
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   enable I/O
   *
@@@ -742,7 -742,7 +742,7 @@@ zfcp_erp_port_unblock(struct zfcp_port 
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   disable I/O,
   *            return any open requests and clean them up,
@@@ -763,7 -763,7 +763,7 @@@ zfcp_erp_unit_block(struct zfcp_unit *u
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   enable I/O
   *
@@@ -792,7 -792,7 +792,7 @@@ zfcp_erp_action_ready(struct zfcp_erp_a
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:
   *
@@@ -952,7 -952,7 +952,7 @@@ zfcp_erp_memwait_handler(unsigned long 
   *            action gets an appropriate flag and will be processed
   *            accordingly
   */
 -void zfcp_erp_timeout_handler(unsigned long data)
 +static void zfcp_erp_timeout_handler(unsigned long data)
  {
        struct zfcp_erp_action *erp_action = (struct zfcp_erp_action *) data;
        struct zfcp_adapter *adapter = erp_action->adapter;
   * zfcp_erp_action_dismiss - dismiss an erp_action
   *
   * adapter->erp_lock must be held
-  * 
+  *
   * Dismissal of an erp_action is usually required if an erp_action of
   * higher priority is generated.
   */
@@@ -1005,9 -1005,9 +1005,9 @@@ zfcp_erp_thread_setup(struct zfcp_adapt
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:
   *
@@@ -1094,7 -1094,7 +1094,7 @@@ zfcp_erp_thread(void *data
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   drives single error recovery action and schedules higher and
   *            subordinate actions, if necessary
@@@ -1206,7 -1206,7 +1206,7 @@@ zfcp_erp_strategy(struct zfcp_erp_actio
  
        /*
         * put this target through the erp mill again if someone has
-        * requested to change the status of a target being online 
+        * requested to change the status of a target being online
         * to offline or the other way around
         * (old retval is preserved if nothing has to be done here)
         */
   unlock:
        write_unlock(&adapter->erp_lock);
        read_unlock_irqrestore(&zfcp_data.config_lock, flags);
-       
        if (retval != ZFCP_ERP_CONTINUES)
                zfcp_erp_action_cleanup(action, adapter, port, unit, retval);
  
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:   ZFCP_ERP_DISMISSED      - if action has been dismissed
   *            retval                  - otherwise
@@@ -1322,7 -1322,7 +1322,7 @@@ zfcp_erp_strategy_do_action(struct zfcp
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   triggers retry of this action after a certain amount of time
   *            by means of timer provided by erp_action
@@@ -1346,7 -1346,7 +1346,7 @@@ zfcp_erp_strategy_memwait(struct zfcp_e
        return retval;
  }
  
- /* 
+ /*
   * function:    zfcp_erp_adapter_failed
   *
   * purpose:     sets the adapter and all underlying devices to ERP_FAILED
@@@ -1362,7 -1362,7 +1362,7 @@@ zfcp_erp_adapter_failed(struct zfcp_ada
        debug_text_event(adapter->erp_dbf, 2, "a_afail");
  }
  
- /* 
+ /*
   * function:    zfcp_erp_port_failed
   *
   * purpose:     sets the port and all underlying devices to ERP_FAILED
@@@ -1386,7 -1386,7 +1386,7 @@@ zfcp_erp_port_failed(struct zfcp_port *
        debug_event(port->adapter->erp_dbf, 2, &port->wwpn, sizeof (wwn_t));
  }
  
- /* 
+ /*
   * function:    zfcp_erp_unit_failed
   *
   * purpose:     sets the unit to ERP_FAILED
@@@ -1417,7 -1417,7 +1417,7 @@@ zfcp_erp_unit_failed(struct zfcp_unit *
   *              successfully is reset.
   *
   * returns:   ZFCP_ERP_CONTINUES      - action continues (not considered)
-  *            ZFCP_ERP_SUCCEEDED      - action finished successfully 
+  *            ZFCP_ERP_SUCCEEDED      - action finished successfully
   *            ZFCP_ERP_EXIT           - action failed and will not continue
   */
  static int
@@@ -1491,7 -1491,7 +1491,7 @@@ zfcp_erp_strategy_statechange(int actio
        return retval;
  }
  
 -static inline int
 +static int
  zfcp_erp_strategy_statechange_detected(atomic_t * target_status, u32 erp_status)
  {
        return
@@@ -1646,7 -1646,7 +1646,7 @@@ zfcp_erp_schedule_work(struct zfcp_uni
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   remaining things in good cases,
   *            escalation in bad cases
@@@ -1687,8 -1687,8 +1687,8 @@@ zfcp_erp_strategy_followup_actions(int 
                break;
  
        case ZFCP_ERP_ACTION_REOPEN_UNIT:
-               if (status == ZFCP_ERP_SUCCEEDED) ;     /* no further action */
-               else
+               /* Nothing to do if status == ZFCP_ERP_SUCCEEDED */
+               if (status != ZFCP_ERP_SUCCEEDED)
                        zfcp_erp_port_reopen_internal(unit->port, 0);
                break;
        }
@@@ -1815,7 -1815,7 +1815,7 @@@ zfcp_erp_modify_unit_status(struct zfcp
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   Wrappper for zfcp_erp_port_reopen_all_internal
   *              used to ensure the correct locking
@@@ -1852,9 -1852,9 +1852,9 @@@ zfcp_erp_port_reopen_all_internal(struc
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:   FIXME
   */
@@@ -1871,7 -1871,7 +1871,7 @@@ zfcp_erp_unit_reopen_all_internal(struc
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   this routine executes the 'Reopen Adapter' action
   *            (the entire action is processed synchronously, since
@@@ -1908,9 -1908,9 +1908,9 @@@ zfcp_erp_adapter_strategy(struct zfcp_e
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:   ZFCP_ERP_SUCCEEDED      - action finished successfully
   *              ZFCP_ERP_FAILED         - action finished unsuccessfully
@@@ -1930,9 -1930,9 +1930,9 @@@ zfcp_erp_adapter_strategy_close(struct 
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:   ZFCP_ERP_SUCCEEDED      - action finished successfully
   *              ZFCP_ERP_FAILED         - action finished unsuccessfully
@@@ -1957,7 -1957,7 +1957,7 @@@ zfcp_erp_adapter_strategy_open(struct z
   * purpose:   allocate the irq associated with this devno and register
   *            the FSF adapter with the SCSI stack
   *
-  * returns:   
+  * returns:
   */
  static int
  zfcp_erp_adapter_strategy_generic(struct zfcp_erp_action *erp_action, int close)
   * returns:   0 - successful setup
   *            !0 - failed setup
   */
 -int
 +static int
  zfcp_erp_adapter_strategy_open_qdio(struct zfcp_erp_action *erp_action)
  {
        int retval;
@@@ -2197,7 -2197,7 +2197,7 @@@ zfcp_erp_adapter_strategy_open_fsf_xpor
        zfcp_erp_action_to_running(erp_action);
        write_unlock_irq(&adapter->erp_lock);
  
-       ret = zfcp_fsf_exchange_port_data(erp_action, adapter, NULL);
+       ret = zfcp_fsf_exchange_port_data(erp_action);
        if (ret == -EOPNOTSUPP) {
                debug_text_event(adapter->erp_dbf, 3, "a_xport_notsupp");
                return ZFCP_ERP_SUCCEEDED;
@@@ -2249,7 -2249,7 +2249,7 @@@ zfcp_erp_adapter_strategy_open_fsf_stat
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   this routine executes the 'Reopen Physical Port' action
   *
@@@ -2308,7 -2308,7 +2308,7 @@@ zfcp_erp_port_forced_strategy(struct zf
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   this routine executes the 'Reopen Port' action
   *
@@@ -2530,7 -2530,7 +2530,7 @@@ zfcp_erp_port_strategy_open_nameserver(
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   makes the erp thread continue with reopen (physical) port
   *            actions which have been paused until the name server port
@@@ -2570,9 -2570,9 +2570,9 @@@ zfcp_erp_port_strategy_open_nameserver_
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:   ZFCP_ERP_CONTINUES      - action continues (asynchronously)
   *            ZFCP_ERP_FAILED         - action finished unsuccessfully
@@@ -2626,9 -2626,9 +2626,9 @@@ zfcp_erp_port_strategy_clearstati(struc
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:   ZFCP_ERP_CONTINUES      - action continues (asynchronously)
   *            ZFCP_ERP_FAILED         - action finished unsuccessfully
@@@ -2663,9 -2663,9 +2663,9 @@@ zfcp_erp_port_strategy_close(struct zfc
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:   ZFCP_ERP_CONTINUES      - action continues (asynchronously)
   *            ZFCP_ERP_FAILED         - action finished unsuccessfully
@@@ -2700,9 -2700,9 +2700,9 @@@ zfcp_erp_port_strategy_open_port(struc
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:   ZFCP_ERP_CONTINUES      - action continues (asynchronously)
   *            ZFCP_ERP_FAILED         - action finished unsuccessfully
@@@ -2737,7 -2737,7 +2737,7 @@@ zfcp_erp_port_strategy_open_common_look
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   this routine executes the 'Reopen Unit' action
   *            currently no retries
@@@ -2825,9 -2825,9 +2825,9 @@@ zfcp_erp_unit_strategy_clearstati(struc
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:   ZFCP_ERP_CONTINUES      - action continues (asynchronously)
   *            ZFCP_ERP_FAILED         - action finished unsuccessfully
@@@ -2865,9 -2865,9 +2865,9 @@@ zfcp_erp_unit_strategy_close(struct zfc
  }
  
  /*
-  * function:  
+  * function:
   *
-  * purpose:   
+  * purpose:
   *
   * returns:   ZFCP_ERP_CONTINUES      - action continues (asynchronously)
   *            ZFCP_ERP_FAILED         - action finished unsuccessfully
@@@ -2913,7 -2913,7 +2913,7 @@@ void zfcp_erp_start_timer(struct zfcp_f
  }
  
  /*
-  * function:  
+  * function:
   *
   * purpose:   enqueue the specified error recovery action, if needed
   *
@@@ -2992,7 -2992,7 +2992,7 @@@ zfcp_erp_action_enqueue(int action
                                              port->erp_action.action);
                                debug_text_event(adapter->erp_dbf, 4,
                                                 "pf_actenq_drp");
-                       } else 
+                       } else
                                debug_text_event(adapter->erp_dbf, 4,
                                                 "pf_actenq_drpcp");
                        debug_event(adapter->erp_dbf, 4, &port->wwpn,
@@@ -3248,7 -3248,8 +3248,7 @@@ static void zfcp_erp_action_dismiss_uni
                zfcp_erp_action_dismiss(&unit->erp_action);
  }
  
 -static inline void
 -zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action)
 +static void zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action)
  {
        struct zfcp_adapter *adapter = erp_action->adapter;
  
        list_move(&erp_action->list, &erp_action->adapter->erp_running_head);
  }
  
 -static inline void
 -zfcp_erp_action_to_ready(struct zfcp_erp_action *erp_action)
 +static void zfcp_erp_action_to_ready(struct zfcp_erp_action *erp_action)
  {
        struct zfcp_adapter *adapter = erp_action->adapter;
  
diff --combined drivers/scsi/Kconfig
@@@ -272,6 -272,13 +272,13 @@@ config SCSI_FC_ATTR
          each attached FiberChannel device to sysfs, say Y.
          Otherwise, say N.
  
+ config SCSI_FC_TGT_ATTRS
+       bool "SCSI target support for FiberChannel Transport Attributes"
+       depends on SCSI_FC_ATTRS
+       depends on SCSI_TGT = y || SCSI_TGT = SCSI_FC_ATTRS
+       help
+               If you want to use SCSI target mode drivers enable this option.
  config SCSI_ISCSI_ATTRS
        tristate "iSCSI Transport Attributes"
        depends on SCSI && NET
@@@ -289,6 -296,20 +296,20 @@@ config SCSI_SAS_ATTR
  
  source "drivers/scsi/libsas/Kconfig"
  
+ config SCSI_SRP_ATTRS
+       tristate "SRP Transport Attributes"
+       depends on SCSI
+       help
+         If you wish to export transport-specific information about
+         each attached SRP device to sysfs, say Y.
+ config SCSI_SRP_TGT_ATTRS
+       bool "SCSI target support for SRP Transport Attributes"
+       depends on SCSI_SRP_ATTRS
+       depends on SCSI_TGT = y || SCSI_TGT = SCSI_SRP_ATTRS
+       help
+               If you want to use SCSI target mode drivers enable this option.
  endmenu
  
  menuconfig SCSI_LOWLEVEL
@@@ -367,7 -388,6 +388,7 @@@ config SCSI_3W_9XX
  config SCSI_7000FASST
        tristate "7000FASST SCSI support"
        depends on ISA && SCSI && ISA_DMA_API
 +      select CHECK_SIGNATURE
        help
          This driver supports the Western Digital 7000 SCSI host adapter
          family.  Some information is in the source:
@@@ -389,7 -409,6 +410,7 @@@ config SCSI_AHA152
        tristate "Adaptec AHA152X/2825 support"
        depends on ISA && SCSI && !64BIT
        select SCSI_SPI_ATTRS
 +      select CHECK_SIGNATURE
        ---help---
          This is a driver for the AHA-1510, AHA-1520, AHA-1522, and AHA-2825
          SCSI host adapters. It also works for the AVA-1505, but the IRQ etc.
@@@ -502,7 -521,6 +523,6 @@@ config SCSI_ADVANSY
        tristate "AdvanSys SCSI support"
        depends on SCSI
        depends on ISA || EISA || PCI
-       depends on BROKEN || X86_32
        help
          This is a driver for all SCSI host adapters manufactured by
          AdvanSys. It is documented in the kernel source in
@@@ -524,19 -542,32 +544,32 @@@ config SCSI_IN200
          module will be called in2000.
  
  config SCSI_ARCMSR
-       tristate "ARECA ARC11X0[PCI-X]/ARC12X0[PCI-EXPRESS] SATA-RAID support"
+       tristate "ARECA (ARC11xx/12xx/13xx/16xx) SATA/SAS RAID Host Adapter"
        depends on PCI && SCSI
        help
-         This driver supports all of ARECA's SATA RAID controller cards.
+         This driver supports all of ARECA's SATA/SAS RAID controller cards.
          This is an ARECA-maintained driver by Erich Chen.
-         If you have any problems, please mail to: < erich@areca.com.tw >
+         If you have any problems, please mail to: <erich@areca.com.tw>.
          Areca supports Linux RAID config tools.
-         < http://www.areca.com.tw >
+         Please link <http://www.areca.com.tw>
  
          To compile this driver as a module, choose M here: the
          module will be called arcmsr (modprobe arcmsr).
  
+ config SCSI_ARCMSR_AER
+       bool "Enable PCI Error Recovery Capability in Areca Driver(ARCMSR)"
+       depends on SCSI_ARCMSR && PCIEAER
+       default n
+       help
+         The advanced error reporting(AER) capability is "NOT" provided by
+         ARC1200/1201/1202 SATA RAID controllers cards.
+         If your card is one of ARC1200/1201/1202, please use the default setting, n.
+         If your card is other models, you could pick it
+         on condition that the kernel version is greater than 2.6.19.
+         This function is maintained driver by Nick Cheng. If you have any
+         problems or suggestion, you are welcome to contact with <nick.cheng@areca.com.tw>.
+         To enable this function, choose Y here.
  source "drivers/scsi/megaraid/Kconfig.megaraid"
  
  config SCSI_HPTIOP
@@@ -585,7 -616,6 +618,7 @@@ config SCSI_DTC328
        tristate "DTC3180/3280 SCSI support"
        depends on ISA && SCSI
        select SCSI_SPI_ATTRS
 +      select CHECK_SIGNATURE
        help
          This is support for DTC 3180/3280 SCSI Host Adapters.  Please read
          the SCSI-HOWTO, available from
@@@ -660,7 -690,6 +693,7 @@@ config SCSI_EATA_PI
  config SCSI_FUTURE_DOMAIN
        tristate "Future Domain 16xx SCSI/AHA-2920A support"
        depends on (ISA || PCI) && SCSI
 +      select CHECK_SIGNATURE
        ---help---
          This is support for Future Domain's 16-bit SCSI host adapters
          (TMC-1660/1680, TMC-1650/1670, TMC-3260, TMC-1610M/MER/MEX) and
@@@ -836,6 -865,7 +869,7 @@@ config SCSI_IP
  config SCSI_IBMVSCSI
        tristate "IBM Virtual SCSI support"
        depends on PPC_PSERIES || PPC_ISERIES
+       select SCSI_SRP_ATTRS
        help
          This is the IBM POWER Virtual SCSI Client
  
  
  config SCSI_IBMVSCSIS
        tristate "IBM Virtual SCSI Server support"
-       depends on PPC_PSERIES && SCSI_TGT && SCSI_SRP
+       depends on PPC_PSERIES && SCSI_SRP && SCSI_SRP_TGT_ATTRS
        help
          This is the SRP target driver for IBM pSeries virtual environments.
  
@@@ -1328,7 -1358,6 +1362,7 @@@ config SCSI_LPF
  config SCSI_SEAGATE
        tristate "Seagate ST-02 and Future Domain TMC-8xx SCSI support"
        depends on X86 && ISA && SCSI
 +      select CHECK_SIGNATURE
        ---help---
          These are 8-bit SCSI controllers; the ST-01 is also supported by
          this driver.  It is explained in section 3.9 of the SCSI-HOWTO,
@@@ -1402,7 -1431,6 +1436,7 @@@ config SCSI_T12
        tristate "Trantor T128/T128F/T228 SCSI support"
        depends on ISA && SCSI
        select SCSI_SPI_ATTRS
 +      select CHECK_SIGNATURE
        ---help---
          This is support for a SCSI host adapter. It is explained in section
          3.11 of the SCSI-HOWTO, available from
@@@ -1567,7 -1595,7 +1601,7 @@@ config A3000_SCS
          built-in SCSI controller, say Y. Otherwise, say N.
  
          To compile this driver as a module, choose M here: the
 -        module will be called wd33c93.
 +        module will be called a3000.
  
  config A2091_SCSI
        tristate "A2091/A590 WD33C93A support"
          say N.
  
          To compile this driver as a module, choose M here: the
 -        module will be called wd33c93.
 +        module will be called a2091.
  
  config GVP11_SCSI
        tristate "GVP Series II WD33C93A support"
@@@ -207,7 -207,7 +207,7 @@@ static void asd_get_response_tasklet(st
                                            "stat(0x%x) is not CHECK_CONDITION"
                                            "\n",
                                            SAS_ADDR(task->dev->sas_addr),
-                                           ts->stat);
+                                           iu->status);
                        }
                }
        }  else {
@@@ -451,7 -451,7 +451,7 @@@ static int asd_build_smp_ascb(struct as
        struct scb *scb;
  
        pci_map_sg(asd_ha->pcidev, &task->smp_task.smp_req, 1,
 -                 PCI_DMA_FROMDEVICE);
 +                 PCI_DMA_TODEVICE);
        pci_map_sg(asd_ha->pcidev, &task->smp_task.smp_resp, 1,
                   PCI_DMA_FROMDEVICE);
  
@@@ -486,7 -486,7 +486,7 @@@ static void asd_unbuild_smp_ascb(struc
  
        BUG_ON(!task);
        pci_unmap_sg(a->ha->pcidev, &task->smp_task.smp_req, 1,
 -                   PCI_DMA_FROMDEVICE);
 +                   PCI_DMA_TODEVICE);
        pci_unmap_sg(a->ha->pcidev, &task->smp_task.smp_resp, 1,
                     PCI_DMA_FROMDEVICE);
  }
diff --combined drivers/scsi/esp_scsi.c
@@@ -2138,7 -2138,7 +2138,7 @@@ irqreturn_t scsi_esp_intr(int irq, voi
  }
  EXPORT_SYMBOL(scsi_esp_intr);
  
- static void __devinit esp_get_revision(struct esp *esp)
+ static void esp_get_revision(struct esp *esp)
  {
        u8 val;
  
        }
  }
  
- static void __devinit esp_init_swstate(struct esp *esp)
+ static void esp_init_swstate(struct esp *esp)
  {
        int i;
  
@@@ -2233,7 -2233,7 +2233,7 @@@ static void esp_bootup_reset(struct es
        esp_read8(ESP_INTRPT);
  }
  
- static void __devinit esp_set_clock_params(struct esp *esp)
+ static void esp_set_clock_params(struct esp *esp)
  {
        int fmhz;
        u8 ccf;
@@@ -2306,7 -2306,7 +2306,7 @@@ static const char *esp_chip_names[] = 
  
  static struct scsi_transport_template *esp_transport_template;
  
- int __devinit scsi_esp_register(struct esp *esp, struct device *dev)
+ int scsi_esp_register(struct esp *esp, struct device *dev)
  {
        static int instance;
        int err;
        esp->host->transportt = esp_transport_template;
        esp->host->max_lun = ESP_MAX_LUN;
        esp->host->cmd_per_lun = 2;
 +      esp->host->unique_id = instance;
  
        esp_set_clock_params(esp);
  
        if (err)
                return err;
  
 -      esp->host->unique_id = instance++;
 +      instance++;
  
        scsi_scan_host(esp->host);
  
  }
  EXPORT_SYMBOL(scsi_esp_register);
  
- void __devexit scsi_esp_unregister(struct esp *esp)
+ void scsi_esp_unregister(struct esp *esp)
  {
        scsi_remove_host(esp->host);
  }
diff --combined drivers/scsi/megaraid.c
@@@ -1753,14 -1753,6 +1753,14 @@@ mega_build_sglist(adapter_t *adapter, s
  
        *len = 0;
  
 +      if (scsi_sg_count(cmd) == 1 && !adapter->has_64bit_addr) {
 +              sg = scsi_sglist(cmd);
 +              scb->dma_h_bulkdata = sg_dma_address(sg);
 +              *buf = (u32)scb->dma_h_bulkdata;
 +              *len = sg_dma_len(sg);
 +              return 0;
 +      }
 +
        scsi_for_each_sg(cmd, sg, sgcnt, idx) {
                if (adapter->has_64bit_addr) {
                        scb->sgl64[idx].address = sg_dma_address(sg);
@@@ -4416,8 -4408,7 +4416,7 @@@ mega_internal_command(adapter_t *adapte
        scmd = &adapter->int_scmd;
        memset(scmd, 0, sizeof(Scsi_Cmnd));
  
-       sdev = kmalloc(sizeof(struct scsi_device), GFP_KERNEL);
-       memset(sdev, 0, sizeof(struct scsi_device));
+       sdev = kzalloc(sizeof(struct scsi_device), GFP_KERNEL);
        scmd->device = sdev;
  
        scmd->device->host = adapter->host;
diff --combined drivers/scsi/scsi_lib.c
@@@ -263,12 -263,25 +263,12 @@@ static int scsi_merge_bio(struct reques
                bio->bi_rw |= (1 << BIO_RW);
        blk_queue_bounce(q, &bio);
  
 -      if (!rq->bio)
 -              blk_rq_bio_prep(q, rq, bio);
 -      else if (!ll_back_merge_fn(q, rq, bio))
 -              return -EINVAL;
 -      else {
 -              rq->biotail->bi_next = bio;
 -              rq->biotail = bio;
 -      }
 -
 -      return 0;
 +      return blk_rq_append_bio(q, rq, bio);
  }
  
 -static int scsi_bi_endio(struct bio *bio, unsigned int bytes_done, int error)
 +static void scsi_bi_endio(struct bio *bio, int error)
  {
 -      if (bio->bi_size)
 -              return 1;
 -
        bio_put(bio);
 -      return 0;
  }
  
  /**
@@@ -288,7 -301,7 +288,7 @@@ static int scsi_req_map_sg(struct reque
  {
        struct request_queue *q = rq->q;
        int nr_pages = (bufflen + sgl[0].offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
-       unsigned int data_len = 0, len, bytes, off;
+       unsigned int data_len = bufflen, len, bytes, off;
        struct page *page;
        struct bio *bio = NULL;
        int i, err, nr_vecs = 0;
                page = sgl[i].page;
                off = sgl[i].offset;
                len = sgl[i].length;
-               data_len += len;
  
-               while (len > 0) {
+               while (len > 0 && data_len > 0) {
+                       /*
+                        * sg sends a scatterlist that is larger than
+                        * the data_len it wants transferred for certain
+                        * IO sizes
+                        */
                        bytes = min_t(unsigned int, len, PAGE_SIZE - off);
+                       bytes = min(bytes, data_len);
  
                        if (!bio) {
                                nr_vecs = min_t(int, BIO_MAX_PAGES, nr_pages);
                        if (bio->bi_vcnt >= nr_vecs) {
                                err = scsi_merge_bio(rq, bio);
                                if (err) {
 -                                      bio_endio(bio, bio->bi_size, 0);
 +                                      bio_endio(bio, 0);
                                        goto free_bios;
                                }
                                bio = NULL;
  
                        page++;
                        len -= bytes;
+                       data_len -=bytes;
                        off = 0;
                }
        }
  
        rq->buffer = rq->data = NULL;
-       rq->data_len = data_len;
+       rq->data_len = bufflen;
        return 0;
  
  free_bios:
                /*
                 * call endio instead of bio_put incase it was bounced
                 */
 -              bio_endio(bio, bio->bi_size, 0);
 +              bio_endio(bio, 0);
        }
  
        return err;
@@@ -430,6 -449,7 +436,7 @@@ EXPORT_SYMBOL_GPL(scsi_execute_async)
  static void scsi_init_cmd_errh(struct scsi_cmnd *cmd)
  {
        cmd->serial_number = 0;
+       cmd->resid = 0;
        memset(cmd->sense_buffer, 0, sizeof cmd->sense_buffer);
        if (cmd->cmd_len == 0)
                cmd->cmd_len = COMMAND_SIZE(cmd->cmnd[0]);
@@@ -924,11 -944,11 +931,11 @@@ void scsi_io_completion(struct scsi_cmn
                                        break;
                                }
                        }
-                       if (!(req->cmd_flags & REQ_QUIET)) {
-                               scmd_printk(KERN_INFO, cmd,
-                                           "Device not ready: ");
-                               scsi_print_sense_hdr("", &sshdr);
-                       }
+                       if (!(req->cmd_flags & REQ_QUIET))
+                               scsi_cmd_print_sense_hdr(cmd,
+                                                        "Device not ready",
+                                                        &sshdr);
                        scsi_end_request(cmd, 0, this_count, 1);
                        return;
                case VOLUME_OVERFLOW:
        }
        scsi_end_request(cmd, 0, this_count, !result);
  }
- EXPORT_SYMBOL(scsi_io_completion);
  
  /*
   * Function:    scsi_init_io()
@@@ -1019,9 -1038,6 +1025,6 @@@ static int scsi_init_io(struct scsi_cmn
        printk(KERN_ERR "req nr_sec %lu, cur_nr_sec %u\n", req->nr_sectors,
                        req->current_nr_sectors);
  
-       /* release the command and kill it */
-       scsi_release_buffers(cmd);
-       scsi_put_command(cmd);
        return BLKPREP_KILL;
  }
  
@@@ -1046,21 -1062,13 +1049,13 @@@ static struct scsi_cmnd *scsi_get_cmd_f
        return cmd;
  }
  
- static void scsi_blk_pc_done(struct scsi_cmnd *cmd)
- {
-       BUG_ON(!blk_pc_request(cmd->request));
-       /*
-        * This will complete the whole command with uptodate=1 so
-        * as far as the block layer is concerned the command completed
-        * successfully. Since this is a REQ_BLOCK_PC command the
-        * caller should check the request's errors value
-        */
-       scsi_io_completion(cmd, cmd->request_bufflen);
- }
- static int scsi_setup_blk_pc_cmnd(struct scsi_device *sdev, struct request *req)
+ int scsi_setup_blk_pc_cmnd(struct scsi_device *sdev, struct request *req)
  {
        struct scsi_cmnd *cmd;
+       int ret = scsi_prep_state_check(sdev, req);
+       if (ret != BLKPREP_OK)
+               return ret;
  
        cmd = scsi_get_cmd_from_req(sdev, req);
        if (unlikely(!cmd))
        cmd->transfersize = req->data_len;
        cmd->allowed = req->retries;
        cmd->timeout_per_command = req->timeout;
-       cmd->done = scsi_blk_pc_done;
        return BLKPREP_OK;
  }
+ EXPORT_SYMBOL(scsi_setup_blk_pc_cmnd);
  
  /*
   * Setup a REQ_TYPE_FS command.  These are simple read/write request
   * from filesystems that still need to be translated to SCSI CDBs from
   * the ULD.
   */
- static int scsi_setup_fs_cmnd(struct scsi_device *sdev, struct request *req)
+ int scsi_setup_fs_cmnd(struct scsi_device *sdev, struct request *req)
  {
        struct scsi_cmnd *cmd;
-       struct scsi_driver *drv;
-       int ret;
+       int ret = scsi_prep_state_check(sdev, req);
  
+       if (ret != BLKPREP_OK)
+               return ret;
        /*
         * Filesystem requests must transfer data.
         */
        if (unlikely(!cmd))
                return BLKPREP_DEFER;
  
-       ret = scsi_init_io(cmd);
-       if (unlikely(ret))
-               return ret;
-       /*
-        * Initialize the actual SCSI command for this request.
-        */
-       drv = *(struct scsi_driver **)req->rq_disk->private_data;
-       if (unlikely(!drv->init_command(cmd))) {
-               scsi_release_buffers(cmd);
-               scsi_put_command(cmd);
-               return BLKPREP_KILL;
-       }
-       return BLKPREP_OK;
+       return scsi_init_io(cmd);
  }
+ EXPORT_SYMBOL(scsi_setup_fs_cmnd);
  
- static int scsi_prep_fn(struct request_queue *q, struct request *req)
+ int scsi_prep_state_check(struct scsi_device *sdev, struct request *req)
  {
-       struct scsi_device *sdev = q->queuedata;
        int ret = BLKPREP_OK;
  
        /*
                                ret = BLKPREP_KILL;
                        break;
                }
-               if (ret != BLKPREP_OK)
-                       goto out;
        }
+       return ret;
+ }
+ EXPORT_SYMBOL(scsi_prep_state_check);
  
-       switch (req->cmd_type) {
-       case REQ_TYPE_BLOCK_PC:
-               ret = scsi_setup_blk_pc_cmnd(sdev, req);
-               break;
-       case REQ_TYPE_FS:
-               ret = scsi_setup_fs_cmnd(sdev, req);
-               break;
-       default:
-               /*
-                * All other command types are not supported.
-                *
-                * Note that these days the SCSI subsystem does not use
-                * REQ_TYPE_SPECIAL requests anymore.  These are only used
-                * (directly or via blk_insert_request) by non-SCSI drivers.
-                */
-               blk_dump_rq_flags(req, "SCSI bad req");
-               ret = BLKPREP_KILL;
-               break;
-       }
+ int scsi_prep_return(struct request_queue *q, struct request *req, int ret)
+ {
+       struct scsi_device *sdev = q->queuedata;
  
        switch (ret) {
        case BLKPREP_KILL:
                req->errors = DID_NO_CONNECT << 16;
+               /* release the command and kill it */
+               if (req->special) {
+                       struct scsi_cmnd *cmd = req->special;
+                       scsi_release_buffers(cmd);
+                       scsi_put_command(cmd);
+                       req->special = NULL;
+               }
                break;
        case BLKPREP_DEFER:
                /*
  
        return ret;
  }
+ EXPORT_SYMBOL(scsi_prep_return);
+ static int scsi_prep_fn(struct request_queue *q, struct request *req)
+ {
+       struct scsi_device *sdev = q->queuedata;
+       int ret = BLKPREP_KILL;
+       if (req->cmd_type == REQ_TYPE_BLOCK_PC)
+               ret = scsi_setup_blk_pc_cmnd(sdev, req);
+       return scsi_prep_return(q, req, ret);
+ }
  
  /*
   * scsi_dev_queue_ready: if we can send requests to sdev, return 1 else
@@@ -190,6 -190,46 +190,46 @@@ show_shost_state(struct class_device *c
  
  static CLASS_DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state);
  
+ static ssize_t
+ show_shost_mode(unsigned int mode, char *buf)
+ {
+       ssize_t len = 0;
+       if (mode & MODE_INITIATOR)
+               len = sprintf(buf, "%s", "Initiator");
+       if (mode & MODE_TARGET)
+               len += sprintf(buf + len, "%s%s", len ? ", " : "", "Target");
+       len += sprintf(buf + len, "\n");
+       return len;
+ }
+ static ssize_t show_shost_supported_mode(struct class_device *class_dev, char *buf)
+ {
+       struct Scsi_Host *shost = class_to_shost(class_dev);
+       if (shost->hostt->supported_mode == MODE_UNKNOWN)
+               return snprintf(buf, 20, "unknown\n");
+       else
+               return show_shost_mode(shost->hostt->supported_mode, buf);
+ }
+ static CLASS_DEVICE_ATTR(supported_mode, S_IRUGO | S_IWUSR, show_shost_supported_mode, NULL);
+ static ssize_t show_shost_active_mode(struct class_device *class_dev, char *buf)
+ {
+       struct Scsi_Host *shost = class_to_shost(class_dev);
+       if (shost->active_mode == MODE_UNKNOWN)
+               return snprintf(buf, 20, "unknown\n");
+       else
+               return show_shost_mode(shost->active_mode, buf);
+ }
+ static CLASS_DEVICE_ATTR(active_mode, S_IRUGO | S_IWUSR, show_shost_active_mode, NULL);
  shost_rd_attr(unique_id, "%u\n");
  shost_rd_attr(host_busy, "%hu\n");
  shost_rd_attr(cmd_per_lun, "%hd\n");
@@@ -208,6 -248,8 +248,8 @@@ static struct class_device_attribute *s
        &class_device_attr_proc_name,
        &class_device_attr_scan,
        &class_device_attr_state,
+       &class_device_attr_supported_mode,
+       &class_device_attr_active_mode,
        NULL
  };
  
@@@ -277,11 -319,16 +319,11 @@@ static int scsi_bus_match(struct devic
        return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0;
  }
  
 -static int scsi_bus_uevent(struct device *dev, char **envp, int num_envp,
 -                         char *buffer, int buffer_size)
 +static int scsi_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
  {
        struct scsi_device *sdev = to_scsi_device(dev);
 -      int i = 0;
 -      int length = 0;
  
 -      add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
 -                     "MODALIAS=" SCSI_DEVICE_MODALIAS_FMT, sdev->type);
 -      envp[i] = NULL;
 +      add_uevent_var(env, "MODALIAS=" SCSI_DEVICE_MODALIAS_FMT, sdev->type);
        return 0;
  }
  
@@@ -571,24 -618,31 +613,31 @@@ sdev_show_modalias(struct device *dev, 
  static DEVICE_ATTR(modalias, S_IRUGO, sdev_show_modalias, NULL);
  
  /* Default template for device attributes.  May NOT be modified */
- static struct device_attribute *scsi_sysfs_sdev_attrs[] = {
-       &dev_attr_device_blocked,
-       &dev_attr_queue_depth,
-       &dev_attr_queue_type,
-       &dev_attr_type,
-       &dev_attr_scsi_level,
-       &dev_attr_vendor,
-       &dev_attr_model,
-       &dev_attr_rev,
-       &dev_attr_rescan,
-       &dev_attr_delete,
-       &dev_attr_state,
-       &dev_attr_timeout,
-       &dev_attr_iocounterbits,
-       &dev_attr_iorequest_cnt,
-       &dev_attr_iodone_cnt,
-       &dev_attr_ioerr_cnt,
-       &dev_attr_modalias,
+ static struct attribute *scsi_sdev_attrs[] = {
+       &dev_attr_device_blocked.attr,
+       &dev_attr_type.attr,
+       &dev_attr_scsi_level.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_iocounterbits.attr,
+       &dev_attr_iorequest_cnt.attr,
+       &dev_attr_iodone_cnt.attr,
+       &dev_attr_ioerr_cnt.attr,
+       &dev_attr_modalias.attr,
+       NULL
+ };
+ static struct attribute_group scsi_sdev_attr_group = {
+       .attrs =        scsi_sdev_attrs,
+ };
+ static struct attribute_group *scsi_sdev_attr_groups[] = {
+       &scsi_sdev_attr_group,
        NULL
  };
  
@@@ -650,56 -704,6 +699,6 @@@ static struct device_attribute sdev_att
        __ATTR(queue_type, S_IRUGO | S_IWUSR, show_queue_type_field,
               sdev_store_queue_type_rw);
  
- static struct device_attribute *attr_changed_internally(
-               struct Scsi_Host *shost,
-               struct device_attribute * attr)
- {
-       if (!strcmp("queue_depth", attr->attr.name)
-           && shost->hostt->change_queue_depth)
-               return &sdev_attr_queue_depth_rw;
-       else if (!strcmp("queue_type", attr->attr.name)
-           && shost->hostt->change_queue_type)
-               return &sdev_attr_queue_type_rw;
-       return attr;
- }
- static struct device_attribute *attr_overridden(
-               struct device_attribute **attrs,
-               struct device_attribute *attr)
- {
-       int i;
-       if (!attrs)
-               return NULL;
-       for (i = 0; attrs[i]; i++)
-               if (!strcmp(attrs[i]->attr.name, attr->attr.name))
-                       return attrs[i];
-       return NULL;
- }
- static int attr_add(struct device *dev, struct device_attribute *attr)
- {
-       struct device_attribute *base_attr;
-       /*
-        * Spare the caller from having to copy things it's not interested in.
-        */
-       base_attr = attr_overridden(scsi_sysfs_sdev_attrs, attr);
-       if (base_attr) {
-               /* extend permissions */
-               attr->attr.mode |= base_attr->attr.mode;
-               /* override null show/store with default */
-               if (!attr->show)
-                       attr->show = base_attr->show;
-               if (!attr->store)
-                       attr->store = base_attr->store;
-       }
-       return device_create_file(dev, attr);
- }
  /**
   * scsi_sysfs_add_sdev - add scsi device to sysfs
   * @sdev:     scsi_device to add
@@@ -731,6 -735,24 +730,24 @@@ int scsi_sysfs_add_sdev(struct scsi_dev
         * released by the sdev_class .release */
        get_device(&sdev->sdev_gendev);
  
+       /* 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);
+       else
+               error = device_create_file(&sdev->sdev_gendev, &dev_attr_queue_depth);
+       if (error) {
+               __scsi_remove_device(sdev);
+               goto out;
+       }
+       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) {
+               __scsi_remove_device(sdev);
+               goto out;
+       }
        error = bsg_register_queue(rq, &sdev->sdev_gendev, NULL);
  
        if (error)
         * nothing went wrong */
        error = 0;
  
+       /* add additional host specific attributes */
        if (sdev->host->hostt->sdev_attrs) {
                for (i = 0; sdev->host->hostt->sdev_attrs[i]; i++) {
-                       error = attr_add(&sdev->sdev_gendev,
+                       error = device_create_file(&sdev->sdev_gendev,
                                        sdev->host->hostt->sdev_attrs[i]);
                        if (error) {
                                __scsi_remove_device(sdev);
                        }
                }
        }
-       
-       for (i = 0; scsi_sysfs_sdev_attrs[i]; i++) {
-               if (!attr_overridden(sdev->host->hostt->sdev_attrs,
-                                       scsi_sysfs_sdev_attrs[i])) {
-                       struct device_attribute * attr = 
-                               attr_changed_internally(sdev->host, 
-                                                       scsi_sysfs_sdev_attrs[i]);
-                       error = device_create_file(&sdev->sdev_gendev, attr);
-                       if (error) {
-                               __scsi_remove_device(sdev);
-                               goto out;
-                       }
-               }
-       }
  
        transport_add_device(&sdev->sdev_gendev);
   out:
@@@ -951,6 -960,12 +955,12 @@@ int scsi_sysfs_add_host(struct Scsi_Hos
        return 0;
  }
  
+ static struct device_type scsi_dev_type = {
+       .name =         "scsi_device",
+       .release =      scsi_device_dev_release,
+       .groups =       scsi_sdev_attr_groups,
+ };
  void scsi_sysfs_device_initialize(struct scsi_device *sdev)
  {
        unsigned long flags;
  
        device_initialize(&sdev->sdev_gendev);
        sdev->sdev_gendev.bus = &scsi_bus_type;
-       sdev->sdev_gendev.release = scsi_device_dev_release;
+       sdev->sdev_gendev.type = &scsi_dev_type;
        sprintf(sdev->sdev_gendev.bus_id,"%d:%d:%d:%d",
                sdev->host->host_no, sdev->channel, sdev->id,
                sdev->lun);
  
  int scsi_is_sdev_device(const struct device *dev)
  {
-       return dev->release == scsi_device_dev_release;
+       return dev->type == &scsi_dev_type;
  }
  EXPORT_SYMBOL(scsi_is_sdev_device);
  
diff --combined include/linux/pci_ids.h
  #define PCI_DEVICE_ID_ATI_RS400_166     0x5a32
  #define PCI_DEVICE_ID_ATI_RS400_200     0x5a33
  #define PCI_DEVICE_ID_ATI_RS480         0x5950
 +#define PCI_DEVICE_ID_ATI_RD580               0x5952
 +#define PCI_DEVICE_ID_ATI_RX790               0x5957
 +#define PCI_DEVICE_ID_ATI_RS690               0x7910
  /* ATI IXP Chipset */
  #define PCI_DEVICE_ID_ATI_IXP200_IDE  0x4349
  #define PCI_DEVICE_ID_ATI_IXP200_SMBUS        0x4353
  #define PCI_DEVICE_ID_ATI_IXP400_SATA   0x4379
  #define PCI_DEVICE_ID_ATI_IXP400_SATA2        0x437a
  #define PCI_DEVICE_ID_ATI_IXP600_SATA 0x4380
 -#define PCI_DEVICE_ID_ATI_IXP600_SMBUS        0x4385
 +#define PCI_DEVICE_ID_ATI_SBX00_SMBUS 0x4385
  #define PCI_DEVICE_ID_ATI_IXP600_IDE  0x438c
  #define PCI_DEVICE_ID_ATI_IXP700_SATA 0x4390
 -#define PCI_DEVICE_ID_ATI_IXP700_SMBUS        0x4395
  #define PCI_DEVICE_ID_ATI_IXP700_IDE  0x439c
  
  #define PCI_VENDOR_ID_VLSI            0x1004
  #define PCI_DEVICE_ID_UMC_UM8886BF    0x673a
  #define PCI_DEVICE_ID_UMC_UM8886A     0x886a
  
 +#define PCI_VENDOR_ID_PICOPOWER               0x1066
 +#define PCI_DEVICE_ID_PICOPOWER_PT86C523      0x0002
 +#define PCI_DEVICE_ID_PICOPOWER_PT86C523BBP   0x8002
  
  #define PCI_VENDOR_ID_MYLEX           0x1069
  #define PCI_DEVICE_ID_MYLEX_DAC960_P  0x0001
  #define PCI_DEVICE_ID_VIA_VT3324      0x0324
  #define PCI_DEVICE_ID_VIA_VT3336      0x0336
  #define PCI_DEVICE_ID_VIA_VT3351      0x0351
 +#define PCI_DEVICE_ID_VIA_VT3364      0x0364
  #define PCI_DEVICE_ID_VIA_8371_0      0x0391
  #define PCI_DEVICE_ID_VIA_8501_0      0x0501
  #define PCI_DEVICE_ID_VIA_82C561      0x0561
  #define PCI_DEVICE_ID_VIA_8231_4      0x8235
  #define PCI_DEVICE_ID_VIA_8365_1      0x8305
  #define PCI_DEVICE_ID_VIA_CX700               0x8324
 +#define PCI_DEVICE_ID_VIA_VX800               0x8353
  #define PCI_DEVICE_ID_VIA_8371_1      0x8391
  #define PCI_DEVICE_ID_VIA_82C598_1    0x8598
  #define PCI_DEVICE_ID_VIA_838X_1      0xB188
  #define PCI_DEVICE_ID_TOSHIBA_TC86C001_MISC   0x0108
  #define PCI_DEVICE_ID_TOSHIBA_SPIDER_NET 0x01b3
  
+ #define PCI_VENDOR_ID_ATTO            0x117c
  #define PCI_VENDOR_ID_RICOH           0x1180
  #define PCI_DEVICE_ID_RICOH_RL5C465   0x0465
  #define PCI_DEVICE_ID_RICOH_RL5C466   0x0466
  #define PCI_DEVICE_ID_RICOH_RL5C476   0x0476
  #define PCI_DEVICE_ID_RICOH_RL5C478   0x0478
  #define PCI_DEVICE_ID_RICOH_R5C822    0x0822
 +#define PCI_DEVICE_ID_RICOH_R5C832    0x0832
 +#define PCI_DEVICE_ID_RICOH_R5C843    0x0843
  
  #define PCI_VENDOR_ID_DLINK           0x1186
  #define PCI_DEVICE_ID_DLINK_DGE510T   0x4c00
  
  #define PCI_VENDOR_ID_RADISYS         0x1331
  
 +#define PCI_VENDOR_ID_MICRO_MEMORY            0x1332
 +#define PCI_DEVICE_ID_MICRO_MEMORY_5415CN     0x5415
 +#define PCI_DEVICE_ID_MICRO_MEMORY_5425CN     0x5425
 +#define PCI_DEVICE_ID_MICRO_MEMORY_6155               0x6155
 +
  #define PCI_VENDOR_ID_DOMEX           0x134a
  #define PCI_DEVICE_ID_DOMEX_DMX3191D  0x0001
  
  #define PCI_VENDOR_ID_ABOCOM          0x13D1
  #define PCI_DEVICE_ID_ABOCOM_2BD1       0x2BD1
  
 +#define PCI_VENDOR_ID_SUNDANCE                0x13f0
 +
  #define PCI_VENDOR_ID_CMEDIA          0x13f6
  #define PCI_DEVICE_ID_CMEDIA_CM8338A  0x0100
  #define PCI_DEVICE_ID_CMEDIA_CM8338B  0x0101
  #define PCI_DEVICE_ID_TIGON3_5751M    0x167d
  #define PCI_DEVICE_ID_TIGON3_5751F    0x167e
  #define PCI_DEVICE_ID_TIGON3_5787F    0x167f
 +#define PCI_DEVICE_ID_TIGON3_5761E    0x1680
 +#define PCI_DEVICE_ID_TIGON3_5761     0x1681
 +#define PCI_DEVICE_ID_TIGON3_5764     0x1684
  #define PCI_DEVICE_ID_TIGON3_5787M    0x1693
  #define PCI_DEVICE_ID_TIGON3_5782     0x1696
 +#define PCI_DEVICE_ID_TIGON3_5784     0x1698
  #define PCI_DEVICE_ID_TIGON3_5786     0x169a
  #define PCI_DEVICE_ID_TIGON3_5787     0x169b
  #define PCI_DEVICE_ID_TIGON3_5788     0x169c
  #define PCI_DEVICE_ID_ARECA_1130      0x1130
  #define PCI_DEVICE_ID_ARECA_1160      0x1160
  #define PCI_DEVICE_ID_ARECA_1170      0x1170
+ #define PCI_DEVICE_ID_ARECA_1200      0x1200
+ #define PCI_DEVICE_ID_ARECA_1201      0x1201
+ #define PCI_DEVICE_ID_ARECA_1202      0x1202
  #define PCI_DEVICE_ID_ARECA_1210      0x1210
  #define PCI_DEVICE_ID_ARECA_1220      0x1220
  #define PCI_DEVICE_ID_ARECA_1230      0x1230
  #define PCI_DEVICE_ID_MPC8568         0x0021
  #define PCI_DEVICE_ID_MPC8567E                0x0022
  #define PCI_DEVICE_ID_MPC8567         0x0023
 -#define PCI_DEVICE_ID_MPC8544E                0x0030
 -#define PCI_DEVICE_ID_MPC8544         0x0031
 +#define PCI_DEVICE_ID_MPC8533E                0x0030
 +#define PCI_DEVICE_ID_MPC8533         0x0031
 +#define PCI_DEVICE_ID_MPC8544E                0x0032
 +#define PCI_DEVICE_ID_MPC8544         0x0033
 +#define PCI_DEVICE_ID_MPC8572E                0x0040
 +#define PCI_DEVICE_ID_MPC8572         0x0041
  #define PCI_DEVICE_ID_MPC8641         0x7010
  #define PCI_DEVICE_ID_MPC8641D                0x7011
 +#define PCI_DEVICE_ID_MPC8610         0x7018
  
  #define PCI_VENDOR_ID_PASEMI          0x1959
  
  #define PCI_VENDOR_ID_TEKRAM          0x1de1
  #define PCI_DEVICE_ID_TEKRAM_DC290    0xdc29
  
 +#define PCI_VENDOR_ID_TEHUTI          0x1fc9
 +#define PCI_DEVICE_ID_TEHUTI_3009     0x3009
 +#define PCI_DEVICE_ID_TEHUTI_3010     0x3010
 +#define PCI_DEVICE_ID_TEHUTI_3014     0x3014
 +
  #define PCI_VENDOR_ID_HINT             0x3388
  #define PCI_DEVICE_ID_HINT_VXPROII_IDE 0x8013
  
  #define PCI_DEVICE_ID_INTEL_82801EB_5 0x24d5
  #define PCI_DEVICE_ID_INTEL_82801EB_6 0x24d6
  #define PCI_DEVICE_ID_INTEL_82801EB_11        0x24db
 +#define PCI_DEVICE_ID_INTEL_82801EB_12        0x24dc
  #define PCI_DEVICE_ID_INTEL_82801EB_13        0x24dd
  #define PCI_DEVICE_ID_INTEL_ESB_1     0x25a1
  #define PCI_DEVICE_ID_INTEL_ESB_2     0x25a2
  #define PCI_DEVICE_ID_INTEL_MCH_PC    0x3599
  #define PCI_DEVICE_ID_INTEL_MCH_PC1   0x359a
  #define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e
 +#define PCI_DEVICE_ID_INTEL_TOLAPAI_0 0x5031
 +#define PCI_DEVICE_ID_INTEL_TOLAPAI_1 0x5032
  #define PCI_DEVICE_ID_INTEL_82371SB_0 0x7000
  #define PCI_DEVICE_ID_INTEL_82371SB_1 0x7010
  #define PCI_DEVICE_ID_INTEL_82371SB_2 0x7020