31 Dec, 2010

1 commit

  • Add missing call to gdth_ioctl_free before aborting.

    The semantic match that finds this problem is as follows:
    (http://coccinelle.lip6.fr/)

    //
    @@
    expression buf,ha,len,addr,E;
    @@

    buf = gdth_ioctl_alloc(ha, len, FALSE, &addr)
    ... when != false buf != NULL
    when != true buf == NULL
    when != \(E = buf\|buf = E\)
    when != gdth_ioctl_free(ha, len, buf, addr)
    *return ...;
    //

    Signed-off-by: Julia Lawall
    Signed-off-by: James Bottomley

    Julia Lawall
     

17 Nov, 2010

1 commit

  • Move the mid-layer's ->queuecommand() invocation from being locked
    with the host lock to being unlocked to facilitate speeding up the
    critical path for drivers who don't need this lock taken anyway.

    The patch below presents a simple SCSI host lock push-down as an
    equivalent transformation. No locking or other behavior should change
    with this patch. All existing bugs and locking orders are preserved.

    Additionally, add one parameter to queuecommand,
    struct Scsi_Host *
    and remove one parameter from queuecommand,
    void (*done)(struct scsi_cmnd *)

    Scsi_Host* is a convenient pointer that most host drivers need anyway,
    and 'done' is redundant to struct scsi_cmnd->scsi_done.

    Minimal code disturbance was attempted with this change. Most drivers
    needed only two one-line modifications for their host lock push-down.

    Signed-off-by: Jeff Garzik
    Acked-by: James Bottomley
    Signed-off-by: Linus Torvalds

    Jeff Garzik
     

26 Oct, 2010

1 commit

  • gdth_ioctl_alloc() takes the size variable as an int.
    copy_from_user() takes the size variable as an unsigned long.
    gen.data_len and gen.sense_len are unsigned longs.
    On x86_64 longs are 64 bit and ints are 32 bit.

    We could pass in a very large number and the allocation would truncate
    the size to 32 bits and allocate a small buffer. Then when we do the
    copy_from_user(), it would result in a memory corruption.

    CC: stable@kernel.org
    Signed-off-by: Dan Carpenter
    Signed-off-by: James Bottomley

    Dan Carpenter
     

23 Oct, 2010

1 commit

  • * 'llseek' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl:
    vfs: make no_llseek the default
    vfs: don't use BKL in default_llseek
    llseek: automatically add .llseek fop
    libfs: use generic_file_llseek for simple_attr
    mac80211: disallow seeks in minstrel debug code
    lirc: make chardev nonseekable
    viotape: use noop_llseek
    raw: use explicit llseek file operations
    ibmasmfs: use generic_file_llseek
    spufs: use llseek in all file operations
    arm/omap: use generic_file_llseek in iommu_debug
    lkdtm: use generic_file_llseek in debugfs
    net/wireless: use generic_file_llseek in debugfs
    drm: use noop_llseek

    Linus Torvalds
     

15 Oct, 2010

1 commit

  • All file_operations should get a .llseek operation so we can make
    nonseekable_open the default for future file operations without a
    .llseek pointer.

    The three cases that we can automatically detect are no_llseek, seq_lseek
    and default_llseek. For cases where we can we can automatically prove that
    the file offset is always ignored, we use noop_llseek, which maintains
    the current behavior of not returning an error from a seek.

    New drivers should normally not use noop_llseek but instead use no_llseek
    and call nonseekable_open at open time. Existing drivers can be converted
    to do the same when the maintainer knows for certain that no user code
    relies on calling seek on the device file.

    The generated code is often incorrectly indented and right now contains
    comments that clarify for each added line why a specific variant was
    chosen. In the version that gets submitted upstream, the comments will
    be gone and I will manually fix the indentation, because there does not
    seem to be a way to do that using coccinelle.

    Some amount of new code is currently sitting in linux-next that should get
    the same modifications, which I will do at the end of the merge window.

    Many thanks to Julia Lawall for helping me learn to write a semantic
    patch that does all this.

    ===== begin semantic patch =====
    // This adds an llseek= method to all file operations,
    // as a preparation for making no_llseek the default.
    //
    // The rules are
    // - use no_llseek explicitly if we do nonseekable_open
    // - use seq_lseek for sequential files
    // - use default_llseek if we know we access f_pos
    // - use noop_llseek if we know we don't access f_pos,
    // but we still want to allow users to call lseek
    //
    @ open1 exists @
    identifier nested_open;
    @@
    nested_open(...)
    {

    }

    @ open exists@
    identifier open_f;
    identifier i, f;
    identifier open1.nested_open;
    @@
    int open_f(struct inode *i, struct file *f)
    {

    }

    @ read disable optional_qualifier exists @
    identifier read_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    expression E;
    identifier func;
    @@
    ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
    {

    }

    @ read_no_fpos disable optional_qualifier exists @
    identifier read_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    @@
    ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
    {
    ... when != off
    }

    @ write @
    identifier write_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    expression E;
    identifier func;
    @@
    ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
    {

    }

    @ write_no_fpos @
    identifier write_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    @@
    ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
    {
    ... when != off
    }

    @ fops0 @
    identifier fops;
    @@
    struct file_operations fops = {
    ...
    };

    @ has_llseek depends on fops0 @
    identifier fops0.fops;
    identifier llseek_f;
    @@
    struct file_operations fops = {
    ...
    .llseek = llseek_f,
    ...
    };

    @ has_read depends on fops0 @
    identifier fops0.fops;
    identifier read_f;
    @@
    struct file_operations fops = {
    ...
    .read = read_f,
    ...
    };

    @ has_write depends on fops0 @
    identifier fops0.fops;
    identifier write_f;
    @@
    struct file_operations fops = {
    ...
    .write = write_f,
    ...
    };

    @ has_open depends on fops0 @
    identifier fops0.fops;
    identifier open_f;
    @@
    struct file_operations fops = {
    ...
    .open = open_f,
    ...
    };

    // use no_llseek if we call nonseekable_open
    ////////////////////////////////////////////
    @ nonseekable1 depends on !has_llseek && has_open @
    identifier fops0.fops;
    identifier nso ~= "nonseekable_open";
    @@
    struct file_operations fops = {
    ... .open = nso, ...
    +.llseek = no_llseek, /* nonseekable */
    };

    @ nonseekable2 depends on !has_llseek @
    identifier fops0.fops;
    identifier open.open_f;
    @@
    struct file_operations fops = {
    ... .open = open_f, ...
    +.llseek = no_llseek, /* open uses nonseekable */
    };

    // use seq_lseek for sequential files
    /////////////////////////////////////
    @ seq depends on !has_llseek @
    identifier fops0.fops;
    identifier sr ~= "seq_read";
    @@
    struct file_operations fops = {
    ... .read = sr, ...
    +.llseek = seq_lseek, /* we have seq_read */
    };

    // use default_llseek if there is a readdir
    ///////////////////////////////////////////
    @ fops1 depends on !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier readdir_e;
    @@
    // any other fop is used that changes pos
    struct file_operations fops = {
    ... .readdir = readdir_e, ...
    +.llseek = default_llseek, /* readdir is present */
    };

    // use default_llseek if at least one of read/write touches f_pos
    /////////////////////////////////////////////////////////////////
    @ fops2 depends on !fops1 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read.read_f;
    @@
    // read fops use offset
    struct file_operations fops = {
    ... .read = read_f, ...
    +.llseek = default_llseek, /* read accesses f_pos */
    };

    @ fops3 depends on !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier write.write_f;
    @@
    // write fops use offset
    struct file_operations fops = {
    ... .write = write_f, ...
    + .llseek = default_llseek, /* write accesses f_pos */
    };

    // Use noop_llseek if neither read nor write accesses f_pos
    ///////////////////////////////////////////////////////////

    @ fops4 depends on !fops1 && !fops2 && !fops3 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read_no_fpos.read_f;
    identifier write_no_fpos.write_f;
    @@
    // write fops use offset
    struct file_operations fops = {
    ...
    .write = write_f,
    .read = read_f,
    ...
    +.llseek = noop_llseek, /* read and write both use no f_pos */
    };

    @ depends on has_write && !has_read && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier write_no_fpos.write_f;
    @@
    struct file_operations fops = {
    ... .write = write_f, ...
    +.llseek = noop_llseek, /* write uses no f_pos */
    };

    @ depends on has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read_no_fpos.read_f;
    @@
    struct file_operations fops = {
    ... .read = read_f, ...
    +.llseek = noop_llseek, /* read uses no f_pos */
    };

    @ depends on !has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    @@
    struct file_operations fops = {
    ...
    +.llseek = noop_llseek, /* no read or write fn */
    };
    ===== End semantic patch =====

    Signed-off-by: Arnd Bergmann
    Cc: Julia Lawall
    Cc: Christoph Hellwig

    Arnd Bergmann
     

16 Sep, 2010

1 commit

  • All these files use the big kernel lock in a trivial
    way to serialize their private file operations,
    typically resulting from an earlier semi-automatic
    pushdown from VFS.

    None of these drivers appears to want to lock against
    other code, and they all use the BKL as the top-level
    lock in their file operations, meaning that there
    is no lock-order inversion problem.

    Consequently, we can remove the BKL completely,
    replacing it with a per-file mutex in every case.
    Using a scripted approach means we can avoid
    typos.

    file=$1
    name=$2
    if grep -q lock_kernel ${file} ; then
    if grep -q 'include.*linux.mutex.h' ${file} ; then
    sed -i '/include.*/d' ${file}
    else
    sed -i 's/include.*.*$/include /g' ${file}
    fi
    sed -i ${file} \
    -e "/^#include.*linux.mutex.h/,$ {
    1,/^\(static\|int\|long\)/ {
    /^\(static\|int\|long\)/istatic DEFINE_MUTEX(${name}_mutex);

    } }" \
    -e "s/\(un\)*lock_kernel\>[ ]*()/mutex_\1lock(\&${name}_mutex)/g" \
    -e '/[ ]*cycle_kernel_lock();/d'
    else
    sed -i -e '/include.*\/d' ${file} \
    -e '/cycle_kernel_lock()/d'
    fi

    Signed-off-by: Arnd Bergmann
    Cc: linux-scsi@vger.kernel.org
    Cc: "James E.J. Bottomley"

    Arnd Bergmann
     

