08 Aug, 2011

1 commit


09 Jul, 2011

1 commit


06 May, 2011

3 commits


24 Mar, 2011

1 commit

  • Under certain workloads a command may seem to get lost. IOW, the Smart Array
    thinks all commands have been completed but we still have commands in our
    completion queue. This may lead to system instability, filesystems going
    read-only, or even panics depending on the affected filesystem. We add an
    extra read to force the write to complete.

    Testing shows this extra read avoids the problem.

    Signed-off-by: Mike Miller
    Cc: stable@kernel.org
    Signed-off-by: Jens Axboe

    Bud Brown
     

14 Jan, 2011

1 commit


11 Jan, 2011

1 commit


24 Oct, 2010

1 commit

  • After a reset, we should first wait for the board to become "not ready",
    and then wait for it to become "ready", instead of immediately
    waiting for it to become "ready", and do this waiting *after*
    restoring PCI config space registers.

    Signed-off-by: Stephen M. Cameron
    Signed-off-by: Jens Axboe

    Stephen M. Cameron
     

08 Aug, 2010

5 commits

  • cciss: use consistent variable names
    "h", for the hba structure and "c" for the command structures.
    and get rid of trivial CCISS_LOCK macro.

    Signed-off-by: Stephen M. Cameron
    Signed-off-by: Jens Axboe

    Stephen M. Cameron
     
  • cciss: factor out cciss_reset_devices()

    Signed-off-by: Stephen M. Cameron
    Signed-off-by: Jens Axboe

    Stephen M. Cameron
     
  • cciss: factor out cciss_wait_for_board_ready()

    Signed-off-by: Stephen M. Cameron
    Signed-off-by: Jens Axboe

    Stephen M. Cameron
     
  • Add a mode of controller operation called Performant Mode. Even though
    cciss has been deprecated in favor of hpsa there are new controllers due
    out next year that HP must support in older vendor distros. Vendors
    require all fixes/features be upstream. These new controllers support
    only 16 commands in simple mode but support up to 1024 in performant mode.
    This requires us to add this support at this late date.

    The performant mode transport minimizes host PCI accesses by performinf
    many completions per read. PCI writes are posted so the host can write
    then immediately get off the bus not waiting for the writwe to complete to
    the target. In the context of performant mode the host read out to a
    controller pulls all posted writes into host memory ensuring the reply
    queue is coherent.

    Signed-off-by: Mike Miller
    Cc: Stephen M. Cameron
    Signed-off-by: Andrew Morton
    Signed-off-by: Jens Axboe

    Mike Miller
     
  • Change the return type of our interrupt access routines to bool from
    unsigned long. It makes more sense that way.

    Signed-off-by: Mike Miller
    Cc: Stephen M. Cameron
    Signed-off-by: Andrew Morton
    Signed-off-by: Jens Axboe

    Mike Miller
     

01 Mar, 2010

2 commits


22 Feb, 2010

1 commit


23 Nov, 2009

1 commit

  • A recent commit broke the ia64 build:

    Author: Don Brace
    Date: Thu Nov 12 12:50:01 2009 -0600

    cciss: Add enhanced scatter-gather support.

    because of this hunk:

    --- a/drivers/block/cciss.h
    +++ b/drivers/block/cciss.h
    +struct Cmd_sg_list {
    + SGDescriptor_struct *sgchain;
    + dma64_addr_t sg_chain_dma;
    + int chain_block_size;
    +};

    The issue is that dma64_addr_t isn't #define'd on ia64.

    The way that we're using Cmd_sg_list.sg_chain_dma is to hold an
    address returned from pci_map_single().

    + temp64.val = pci_map_single(h->pdev,
    + h->cmd_sg_list[c->cmdindex]->sgchain,
    + len, dir);
    +
    + h->cmd_sg_list[c->cmdindex]->sg_chain_dma = temp64.val;

    pci_map_single() returns a dma_addr_t too.

    This code will still work even on a 32-bit x86 build, where
    dma_addr_t is defined to be a u32 because it will simply be
    promoted to the __u64 that temp64.val is defined as.

    Thus, declaring Cmd_sg_list.sg_chain_dma as dma_addr_t is safe.

    Cc: Don Brace
    Cc: Stephen M. Cameron
    Signed-off-by: Alex Chiang
    Signed-off-by: Jens Axboe

    Alex Chiang
     

13 Nov, 2009

1 commit

  • cciss: Add enhanced scatter-gather support. For controllers which
    supported, more than 512 scatter-gather elements per command may
    be used, and the max transfer size can be increased to 8192 blocks.

    Signed-off-by: Don Brace
    Signed-off-by: Stephen M. Cameron
    Signed-off-by: Jens Axboe

    Don Brace
     

02 Oct, 2009

4 commits


09 Jun, 2009

2 commits


02 Jun, 2009

