15 Dec, 2011

9 commits


30 Oct, 2011

1 commit

  • New feature Fast Load Support.

    (1)Asynchronous SCSI scanning: This will allow the drivers to scan
    for devices in parallel while other device drivers are loading at
    the same time. This will improve the amount of time it takes for the
    OS to load.

    (2) Reporting Devices while port enable is active: This feature will
    allow devices to be reported to OS immediately while port enable is
    active. The previous implementation waits for port enable to complete,
    and then report devices. This feature is only enabled on IT firmware
    configurations when there are no boot device configured in BIOS Configuration
    Utility, else the driver will wait till port enable completes reporting
    devices. For IR firmware, this feature is turned off. This feature is to
    address large SAS topologies (>100 drives) when the boot OS is using onboard
    SATA device, in other words, the boot devices is not
    connected to our controller.

    (3) Scanning for devices after diagnostic reset completes: A new routine
    _scsih_scan_start is added. This will scan the expander pages, IR pages,
    and sas device pages, then reporting new devices to SCSI Mid layer. It
    seems the driver is not supporting adding devices while diagnostic reset
    is active. Apparently this is due to the sanity checks on
    ioc->shost_recovery flag throughout the context of kernel work thread FIFO,
    and the mpt2sas_fw_work.

    Signed-off-by: Nagalakshmi Nandigama
    Signed-off-by: James Bottomley

    nagalakshmi.nandigama@lsi.com
     

29 Oct, 2011

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (204 commits)
    [SCSI] qla4xxx: export address/port of connection (fix udev disk names)
    [SCSI] ipr: Fix BUG on adapter dump timeout
    [SCSI] megaraid_sas: Fix instance access in megasas_reset_timer
    [SCSI] hpsa: change confusing message to be more clear
    [SCSI] iscsi class: fix vlan configuration
    [SCSI] qla4xxx: fix data alignment and use nl helpers
    [SCSI] iscsi class: fix link local mispelling
    [SCSI] iscsi class: Replace iscsi_get_next_target_id with IDA
    [SCSI] aacraid: use lower snprintf() limit
    [SCSI] lpfc 8.3.27: Change driver version to 8.3.27
    [SCSI] lpfc 8.3.27: T10 additions for SLI4
    [SCSI] lpfc 8.3.27: Fix queue allocation failure recovery
    [SCSI] lpfc 8.3.27: Change algorithm for getting physical port name
    [SCSI] lpfc 8.3.27: Changed worst case mailbox timeout
    [SCSI] lpfc 8.3.27: Miscellanous logic and interface fixes
    [SCSI] megaraid_sas: Changelog and version update
    [SCSI] megaraid_sas: Add driver workaround for PERC5/1068 kdump kernel panic
    [SCSI] megaraid_sas: Add multiple MSI-X vector/multiple reply queue support
    [SCSI] megaraid_sas: Add support for MegaRAID 9360/9380 12GB/s controllers
    [SCSI] megaraid_sas: Clear FUSION_IN_RESET before enabling interrupts
    ...

    Linus Torvalds
     

22 Sep, 2011

1 commit

  • Support added for controllers capable of multi reply queues.

    The following are the modifications to the driver to support NUMA.

    1) Create the new structure adapter_reply_queue to contain the reply queue
    info for every msix vector. This object will contain a
    reply_post_host_index, reply_post_free for each instance, msix_index, among
    other parameters. We will track all the reply queues on a link list called
    ioc->reply_queue_list. Each reply queue is aligned with each IRQ, and is
    passed to the interrupt via the bus_id parameter.

    (2) The driver will figure out the msix_vector_count from the PCIe MSIX
    capabilities register instead of the IOC Facts->MaxMSIxVectors. This is
    because the firmware is not filling in this field until the driver has
    already registered MSIX support.

    (3) If the ioc_facts reports that the controller is MSIX compatible in the
    capabilities, then the driver will request for multiple irqs. This count
    is calculated based on the minimum between the online cpus available and
    the ioc->msix_vector_count. This count is reported to firmware in the
    ioc_init request.

    (4) New routines were added _base_free_irq and _base_request_irq, so
    registering and freeing msix vectors were done thru simple function API.

    (5) The new routine _base_assign_reply_queues was added to align the msix
    indexes across cpus. This will initialize the array called
    ioc->cpu_msix_table. This array is looked up on every MPI request so the
    MSIxIndex is set appropriately.

    (6) A new shost sysfs attribute was added to report the reply_queue_count.

    (7) User needs to set the affinity cpu mask, so the interrupts occur on the
    same cpu that sent the original request.

    Signed-off-by: Nagalakshmi Nandigama
    Signed-off-by: James Bottomley

    nagalakshmi.nandigama@lsi.com
     