11 Aug, 2010

1 commit


24 May, 2010

1 commit

  • * 'bkl/ioctl' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing:
    uml: Pushdown the bkl from harddog_kern ioctl
    sunrpc: Pushdown the bkl from sunrpc cache ioctl
    sunrpc: Pushdown the bkl from ioctl
    autofs4: Pushdown the bkl from ioctl
    uml: Convert to unlocked_ioctls to remove implicit BKL
    ncpfs: BKL ioctl pushdown
    coda: Clean-up whitespace problems in pioctl.c
    coda: BKL ioctl pushdown
    drivers: Push down BKL into various drivers
    isdn: Push down BKL into ioctl functions
    scsi: Push down BKL into ioctl functions
    dvb: Push down BKL into ioctl functions
    smbfs: Push down BKL into ioctl function
    coda/psdev: Remove BKL from ioctl function
    um/mmapper: Remove BKL usage
    sn_hwperf: Kill BKL usage
    hfsplus: Push down BKL into ioctl function

    Linus Torvalds
     

17 May, 2010

1 commit

  • Push down the bkl into ioctl functions on the scsi layer.

    [jkacur: Forward declaration missing ';'.
    Conflicting declaraction in megaraid.h changed
    Fixed missing inodes declarations]

    Signed-off-by: Arnd Bergmann
    Signed-off-by: John Kacur
    Signed-off-by: Frederic Weisbecker

    Arnd Bergmann
     