1 commit

  • Add sysfs entries to the cciss driver needed for the dm/multipath tools.

    A file for vendor, model, rev, and unique_id is added for each logical
    drive under directory /sys/bus/pci/devices//ccissX/cXdY. Where X =
    the controller (or host) number and Y is the logical drive number.

    A link from /sys/bus/pci/devices//ccissX/cXdY/block:cciss!cXdY to
    /sys/block/cciss!cXdY/device is also created. A bus is created in
    /sys/bus/cciss. A link is created from the pci ccissX entry to
    /sys/bus/cciss/devices/ccissX. Please consider this for inclusion.

    Signed-off-by: Mike Miller
    Cc: Stephen M. Cameron
    Signed-off-by: Jens Axboe

    Andrew Patterson
     

07 Apr, 2009

1 commit

  • The MSA2012 cannot inform the driver of configuration changes since all
    management is out of band. This is a departure from any storage we have
    supported in the past. We need some way to detect changes on the topology
    so we implement this kernel thread. In some instances there's nothing we
    can do from the driver (like LUN failure) so just print out a message. In
    the case where logical volumes are added or deleted we call
    rebuild_lun_table to refresh the driver's view of the world.

    Signed-off-by: Mike Miller
    Cc: James Bottomley
    Signed-off-by: Andrew Morton
    Signed-off-by: Jens Axboe

    Mike Miller
     

29 Dec, 2008

1 commit


06 Aug, 2008

1 commit

  • This patch makes the rebuild_lun_table smart enough to not rip a logical
    volume out from under the OS. Without this fix if a customer is running
    hpacucli to monitor their storage the driver will blindly remove and re-add
    the disks whenever the utility calls the CCISS_REGNEWD ioctl. Unfortunately,
    both hpacucli and ACUXE call the ioctl repeatedly. Customers have reported
    IO coming to a standstill. Calling the ioctl is the problem, this patch is
    the fix.

    Signed-off-by: Stephen M. Cameron
    Signed-off-by: Mike Miller
    Signed-off-by: Jens Axboe

    Mike Miller
     

08 Dec, 2006

3 commits


01 Oct, 2006

1 commit


26 Jun, 2006

1 commit

  • We should call pci_request_regions() to claim all resources the device
    decodes. Previously, we claimed only the I/O port range.

    Signed-off-by: Bjorn Helgaas
    Acked-by: Jeff Garzik
    Acked-by: Mike Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Bjorn Helgaas
     

09 Jan, 2006

2 commits

  • This sneaked in with one of the updates.

    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     
  • This creates a new function, cciss_interrupt_mode called from
    cciss_pci_init. This function determines what type of interrupt vector to
    use, i.e., MSI, MSI-X, or IO-APIC.

    One noticeable difference is changing the interrupt field of the controller
    struct to an array of 4 unsigned ints. The Smart Array HW is capable of
    generating 4 distinct interrupts depending on the transport method in use
    during operation. These are:

    #define DOORBELL_INT 0
    Used to notify the contoller of configuration updates. We only use
    this feature when in polling mode.

    #define PERF_MODE_INT 0
    Used when the controller is in Performant Mode.

    #define SIMPLE_MODE_INT 2
    Used when the controller is in Simple Mode (current Linux implementation).

    #define MEMQ_INT_MODE 3
    Not used.

    When using IO-APIC interrupts these 4 lines are OR'ed together so when any
    one fires an interrupt an is generated. In MSI or MSI-X mode this hardware
    OR'ing is ignored. We must register for our interrupt depending on what
    mode the controller is running. For Linux we use SIMPLE_MODE_INT
    exclusively at this time. Please consider this for inclusion.

    Signed-off-by: Mike Miller
    Cc: Jens Axboe
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Miller
     

07 Nov, 2005

1 commit


13 Sep, 2005

3 commits

  • This patch changes the way we complete commands. In the old method when we
    got a completion we searched our command list from the top until we find it.

    This method uses a tag associated with each command (not SCSI command tagging)
    to index us directly to the completed command. This helps performance.

    Signed-off-by: Don Brace
    Signed-off-by: Mike Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Miller
     
  • This patch removes a couple of functions dealing with configuration and
    replaces them with new functions. This implementation fixes some bugs
    associated with the ACUXE. It also allows a logical volume to be removed from
    the middle without deleting all volumes behind it.

    If a user has 5 logical volumes and decides he wants to reconfigure volume
    number 3, he can now do that without removing volumes 4 & 5 first. This code
    has been tested in our labs against all application software.

    Signed-off-by: Chase Maupin
    Signed-off-by: Mike Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Miller
     
  • This patch adds a flag called busy_initializing. If there are multiple
    controllers in a server AND the HP agents are running it's possible the agents
    may try to poll a card that is still initializing if the driver is removed and
    then added again.

    Signed-off-by: Don Brace
    Signed-off-by: Mike Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Miller