15 Sep, 2011

1 commit


30 Jun, 2011

2 commits


01 May, 2011

1 commit

  • This patch has Support for the new solid state device product SSS6200
    from LSI and relavent features w.r.t SSS6200.

    The major feature added in this driver is supporting Direct-I/O to the
    SSS6200 storage.There are some additional changes done to avoid exposing
    the RAID member disks to the OS and hiding/exposing drives based on the
    OEM Specific Flag in Manufacturing Page10 (this is required to handle
    specific changes in the SSS6200 firmware).

    Each and every changes are listed below.
    1. Hiding IR related messages.
    For SSS6200, the driver is modified not to print IR related events.
    Even if the debugging is enabled the IR related messages will not be displayed.
    In some places if there is a need to display a message related to IR the
    string "IR" is replaced with string "DD" and the string "volume" is replaced
    with "direct drive". But the function names are not changed hence there are
    some places where the reference to volume can be seen if debug level is set.

    2. Removed RAID transport support
    In Linux the user can retrieve RAID volume information from the sysfs directory.
    This support is removed for SSS6200.

    3. Direct I/O support.
    The driver tries to enable direct I/O when a volume is reported to the driver
    by the firmware through IRCC events and the driver does this just before
    reporting to the OS, hence all the OS issued I/O can go through direct path
    if they can, The first validation is to see whether the manufacturing page10
    flag is set to expose all drives always. If that is set, the driver will not
    enable direct I/O and displays the message "DDIO" is disabled globally as
    drives are exposed. The driver checks whether there is more than one volume
    in the controller, if so the direct I/O will be disabled globally for all
    volumes in the controller and the message displayed will be "DDIO is disabled
    globally as number of drives > 1.
    If retrieving number of PD is failed the driver will not enable direct I/O
    and displays the message Failure in computing number of drives DDIO disabled.
    If memory allocation for RAIDVolumePage0 is failed, the driver will not enable
    direct I/O and displays the message Memory allocation failure for
    RVPG0 DDIO disabled. If retrieving RAIDVolumePage0 is failed the driver will
    not enable direct I/O and displays the message Failure in retrieving
    RVPG0 DDIO disabled

    If the number of PD in a volume is greater than 8, then the direct I/O will
    be disabled.
    If any of individual drives handle retrieval is failed then the DD-IO will
    be disabled.
    If the volume is not RAID0 or if the block size is not 512 then the DD-IO will
    be disabled.
    If the volume size is greater than 2TB then the DD-IO will be disabled.
    If the driver is not able to find a valid stripe exponent using the configured
    stripe size then the DD-IO will be disabled

    When the DD-IO is enabled the driver will check every I/O request issued to
    the storage and checks whether the request is either
    READ6/WRITE6/READ10/WRITE10, if it is and if the complete I/O transfer
    is within a stripe size then the I/O is redirected to
    the drive directly instead of the volume.

    On completion of every I/O, if the completion is failure means if the reply
    is address reply with a reply frame associated with it, then the type of I/O
    will be checked, if the I/O is direct then the I/O will be retried to
    the volume once.

    Signed-off-by: Kashyap Desai
    Reviewed-by: Eric Moore
    Reviewed-by: Sathya Prakash
    Signed-off-by: James Bottomley

    Kashyap, Desai
     

31 Mar, 2011

1 commit


24 Mar, 2011

1 commit


18 Mar, 2011

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (170 commits)
    [SCSI] scsi_dh_rdac: Add MD36xxf into device list
    [SCSI] scsi_debug: add consecutive medium errors
    [SCSI] libsas: fix ata list corruption issue
    [SCSI] hpsa: export resettable host attribute
    [SCSI] hpsa: move device attributes to avoid forward declarations
    [SCSI] scsi_debug: Logical Block Provisioning (SBC3r26)
    [SCSI] sd: Logical Block Provisioning update
    [SCSI] Include protection operation in SCSI command trace
    [SCSI] hpsa: fix incorrect PCI IDs and add two new ones (2nd try)
    [SCSI] target: Fix volume size misreporting for volumes > 2TB
    [SCSI] bnx2fc: Broadcom FCoE offload driver
    [SCSI] fcoe: fix broken fcoe interface reset
    [SCSI] fcoe: precedence bug in fcoe_filter_frames()
    [SCSI] libfcoe: Remove stale fcoe-netdev entries
    [SCSI] libfcoe: Move FCOE_MTU definition from fcoe.h to libfcoe.h
    [SCSI] libfc: introduce __fc_fill_fc_hdr that accepts fc_hdr as an argument
    [SCSI] fcoe, libfc: initialize EM anchors list and then update npiv EMs
    [SCSI] Revert "[SCSI] libfc: fix exchange being deleted when the abort itself is timed out"
    [SCSI] libfc: Fixing a memory leak when destroying an interface
    [SCSI] megaraid_sas: Version and Changelog update
    ...

    Fix up trivial conflicts due to whitespace differences in
    drivers/scsi/libsas/{sas_ata.c,sas_scsi_host.c}

    Linus Torvalds
     