11 Apr, 2010

1 commit


30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

19 Jan, 2010

1 commit

  • converted using this script..

    perl -p -i -e 's|ulong32|u32|g' drivers/scsi/gdth*
    perl -p -i -e 's|ulong64|u64|g' drivers/scsi/gdth*
    perl -p -i -e 's|ushort|u16|g' drivers/scsi/gdth*
    perl -p -i -e 's|unchar|u8|g' drivers/scsi/gdth*
    perl -p -i -e 's|ulong|unsigned long|g' drivers/scsi/gdth*
    perl -p -i -e 's|PACKED|__attribute__((packed))|g' drivers/scsi/gdth*

    sha1sum of the generated code was identical before and after.

    Signed-off-by: Dave Jones
    Signed-off-by: James Bottomley

    Dave Jones
     

12 Nov, 2009

1 commit


07 Apr, 2009

2 commits


01 Dec, 2008

1 commit


09 Oct, 2008

1 commit

  • Right now SCSI and others do their own command timeout handling.
    Move those bits to the block layer.

    Instead of having a timer per command, we try to be a bit more clever
    and simply have one per-queue. This avoids the overhead of having to
    tear down and setup a timer for each command, so it will result in a lot
    less timer fiddling.

    Signed-off-by: Mike Anderson
    Signed-off-by: Jens Axboe

    Jens Axboe
     

21 Jun, 2008

1 commit


08 May, 2008

