08 Jan, 2016

1 commit


07 Jan, 2016

1 commit


04 Dec, 2015

2 commits

  • James Bottomley
     
  • The non-PCI builds of the O day test project are failing:

    On Thu, 2015-12-03 at 05:02 +0800, kbuild test robot wrote:
    > warning: (SCSI_MPT2SAS) selects SCSI_MPT3SAS which has unmet direct
    > dependencies (SCSI_LOWLEVEL && PCI && SCSI)

    The problem is that select and depend don't interact because Kconfig doesn't
    have a SAT solver, so depend picks up dependencies and select does onward
    selects, but select doesn't pick up dependencies. To fix this, we need to add
    the correct dependencies to the MPT2SAS option like this.

    Reported-by: kbuild test robot
    Fixes: b840c3627b6f4f856b333a14a72f8ed86da2f86c
    Signed-off-by: James Bottomley

    James Bottomley
     

01 Dec, 2015

1 commit

  • The mpt2sas driver was recently folded into mpt3sas to reduce code
    duplication.

    To avoid problems for people that only have CONFIG_SCSI_MPT2SAS in their
    .config we introduce a dummy option that will select MPT3SAS if MPT2SAS
    was previously enabled.

    This is a temporary measure and we will deprecate this config option in
    4.6.

    Reported-by: Peter Zijlstra
    Acked-by: Christoph Hellwig
    Acked-by: James Bottomley
    CC: Ingo Molnar
    Signed-off-by: Martin K. Petersen

    Martin K. Petersen
     

14 Nov, 2015

1 commit

  • Before enabling MPI2_SCSIIO_CONTROL_TLR_ON flag in MPI SCSI IO request
    message, check whether TLR is enabled on the drive using
    'sas_is_tlr_enabled' API.

    Actually in the driver code, driver is using below API's

    1. sas_enable_tlr() - to enable the TLR
    2. sas_disable_tlr() - to disable the TLR
    3. sas_is_tlr_enabled() - to check whether TLR is enabled or not.

    but in scsih_qcmd() we have missed to use sas_is_tlr_enabled() API,
    instead we checking for TLR bit from flag field of driver's 'struct
    MPT3SAS_DEVIC' structure. which is corrected with this patch.

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Tomas Henzl
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     

13 Nov, 2015