24 Jan, 2011

4 commits

  • Basic Code Cleanup:
    (1) _base_get_cb_idx and mpt2sas_base_free_smid were reorganized in
    similar fashion so the order of obtaining the cbx and smid are
    scsiio,
    hi_priority, and internal.
    (2) The hi_priority and internal request queue struct was made
    smaller
    by removing the scmd and chain_tracker, thus saving memory
    allocation.
    (3) For scsiio request, a new structure was created having the same
    elements from the former request tracker struct.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • Add support for Customer specific branding messages when device driver loads,
    based on specific customer subsystem vendor and device Ids

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • There was a configuration page timing out during the initial port
    enable at driver load time. The port enable would fail, and this would
    result in the driver unloading itself, meanwhile the driver was accessing
    freed memory in another context resulting in the panic. The fix is to
    prevent access to freed memory once the driver had issued the diag reset
    which woke up the sleeping port enable process. The routine
    _base_reset_handler was reorganized so the last sleeping process woken up was
    the port_enable.

    Signed-off-by: Kashyap Desai
    Cc: stable@kernel.org
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • The ioc->hba_queue_depth is not properly resized when the controller
    firmware reports that it supports more outstanding IO than what can be fit
    inside the reply descriptor pool depth. This is reproduced by setting the
    controller global credits larger than 30,000. The bug results in an
    incorrect sizing of the queues. The fix is to resize the queue_size by
    dividing queue_diff by two.

    Signed-off-by: Kashyap Desai
    Cc: stable@kernel.org
    Signed-off-by: James Bottomley

    Kashyap, Desai
     

22 Dec, 2010

4 commits

  • remove support for MPI2_EVENT_TASK_SET_FULL
    This event is obsoleted, so this processing of this event
    needs to be removed from the driver. The controller firmware is going
    to handle TASK_SET_FULL, the driver doesn't need to do anything.
    Even though we are removing the EVENT handling, the behavour has not
    changed between driver versions becuase fimrware will still be handling
    queue throttling, and retrying of commands when the target device queues
    are full.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • Create a pool of chain buffers, instead of dedicated per IO:
    This enahancment is to address memory allocation failure when asking
    for more than 2300 IOs per host. There is just not enough contiquious
    DMA physical memory to make one single allocation to hold both message
    frames and chain buffers when asking for more than 2300 request. In order
    to address this problem we will have to allocate memory for each chain
    buffer in a seperate individual memory allocation, placing each chain
    element of 128 bytes onto a pool of available chains, which can be
    shared amoung all request.
    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • Ability to override/set the ReportDeviceMissingDelay and
    IODeviceMissingDelay from driver: Add new command line option missing_delay,
    this is an array, where the first element is the device missing delay,
    and the second element is io missing delay. The driver will program
    sas iounit page 1 with the new setting when the driver loads. This is
    programmed to the current and persistent configuration page so this takes
    immediately, as will be sticky across host reboots.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • Sometime it is seen that controller
    firmware returns an invalid system message id (smid).

    the oops is occurring becuase mpt_callbacks pointer is referenced to
    either null or invalid virtual address. this is due to cb_idx set
    incorrectly from routine _base_get_cb_idx. the cb_idx was set incorrectly
    becuase there is no check to make sure smid is less than maxiumum
    anticapted smid. to fix this issue, we add a check in
    _base_get_cb_idx to make sure smid is not greater than
    ioc->hba_queue_depth. in addition, a similar check was added to make
    sure the reply address was less than the largest anticapated address.

    Newer firmware has sovled this issue, however it good to have this sanity
    check.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     

06 Sep, 2010

1 commit

  • Outdent the code following the if.

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

    //
    @r disable braces4@
    position p1,p2;
    statement S1,S2;
    @@

    (
    if (...) { ... }
    |
    if (...) S1@p1 S2@p2
    )

    @script:python@
    p1 << r.p1;
    p2 << r.p2;
    @@

    if (p1[0].column == p2[0].column):
    cocci.print_main("branch",p1)
    cocci.print_secs("after",p2)
    //

    Signed-off-by: Julia Lawall
    Acked-by: Nick Cheng
    Signed-off-by: James Bottomley

    Julia Lawall
     