2 commits

  • This message appears on modprobe/rmmod/modprobe of the driver. It's
    caused because if the driver has no instances, it returns an error
    from gdth_init, which causes the module to fail to load.
    Unfortunately, the module's pci driver is still registered at this
    point.

    Fix this by making gdth behave like a modern driver and insert even if
    it doesn't find any instances (in case of hot plug or software driven
    binding).

    Signed-off-by: James Bottomley

    James Bottomley
     
  • The global timer handling is problematic in that if someone unbinds a
    PCI gdth instance, the BUG_ON() in the timer will cause a panic.

    Fix this by making the timer start and stop depending on whether there
    are instances present. This should also permit binding and unbinding
    to work.

    Signed-off-by: James Bottomley

    James Bottomley
     

02 May, 2008

1 commit

  • - struct scsi_cmnd had a 16 bytes command buffer of its own.
    This is an unnecessary duplication and copy of request's
    cmd. It is probably left overs from the time that scsi_cmnd
    could function without a request attached. So clean that up.

    - Once above is done, few places, apart from scsi-ml, needed
    adjustments due to changing the data type of scsi_cmnd->cmnd.

    - Lots of drivers still use MAX_COMMAND_SIZE. So I have left
    that #define but equate it to BLK_MAX_CDB. The way I see it
    and is reflected in the patch below is.
    MAX_COMMAND_SIZE - means: The longest fixed-length (*) SCSI CDB
    as per the SCSI standard and is not related
    to the implementation.
    BLK_MAX_CDB. - The allocated space at the request level

    - I have audit all ISA drivers and made sure none use ->cmnd in a DMA
    Operation. Same audit was done by Andi Kleen.

    (*)fixed-length here means commands that their size can be determined
    by their opcode and the CDB does not carry a length specifier, (unlike
    the VARIABLE_LENGTH_CMD(0x7f) command). This is actually not exactly
    true and the SCSI standard also defines extended commands and
    vendor specific commands that can be bigger than 16 bytes. The kernel
    will support these using the same infrastructure used for VARLEN CDB's.
    So in effect MAX_COMMAND_SIZE means the maximum size command
    scsi-ml supports without specifying a cmd_len by ULD's

    Signed-off-by: Boaz Harrosh
    Signed-off-by: James Bottomley

    Boaz Harrosh
     

08 Apr, 2008

3 commits

  • These are no longer necessary.

    Signed-off-by: Boaz Harrosh
    Tested-by: Joerg Dorchain:
    Tested-by: Stefan Priebe
    Tested-by: Jon Chelton
    Signed-off-by: James Bottomley

    Boaz Harrosh
     
  • - remove PCI device sort, which greatly simplifies PCI probe,
    permitting direct, per-HBA function calls rather than an indirect
    route to the same end result.

    - remove need for pcistr[]

    Signed-off-by: Jeff Garzik
    Signed-off-by: James Bottomley

    Jeff Garzik
     
  • - Reduce uses of gdth_pci_str::pdev, preferring a local variable
    (or function arg) 'pdev' instead.

    - Reduce uses of gdth_pcistr array, preferring local variable
    (or function arg) 'pcistr' instead.

    - Eliminate lone use of gdth_pci_str::irq, using equivalent
    pdev->irq instead

    - Eliminate assign-only gdth_pci_str::io_mm

    Note: If the indentation seems weird, that's because a line was
    converted from spaces to tabs, when it was modified.

    Signed-off-by: Jeff Garzik
    Signed-off-by: James Bottomley

    Jeff Garzik
     

15 Mar, 2008

1 commit


28 Feb, 2008

2 commits

  • The recent patch named:
    [SCSI] gdth: !use_sg cleanup and use of scsi accessors

    has done a bad job in handling internal commands issued by gdth_execute().

    Internal commands are issued with device gdth_cmd_str ready made directly
    to the card, without any mapping or translations of scsi commands. So here
    I added a gdth_cmd_str pointer to the gdth_cmndinfo private structure which
    is then copied directly to host.

    following this patch is a cleanup that removes the home cooked accessors
    and reverts them to regular scsi_cmnd accessors. Since they are not used
    anymore. After review maybe the 2 patches should be squashed together.

    FIXME: There is still a problem with gdth_get_info(). as reported there
    is a WARN_ON trigerd in dma_free_coherent() when doing:
    $ cat /proc/sys/gdth/0

    Signed-off-by: Boaz Harrosh
    Tested-by: Joerg Dorchain:
    Tested-by: Stefan Priebe
    Tested-by: Jon Chelton
    Cc: Stable Tree
    Signed-off-by: James Bottomley

    Boaz Harrosh
     
  • gdth_exit would first remove all cards then stop the timer
    and would not sync with the timer function. This caused a crash
    in gdth_timer() when module was unloaded.
    So del_timer_sync the timer before we delete the cards.

    also the reboot notifier function would crash. So clean
    that up and fix the crashes.

    Signed-off-by: Boaz Harrosh
    Tested-by: Joerg Dorchain:
    Tested-by: Stefan Priebe
    Tested-by: Jon Chelton
    Cc: Stable Tree
    Signed-off-by: James Bottomley

    Boaz Harrosh
     

