1. 24 Apr, 2003 11 commits
    • Justin T. Gibbs's avatar
      Aic79xx Driver Upate · 955cf944
      Justin T. Gibbs authored
       o Switch to handling bad SCSI status as a sequencer interrupt
         instead of having the kernel proccess these failures via
         the completion queue.  This is done because:
      
          - The old scheme required us to pause the sequencer and clear
            critical sections for each SCB.  It seems that these pause
            actions, if coincident with a sequencer FIFO interrupt, would
            result in a FIFO interrupt getting lost or directing to the
            wrong FIFO.  This caused hangs when the driver was stressed
            under high "queue full" loads.
          - The completion code assumed that it was always called with
            the sequencer running.  This may not be the case in timeout
            processing where completions occur manually via
            ahd_pause_and_flushwork().
          - With this scheme, the extra expense of clearing critical
            sections is avoided since the sequencer will only self pause
            once all pending selections have cleared and it is not in
            a critical section.
      955cf944
    • Justin T. Gibbs's avatar
      Aic79xx Driver Update · 0dba7c55
      Justin T. Gibbs authored
       o Revert ahd_pause_and_flushwork() behavior so that ENSELO can
         be cleared.  This makes ahd_pause_and_flushwork() more effective
         when the bus is hung.
      0dba7c55
    • Justin T. Gibbs's avatar
      Aic79xx Driver Update · dfed9e40
      Justin T. Gibbs authored
       o Correct "Unexpected PKT Busfree" error observed under high
         tag loads.
      dfed9e40
    • Justin T. Gibbs's avatar
      Aic79xx Driver Update · bebe7cd8
      Justin T. Gibbs authored
       o Perform a few firmware optimizations
       o Correct the packetized status handler so that
         it can handle CRC errors during status data packets.
      bebe7cd8
    • Justin T. Gibbs's avatar
      Aic7xxx Driver Update · 03b84f47
      Justin T. Gibbs authored
       o Auto disable PCI parity error reporting after 10 parity errors
         are observed.  The user is given a loud warning message telling
         them that eiter a device plugged into their motherboard or their
         motherboard is not very healthy.
      03b84f47
    • Justin T. Gibbs's avatar
      Aic7xxx and Aic79xx Driver Updates · b1d85861
      Justin T. Gibbs authored
       o Correct type safty of option parsing logic
       o Make option toggling work correctly
       o Add "probe_eisa_vlb" as an alias for the "no_probe" option so
         that there is a clearly defined name associated with the command
         line feature that allows eisa_vlb probes to be enabled/disabled
         in the aic7xxx driver.
       o PCI parity error checking defaults to being enabled.
      b1d85861
    • Justin T. Gibbs's avatar
      Aic7xxx and Aic79xx driver Update · 8f7e2dea
      Justin T. Gibbs authored
       o Fix style nits.
      8f7e2dea
    • Justin T. Gibbs's avatar
      Aic7xxx and Aic79xx driver updates · f02103cc
      Justin T. Gibbs authored
       o Remove extra complexity and code duplication in processing
         the completeq now that the completeq can be run while holding
         both the ah?_lock and the done_lock.
      f02103cc
    • Justin T. Gibbs's avatar
      Aic7xxx and Aic79xx driver updates · 57af4d8f
      Justin T. Gibbs authored
       o Work around peculiarities in the scan_scsis routines
         that could, due to having duplicate devices on our
         host's device list, cause tagged queing to be disabled
         for devices added via /proc.
      57af4d8f
    • Justin T. Gibbs's avatar
      Aic7xxx and Aic79xx Driver Update · 63bb1865
      Justin T. Gibbs authored
       o Correct channel information in our /proc output.
      63bb1865
    • Justin T. Gibbs's avatar
      Aic7xxx and Aic79xx driver Update · 36da50bc
      Justin T. Gibbs authored
      o Avoid pre-2.5.X mid-layer deadlock due to SCSI malloc fragmentation
      
      For pre-2.5.X kernels, attempt to calculate a safe value
      for our S/G list length.  In these kernels, the midlayer
      allocates an S/G array dynamically when a command is issued
      using SCSI malloc.  This list, which is in an OS dependent
      format that must later be copied to our private S/G list, is
      sized to house just the number of segments needed for the
      current transfer.  Since the code that sizes the SCSI malloc
      pool does not take into consideration fragmentation of the
      pool, executing transactions numbering just a fraction of our
      concurrent transaction limit with list lengths aproaching
      AH?_NSEG in length will quickly depleat the SCSI malloc pool
      of usable space.
      
      Unfortunately, the mid-layer does not properly handle this
      scsi malloc failure.  In kernels prior to 2.4.20, should
      the device that experienced the malloc failure be idle and
      never have any new I/O initiated (block queue is not "kicked"),
      the process will hang indefinitely.  In 2.4.20 and beyond,
      the disk experiencing the failure is marked as a "starved
      device", but this only helps if I/O is initiated to or completes
      on that HBA.  If the failure was induced by another HBA, and
      no other I/O is pending on the HBA and no new transactions are
      queued, we are still succeptible to the hang.  (Also note that
      many 2.4.X kernels do not properly lock the "some_device_starved"
      and "device_starved" fields calling into question their overall
      effectiveness).
      
      By sizing our S/G list to avoid SCSI malloc pool fragmentation,
      we will hopefully avoid this deadlock at least for configurations
      where our own HBAs are the only ones using the SCSI subsystem.
      36da50bc
  2. 09 Apr, 2003 5 commits
  3. 08 Apr, 2003 24 commits