28 Jul, 2010

9 commits

  • fixes surrounding PCIe enhanced error handling:

    (1) We need to reject all request generated internaly inside the driver as well
    as request arriving from the scsi mid layer when PCIe EEH is active. The fix is
    to add a per adapter flag called pci_error_recovery which is checked thru out
    the driver when request are generated.

    (2) We don't need to call the pci_driver->remove directly from the PCIe
    callbacks becuase its already called from the PCIe EEH code. In its place we are
    shutting down the watchdog timer, and flushing back all pending IO.

    (3) We need to save and restore the pci state across PCIe EEH handling.

    Signed-off-by: Eric Moore
    Signed-off-by: James Bottomley

    Eric Moore
     
  • (1) driver was not setting the sense data size prior to sending SCSI_IO,
    resulting in the 0x31190000 loginfo
    (2) The driver needs to copy the sense data to local buffer prior
    to releasing the request message frame. If not, the sense buffer gets
    overwritten by the next SCSI_IO request.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • In the driver mpt2sas_base_attach subroutine, we need to add
    support to return the proper error code when there are memory allocation
    failures, e.g. returning -ENOMEM.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • Actual problem :
    Driver may receiving the top level expander
    removal event prior to all the individual PD removal events, hence the
    driver is breaking down all the PDs in advanced to the actaul PD UNHIDE
    event. Driver sends multiple
    Target Resets to the same volume handle for each individual PD removal.

    FIX DESCRIPTION:
    To fix this issue, the entire PD device handshake protocal has to be
    moved to interrupt context so the breakdown occurs immediately after the
    actual UNHIDE event arrives. The driver will only issue one Target Reset to
    the volume handle, occurring after the FAILED or MISSING volume status
    event arrives from interrupt context. For the PD UNHIDE event, the driver
    will issue target resets to the PD handles, followed by OP_REMOVE. The
    driver will set the "deteleted" flag during interrupt context. A "pd_handle"
    bitmask was introduced so the driver has a list of known pds during entire
    life of the PD; this replaces the "hidden_raid_component" flag handle in
    the sas_device object. Each bit in the bitmask represents a device handle.
    The bit in the bitmask would be toggled ON/OFF when the HIDE/UNHIDE
    events arrive; also this pd_handle bitmask would bould be refreshed
    across host resets.

    Here we kept older behavior of sending target reset to volume when there is
    a single drive pull, wait for the reply, then send target resets
    to the PDs. We kept this behavior so the driver will
    behave the same for older versions of firmware.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • Converting print level from MPT2SAS_DEBUG_FMT to MPT2SAS_INFO_FMT.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • Added support so the diag ring buffer can be pulled via sysfs
    Added three new shost attributes: host_trace_buffer,
    host_trace_buffer_enable, and host_trace_buffer_size. The
    host_trace_buffer_enable attribute is used to either post or release
    the trace buffers. The host_trace_buffer_size attribute contains
    the size of the trace buffer. The host_trace_buffer atttribute contains
    a maximum 4KB window of the buffer. In order to read the entire host buffer,
    you will need to write the offset to host_trace_buffer prior to reading
    it. release the host buffer, then write the entire host buffer contents to
    a file.
    In addition to this enhancement, we moved the automatic posting of host buffers
    at driver load time to be called prior to port_enable, instead of after.
    That way discovery is available in the host buffer.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • Added a new sysfs shost attribute called ioc_reset_count. This will
    keep count of host resets (both diagnostic and message unit).

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • Added command line option called disable_discovery. When enabled
    on the command line, the driver will not send a port_enable when loaded
    for the first time. If port_enable is not called, then there is
    no discovery of devices, as well as the sas topology. Then later if one
    desires to invoke discovery, then they will need to issue a diagnostic reset.
    A diagnostic reset can be issued various ways. One of the way is throught
    sysfs.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     
  • Driver should not allow multiple host reset when already host reset is in
    progress. It is possible that host reset was sent by scsi mid layer while there was already an host reset active,
    either issued via IOCTL interface or internaly, like a config page timeout.
    Since there was a host reset active, the driver would return a FAILED response
    to the scsi mid layer. The solution is make sure pending host resets will
    wait for the active host reset to complete before returning control
    back up the call stack.

    Signed-off-by: Kashyap Desai
    Signed-off-by: James Bottomley

    Kashyap, Desai
     

25 May, 2010

1 commit


12 Apr, 2010

2 commits