13 Feb, 2008

2 commits

  • Fix compilation warning in gdth.c, which was using the deprecated
    pci_find_device.

    drivers/scsi/gdth.c:645: warning: 'pci_find_device' is deprecated (declared at include/linux/pci.h:495)

    Changing it to use pci_get_device, instead.

    Signed-off-by: Sergio Luis
    Signed-off-by: James Bottomley

    Sergio Luis
     
  • The patch: "gdth: switch to modern scsi host registration"

    missed one simple fact when moving a way from scsi_module.c.
    That is to call scsi_scan_host() on the probed host.
    With this the gdth driver from 2.6.24 is again able to
    see drives and boot.

    Signed-off-by: Boaz Harrosh
    Tested-by: Joerg Dorchain
    Tested-by: Stefan Priebe
    Tested-by: Jon Chelton
    Cc: Stable Tree
    Signed-off-by: James Bottomley

    Boaz Harrosh
     

12 Jan, 2008

1 commit

  • Neither gdth_get_status() nor __gdth_interrupt() need their 'irq' argument,
    so remove it.

    [akpm@linux-foundation.org: coding style fixes]
    Signed-off-by: Jeff Garzik
    Acked-by: Boaz Harrosh
    Signed-off-by: Andrew Morton
    Signed-off-by: James Bottomley

    Jeff Garzik
     

24 Oct, 2007

1 commit

  • * master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (39 commits)
    [SCSI] qla2xxx: Update version number to 8.02.00-k5.
    [SCSI] qla2xxx: Correct display of ISP serial-number.
    [SCSI] qla2xxx: Correct residual-count handling discrepancies during UNDERRUN handling.
    [SCSI] qla2xxx: Make driver (mostly) legacy I/O port free.
    [SCSI] qla2xxx: Fix issue where final flash-segment updates were falling into the slow-path write handler.
    [SCSI] qla2xxx: Handle unaligned sector writes during NVRAM/VPD updates.
    [SCSI] qla2xxx: Defer explicit interrupt-polling processing to init-time scenarios.
    [SCSI] qla2xxx: Resync with latest HBA SSID specification -- 2.2u.
    [SCSI] sym53c8xx: Remove sym_xpt_async_sent_bdr
    [SCSI] sym53c8xx: Remove pci_dev pointer from sym_shcb
    [SCSI] sym53c8xx: Make interrupt handler capable of returning IRQ_NONE
    [SCSI] sym53c8xx: Get rid of IRQ_FMT and IRQ_PRM
    [SCSI] sym53c8xx: Use scmd_printk where appropriate
    [SCSI] sym53c8xx: Simplify DAC DMA handling
    [SCSI] sym53c8xx: Remove tag_ctrl module parameter
    [SCSI] sym53c8xx: Remove io_ws, mmio_ws and ram_ws elements
    [SCSI] sym53c8xx: Remove ->device_id
    [SCSI] sym53c8xx: Use pdev->revision
    [SCSI] sym53c8xx: PCI Error Recovery support
    [SCSI] sym53c8xx: Stop overriding scsi_done
    ...

    Linus Torvalds
     

23 Oct, 2007

1 commit


18 Oct, 2007

1 commit

  • This patch fixes the following build warnings:

    WARNING: vmlinux.o(.text+0xbcffdb): Section mismatch: reference to .init.text.20:gdth_search_drives (between 'gdth_pci_probe_one' and 'gdth_start_timeout')
    WARNING: vmlinux.o(.text+0xbd0102): Section mismatch: reference to .init.text.20:gdth_enable_int (between 'gdth_pci_probe_one' and 'gdth_start_timeout')

    Signed-off-by: Adrian Bunk
    Signed-off-by: James Bottomley

    Adrian Bunk
     

16 Oct, 2007