1 commit

  • After merging the scsi tree, today's linux-next build (powerpc
    allyesconfig) failed like this:

    In file included from drivers/scsi/mpt3sas/mpt3sas_scsih.c:59:0:
    drivers/scsi/mpt3sas/mpt3sas_scsih.c: In function '_scsih_io_done':
    drivers/scsi/mpt3sas/mpt3sas_base.h:1414:1: error: inlining failed in call to always_inline 'mpt3sas_scsi_direct_io_get': function body not available
    mpt3sas_scsi_direct_io_get(struct MPT3SAS_ADAPTER *ioc, u16 smid);
    ^
    drivers/scsi/mpt3sas/mpt3sas_scsih.c:4448:6: error: called from here
    if (mpt3sas_scsi_direct_io_get(ioc, smid) &&
    ^
    In file included from drivers/scsi/mpt3sas/mpt3sas_scsih.c:59:0:
    drivers/scsi/mpt3sas/mpt3sas_base.h:1416:1: error: inlining failed in call to always_inline 'mpt3sas_scsi_direct_io_set': function body not available
    mpt3sas_scsi_direct_io_set(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 direct_io);
    ^
    drivers/scsi/mpt3sas/mpt3sas_scsih.c:4454:3: error: called from here
    mpt3sas_scsi_direct_io_set(ioc, smid, 0);
    ^
    In file included from drivers/scsi/mpt3sas/mpt3sas_scsih.c:5
    9:0:
    drivers/scsi/mpt3sas/mpt3sas_base.h:1416:1: error: inlining failed in call to always_inline 'mpt3sas_scsi_direct_io_set': function body not available
    mpt3sas_scsi_direct_io_set(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 direct_io);
    ^
    drivers/scsi/mpt3sas/mpt3sas_scsih.c:4454:3: error: called from here
    mpt3sas_scsi_direct_io_set(ioc, smid, 0);
    ^

    Presumably caused by commit

    c84b06a48c4d ("mpt3sas: Single driver module which supports both SAS 2.0 & SAS 3.0 HBAs")

    Signed-off-by: Stephen Rothwell
    Signed-off-by: James Bottomley

    Stephen Rothwell
     

12 Nov, 2015

18 commits

  • Bump mpt3sas driver version to 09.102.00.00

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • Modified the mpt3sas driver to have a single driver module which
    supports both SAS 2.0 & SAS 3.0 HBA devices.

    * Added SAS 2.0 HBA device IDs to the mpt3sas_pci_table pci table.

    * Created two separate SCSI host templates for SAS2 and SAS3 HBAs so
    that, during the driver load time driver can use corresponding host
    template(based the pci device ID) while registering a scsi host
    adapter instance for that pci device.

    * Registered two IOCTL devices, mpt2ctl is for SAS2 HBAs & mpt3ctl for
    SAS3 HBAs. Also updated the code to make sure that mpt2ctl device
    processes only those ioctl cmds issued for the SAS2 HBAs and mpt3ctl
    device processes only those ioctl cmds issued for the SAS3 HBAs.

    * Added separate indexing for SAS2 and SAS3 HBAs.

    * Replaced compile time check 'MPT2SAS_SCSI' to run time check
    'hba_mpi_version_belonged' whereever needed.

    * Aliased this merged driver to mpt2sas using MODULE_ALIAS.

    * Moved global varaible 'driver_name' to per adapter instance variable.

    * Created two raid function template and used corresponding raid
    function templates based on the run time check
    'hba_mpi_version_belonged'.

    * Moved mpt2sas_warpdrive.c file from mpt2sas to mpt3sas folder and
    renamed it as mpt3sas_warpdrive.c.

    * Also renamed the functions in mpt3sas_warpdrive.c file to follow
    current driver function name convention.

    * Updated the Makefile to build mpt3sas_warpdrive.o file for these
    WarpDrive-specific functions.

    * Also in function mpt3sas_setup_direct_io(), used sector_div() API
    instead of division operator (which gives compilation errors on 32 bit
    machines).

    * Removed mpt2sas files, mpt2sas directory & mpt3sas_module.c file.

    * Added module parameter 'hbas_to_enumerate' which permits using this
    merged driver as a legacy mpt2sas driver or as a legacy mpt3sas
    driver.

    Here are the available options for this module parameter:

    0 - Merged driver which enumerates both SAS 2.0 & SAS 3.0 HBAs
    1 - Acts as legacy mpt2sas driver, which enumerates only SAS 2.0 HBAs
    2 - Acts as legacy mpt3sas driver, which enumerates only SAS 3.0 HBAs

    * Removed mpt2sas entries from SCSI's Kconfig and Makefile files.

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • Bump the mpt2sas driver version to 20.102.00.00 and
    Bump the mpt3sas driver version to 9.101.00.00.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • setpci reset on nytro warpdrive card along with sysfs access and cli
    ioctl access resulted in kernel oops

    1. pci_access_mutex lock added to provide synchronization between IOCTL,
    sysfs, PCI resource handling path

    2. gioc_lock spinlock to protect list operations over multiple
    controllers

    This patch is ported from commit 6229b414b3ad ("mpt2sas: setpci reset
    kernel oops fix").

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • Added OEM Gen2 PnP ID branding names from mpt2sas driver.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • The fw_event_work struct is concurrently referenced at shutdown. Add a
    refcount to protect it and refactor the code to use it.

    Additionally, refactor _scsih_fw_event_cleanup_queue() such that it no
    longer iterates over the list without holding the lock since
    _firmware_event_work() concurrently deletes items from the list.

    This patch is ported from commit 008549f6e8a1 ("mpt2sas: Refcount
    fw_events and fix unsafe list usage"). These changes are also required
    for mpt3sas.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • sas_device objects can be referenced concurrently throughout the driver.
    We need a way to make sure threads can't delete them out from under each
    other. This patch adds the refcount and refactors the code to use it.

    Additionally, we cannot iterate over the sas_device_list without holding
    the lock or we risk corrupting random memory if items are added or
    deleted as we iterate. This patch refactors _scsih_probe_sas() to use
    the sas_device_list in a safe way.

    This patch is ported from the following mpt2sas driver commit
    d224fe0d6097 ("mpt2sas: Refcount sas_device objects and fix unsafe list
    usage").

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • A new sysfs shost attribute called "BMR_status" is implemented to report
    Backup Rail Monitor status.

    This attribute is located in:

    /sys/class/scsi_host/host#/BMR_status

    When reading this adapter attribute, the driver will output the state of
    GPIO[24]. It returns "0" if BMR is healthy and "1" for failure.

    If it returns an empty string then it means that there was an error
    while obtaining the BMR status. Check dmesg for what error has occurred.

    This sysfs shost attribute is mainly for WarpDrive controllers.

    This commit is a port of 6c265660c262 ("mpt2sas: Provide sysfs attribute
    to report Backup Rail Monitor Status").

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • Ported the following list of WarpDrive-specific patches:

    1. commit 0bdccdb0a090ad8dc5f851cad5e843244c410ee8 ("mpt2sas: WarpDrive
    New product SSS6200 support added")

    2. commit 82a452581230b3ffc9d6475dffdb2568497b5fec ("mpt2sas: WarpDrive
    Infinite command retries due to wrong scsi command entry in MPI
    message")

    3. commit ba96bd0b1d4a4e11f23671e1f375a5c8f46b0fe7 ("mpt2sas: Support
    for greater than 2TB capacity WarpDrive")

    4. commit 4da7af9494b2f98a1503a2634059300c3e4615e6 ("mpt2sas: Do not
    retry a timed out direct IO for Warpdrive")

    5. commit daeaa9df92bd742f4e6d4d6039d689277a8e31bd ("mpt2sas: Avoid type
    casting for direct I/O commands").

    Also set the mpt2_ioctl_iocinfo adapter_type to:

    1. MPT3_IOCTL_INTERFACE_SAS3 for Gen3 HBAs

    2. MPT2_IOCTL_INTERFACE_SAS2_SSS6200 for Warp Drive

    3. MPT2_IOCTL_INTERFACE_SAS2 for other Gen2 HBAs

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • This patch stops the driver to invoke kthread (which remove the dead
    ioc) for some time while EEH recovery has started.

    This patch is a port of commit b4730fb6e54a ("mpt2sas: fix for driver
    fails EEH, recovery from injected pci bus error")'.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • 1. Do not enable MSI-X vectors for SAS2008 B0 controllers

    2. Enable a single MSI-X vector for the following controller:

    a. SAS2004
    b. SAS2008
    c. SAS2008_1
    d. SAS2008_2
    e. SAS2008_3
    f. SAS2116_1
    g. SAS2116_2

    3. Enable Combined Reply Post Queue Support (i.e. 96 MSI-X vectors)
    for Gen3 Invader/Fury C0 and above revision HBAs

    4. Enable Combined Reply Post Queue Support (i.e. 96 MSI-X vectors)
    for all Intruder and Cutlass HBAs

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • Avoid sending PHYDISK_HIDDEN RAID action requests to SAS2 controllers
    since they don't support it.

    Also enable fast_path only for SAS3 HBAs.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • Gen2 HBAs use MPI scatter-gather lists whereas Gen3 HBAs use IEEE
    scatter-gather lists. Modify the common code part in such a way that it
    will build IEEE SGL tables for Gen3 HBAs and MPI SGL tables for Gen2
    HBAs.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • Currently there is a logging level option provided for each of our
    drivers in the kernel configuration utility. Users can enable this
    option to get more verbose information. By default it is enabled.

    Only when this option is enabled will the functions which display the
    required information get compiled in.

    As we are merging the both drivers we can no longer provide this
    configuration option. Remove the SCSI_MPTXSAS_LOGGING entry from Kconfig
    and unconditionally enable logging (by removing the #ifdef
    CONFIG_SCSI_MPT3SAS_LOGGING preprocessor check conditions) so that all
    functions which are defined to display more verbose information get
    compiled in.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • 1. Use 'hba_mpi_version_belonged' IOC varable to uniquely identify each
    individual generation driver functionality at runtime.

    2. Declare global variable 'driver_name' and use this variable while
    reserving PCI regions and while allocating the IRQs.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • 1. Create a mpt2sas_module.c file for mpt2sas where GEN2 HBA devices
    register with PCI, SML, IOCTL subsystems.

    2. Updated the Makefile to use the object files from mpt3sas folder.

    3. Defined a compilation flag SCSI_MPT2SAS which can be used to not
    include those sections of code from mpt3sas driver which are not
    required for mpt2sas driver.

    4. Inherited automatic diag buffer feature from mpt3sas driver.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • Created a mpt3sas_module.c file for mpt3sas driver where it can register
    SAS3 HBA devices with PCI, SML, IOCTL subsystems. Also removed the
    corresponding interfaces from mpt3sas_scsih.c file.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     
  • 1. Added mpt2sas driver related macros in mpt3sas header files

    2. Made scsi host's, raid class', pci's, ioctl's callback functions
    global so that both drivers can use them.

    Signed-off-by: Sreekanth Reddy
    Acked-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Sreekanth Reddy
     

28 Aug, 2015

15 commits

  • Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • Issue: When the disks are getting discovered and assigned device
    handles by the kernel, a device block followed by an unblock
    (due to broadcast primitives) issued by the driver is
    interspersed by the kernel changing the state of the device.
    Therefore the unblock by the driver results in a no operation
    within the kernel API.

    To fix this one, the below patch checks the return of the unblock API
    and performs a block followed by an unblock to unfreeze the block
    layer's I/O queue. Sufficient checks and prints are also added in the
    driver to identify this condition caused by the kernel.

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • Added dma_mapping_error() API after mapping an address with dma_map_single()
    API. Otherwise when CONFIG_DMA_API_DEBUG is enabled in the kernel, then it
    complains about mpt3sas driver not calling dma_mapping_error after mapping an
    address with dma_map_single

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • Created a thread using alloc_ordered_workqueue() API in order to process
    the works from firmware Work-queue sequentially instead of
    create_singlethread_workqueue() API.

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Joe Lawrence
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Cisco Branding String
    0x1000 0x97 0x1137 0x154 Cisco 9300-8i 12Gbps SAS HBA
    0x1000 0x97 0x1137 0x155 Cisco 12G Modular SAS Pass through Controller
    0x1000 0x97 0x1137 0x156 UCS C3X60 12G SAS Pass through Controller

    Signed-off-by: Sreekanth Reddy
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • … list fails for a SCSI command

    scsi_dma_map API will return a negative value (i.e. -ENOMEM)
    if DMA mapping of sg lists fails and zero if the sg list in the
    SCSI cmd is NULL. But drivers doesn't handled sg list DMA mapping
    failure case properly.

    So, Updated the code to return host busy error status to SCSI MID Layer(SML),
    when DMA mapping of scatter gather list fails for a SCSI command.
    So that SML will retry this SCSI cmd after some time.

    Signed-off-by: Sreekanth Reddy <Sreekanth.Reddy@avagotech.com>
    Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
    Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
    Signed-off-by: James Bottomley <JBottomley@Odin.com>

    Sreekanth Reddy
     
  • For any SCSI command, if the driver receives
    IOC status = SCSI_IOC_TERMINATED and log info = 0x32010081 then
    that command will be completed with DID_RESET host status.

    The definition of this log info value is
    "Virtual IO has failed and has to be retried".

    Firmware will provide this log info value with IOC Status
    "SCSI_IOC_TERMINATED", whenever a drive (with is a part of a volume)
    is pulled and pushed back within some minimal delay.
    With this log info value, firmware informs the driver to retry the
    failed IO command infinite times, so to provide some time for the
    firmware to discover the reinserted drive successfully instated of
    just retrying failed command for five times(doesn't giving enough
    time for firmware to complete the drive discovery) and failing the
    IO permanently even though drive came back successfully.

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • Below are the new changes to MPI 2.5 Rev K(2.5.6) specification and 2.00.35
    header files

    1) Added a minimum size requirement for target mode command buffers.

    2) Added MinMSIxIndex and MaxMSIxIndex fields to CommandBufferPostBase
    Request.

    3) For BIOS Page 1, added SSUTimeout field, and added Product Name String
    Format bits to the BiosOptions field

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • Add the following OEM's branding to the mpt3sas driver.

    "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Cisco Branding String
    0x1000 0x97 SVID = 0x1137 0x014C Cisco 9300-8E 12G SAS HBA

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • Added the following Dell branding to the mpt3sas driver.

    "VendorID" "DeviceID" "SubsystemVendor ID" "SubsystemDevice ID" Dell Branding String
    0x1000 0x0097 0x1028 0x1F46 DELL 12Gbps HBA

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • Following is the change set,

    1. Added more defines for the BiosOptions field of MPI2_CONFIG_PAGE_BIOS_1.

    2. Added MPI2_TOOLBOX_CLEAN_BIT26_PRODUCT_SPECIFIC definition.

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy
     
  • This Patch will provide more details of the devices such as slot number,
    enclosure logical id, enclosure level & connector name in the following
    scenarios,

    - When end device is added in the topology,

    - When the end device is removed from the setup,

    - When the SCSI mid layer issues TASK ABORT/ DEVICE RESET/ TARGET RESET during
    error handling,

    - When any command to the device fails with Sense key Hardware error or Medium
    error or Unit Attention,

    - When firmware returns device error or device not ready status for the end
    device,

    - When a Predicted fault is detected on an end device.

    This information can be used by the user to identify the location of the
    desired drive in the topology.

    Driver will get these information by reading the sas device page0.

    Signed-off-by: Sreekanth Reddy
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: James Bottomley

    Sreekanth Reddy