1 commit

  • If the gdth module is loaded (or compiled in), the gdth_timeout function
    gets started even if no actual gdth controllers are found b the probing.

    That ends up not only being unnecessary, but also causes a crash due to
    the function blindly just trying to pick the first entry off the
    "gdth_instances" list, and accessing it - which obviously doesn't work
    if the list is empty!

    Noticed by Ingo Molnar.

    Tested-by: Ingo Molnar
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

13 Oct, 2007

6 commits

  • drivers/scsi/gdth.c: In function ‘gdth_search_dev’:
    drivers/scsi/gdth.c:646: warning: ‘pci_find_device’ is deprecated
    (declared at include/linux/pci.h:482)
    drivers/scsi/gdth.c: In function ‘gdth_init_isa’:
    drivers/scsi/gdth.c:857: error: ‘gdth_irq_tab’ undeclared (first use in
    this function)
    drivers/scsi/gdth.c:857: error: (Each undeclared identifier is reported
    only once
    drivers/scsi/gdth.c:857: error: for each function it appears in.)
    drivers/scsi/gdth.c: In function ‘gdth_copy_internal_data’:
    drivers/scsi/gdth.c:2362: warning: unused variable ‘sg’

    Looking into the code I notice that gdth_irq_tab is not declared with
    CONFIG_ISA=y and !CONFIG_EISA.

    The values seem to be same in 2.6.23 (I am not sure why it has been put
    with #ifdefs in -mm) so I have just modified the #ifdef to take care of
    CONFIG_ISA as well.

    Signed-off-by: Dhaval Giani
    Signed-off-by: James Bottomley

    Dhaval Giani
     
  • gdth_execute() will issue an internal, none scsi-standard commands
    onto __gdth_queuecommand(). Since it is not recommended to set
    struct scsi_cmnd IO members in llds, gdth now uses internal IO
    members for IO. In the case of gdth_execute() these members will be
    set properly. In case the command was issued from scsi-ml
    (by gdth_queuecommand) they will be set from scsi IO accessors.

    * define gdth IO accessors and use them throughout the driver.
    * use an sg-of-one in gdth_execute() and fix gdth_special_cmd()
    accordingly.
    * Clean the not use_sg code path and company

    Signed-off-by Boaz Harrosh
    Signed-off-by: James Bottomley

    Boaz Harrosh
     
  • - Cleanup the rest of the scsi_cmnd->SCp members and move them
    to gdth_cmndinfo:
    SCp.this_residual => priority
    SCp.buffers_residual => timeout
    SCp.Status => status and dma_dir
    SCp.Message => info
    SCp.have_data_in => volatile wait_for_completion
    SCp.sent_command => OpCode
    SCp.phase => phase

    - Two more members will be naturally removed in the !use_sg cleanup

    TODO: What is the meaning of gdth_cmndinfo.phase? (rhetorically)

    Signed-off-by Boaz Harrosh
    Signed-off-by: James Bottomley

    Boaz Harrosh
     
  • - scsi_cmnd and specifically ->SCp of, where heavily abused
    with internal meaning members and flags. So introduce a new
    struct gdth_cmndinfo, put it on ->host_scribble and define a
    gdth_cmnd_priv() accessor to retrieve it from a scsi_cmnd.

    - The structure now holds two members:
    internal_command - replaces the IS_GDTH_INTERNAL_CMD() croft.
    sense_paddr - which was a 64-bit spanning on 2 32-bit members of SCp.
    More overloaded members from SCp and scsi_cmnd will be moved in a later
    patch (For easy review).

    - Split up gdth_queuecommand to an additional internal_function. The later
    is the one called by gdth_execute(). This will be more evident later in
    the scsi accessors patch, but it also facilitates in the differentiation
    between internal_command and external. And the setup of gdth_cmndinfo of
    each command.

    Signed-off-by Boaz Harrosh
    Signed-off-by: James Bottomley

    Boaz Harrosh
     
  • - Places like Initialization and Reset that Just loop on all devices can
    use the link list with the list_for_each_entry macro.
    But the io_ctrl from user mode now suffers performance-wise because
    code has to do a sequential search for the requested host number.
    I have isolated this search in a gdth_find_ha(int hanum) member
    for future enhancement if needed.

    Signed-off-by Boaz Harrosh
    Signed-off-by: James Bottomley

    Boaz Harrosh
     
  • - Use scsi_add_host and friends and track instances ourselves. And
    generally modernize the driver's structure.

    - TODO: Next we can remove the controller table
    - TODO: Fix use of deprecated pci_find_device()

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Boaz Harrosh
    Signed-off-by: James Bottomley

    Christoph Hellwig