1. 03 3月, 2010 4 次提交
  2. 26 2月, 2010 1 次提交
  3. 16 12月, 2009 1 次提交
  4. 10 12月, 2009 1 次提交
    • K
      [SCSI] ipr: fix EEH recovery · 99c965dd
      Kleber Sacilotto de Souza 提交于
      After commits c82f63e4 (PCI: check saved
      state before restore) and 4b77b0a2 (PCI:
      Clear saved_state after the state has been restored) PCI drivers are
      prevented from restoring the device standard configuration registers
      twice in a row. These changes introduced a regression on ipr EEH
      recovery.
      
      The ipr device driver saves the PCI state only during the device probe
      and restores it on ipr_reset_restore_cfg_space() during IOA resets. This
      behavior is causing the EEH recovery to fail after the second error
      detected, since the registers are not being restored.
      
      One possible solution would be saving the registers after restoring
      them. The problem with this approach is that while recovering from an
      EEH error if pci_save_state() results in an EEH error, the adapter/slot
      will be reset, and end up back in ipr_reset_restore_cfg_space(), but it
      won't have a valid saved state to restore, so pci_restore_state() will
      fail.
      
      The following patch introduces a workaround for this problem, hacking
      around the PCI API by setting pdev->state_saved = true before we do the
      restore. It fixes the EEH regression and prevents that we hit another
      EEH error during EEH recovery.
      
      
      [jejb: fix is a hack ... Jesse and Rafael will fix properly]
      Signed-off-by: NKleber Sacilotto de Souza <klebers@linux.vnet.ibm.com>
      Acked-by: NBrian King <brking@linux.vnet.ibm.com>
      Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
      Cc: stable@kernel.org
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      99c965dd
  5. 05 12月, 2009 1 次提交
    • M
      [SCSI] modify change_queue_depth to take in reason why it is being called · e881a172
      Mike Christie 提交于
      This patch modifies scsi_host_template->change_queue_depth so that
      it takes an argument indicating why it is being called. This will be
      used so that if a LLD needs to do some extra processing when
      handling queue fulls or later ramp ups, it can do so.
      
      This is a simple port of the drivers setting a change_queue_depth
      callback. In the patch I just have these LLDs adjust the queue depth
      if the user was requesting it.
      Signed-off-by: NMike Christie <michaelc@cs.wisc.edu>
      
      [Vasu.Dev: v2
      	Also converted pmcraid_change_queue_depth and then verified
      all modules compile  using "make allmodconfig" for any new build
      warnings on X86_64.
      
      	Updated original description after combing two original
      patches from Mike to make this patch git bisectable.]
      Signed-off-by: NVasu Dev <vasu.dev@intel.com>
      [jejb: fixed up 53c700]
      Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
      e881a172
  6. 07 11月, 2009 1 次提交
  7. 21 6月, 2009 2 次提交
  8. 24 5月, 2009 1 次提交
    • K
      [SCSI] ipr: fix PCI permanent error handler · 6ff63896
      Kleber S. Souza 提交于
      The ipr driver can hang if it encounters enough PCI errors
      to trigger the permanent error handler. The driver will attempt
      to initiate a "bringdown" of the adapter and fail all pending
      ops back. However, this bringdown is unlike any other bringdown
      of the adapter in the code as the driver. In this code path we
      end up failing back ops with allow_cmds still set to 1. This results
      in some commands, the HCAM commands in particular, getting immediately
      re-issued to the adapter on the done call, which results in
      an infinite loop in ipr_fail_all_ops. Fix this by setting allow_cmds
      to zero in this path.
      Signed-off-by: NKleber S. Souza <klebers@linux.vnet.ibm.com>
      [brking@linux.vnet.ibm.com: alternate patch substituted]
      Signed-off-by: NBrian King <brking@linux.vnet.ibm.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      6ff63896
  9. 21 5月, 2009 1 次提交
  10. 27 4月, 2009 1 次提交
  11. 07 4月, 2009 1 次提交
  12. 13 3月, 2009 3 次提交
  13. 16 1月, 2009 1 次提交
  14. 03 1月, 2009 1 次提交
  15. 30 12月, 2008 2 次提交
    • M
      [SCSI] ipr: fix lockdep warning from ipr_ioa_reset_done · 30237853
      Mark Nelson 提交于
      To fix the following lockdep warning we turn the spin_unlock_irq() into
      a spin_unlock() and similarly for the corresponding spin_lock_irq(). We
      can do this because there is no need to enable interrupts in this path
      (thanks to Bring King for the tip).
      
      Badness at kernel/lockdep.c:2193
      NIP: c0000000000855d0 LR: c0000000000855b4 CTR: c0000000000482d0
      REGS: c00000000fffb8d0 TRAP: 0700   Not tainted  (2.6.28-rc5-autokern1)
      MSR: 8000000000021032 <ME,IR,DR>  CR: 28000022  XER: 00000004
      TASK = c00000000091fa80[0] 'swapper' THREAD: c000000000a3c000 CPU: 0
      GPR00: 0000000000000000 c00000000fffbb50 c000000000a3c2e0 0000000000000001
      GPR04: 000000000000a580 c0000000003870d4 0000000000000000 0000000000000001
      GPR08: 0000000000000000 c00000000112fdf0 c0000000008ed918 c000000000abcfd0
      GPR12: 0000000048000088 c000000000a7f300 0000000000000000 0000000002100000
      GPR16: c000000000644bd0 c000000000643390 0000000000000000 00000000003d0c00
      GPR20: 00000000028372d8 c0000000007372d8 0000000002837548 c000000000737548
      GPR24: c000000000644660 00000000028372d8 000000000000001a c000000076760000
      GPR28: 0000000000000004 c0000000004e8450 c0000000009aafb0 c00000000091fa80
      NIP [c0000000000855d0] .trace_hardirqs_on_caller+0x10c/0x194
      LR [c0000000000855b4] .trace_hardirqs_on_caller+0xf0/0x194
      Call Trace:
      [c00000000fffbb50] [c00000000fffbbe0] 0xc00000000fffbbe0 (unreliable)
      [c00000000fffbbe0] [c0000000004e8450] ._spin_unlock_irq+0x38/0x5c
      [c00000000fffbc70] [c0000000003870d4] .ipr_ioa_reset_done+0x204/0x284
      [c00000000fffbd10] [c00000000037d234] .ipr_reset_ioa_job+0xc4/0xec
      [c00000000fffbda0] [c000000000385ce0] .ipr_isr+0x208/0x484
      [c00000000fffbe50] [c0000000000aaf3c] .handle_IRQ_event+0x58/0xd4
      [c00000000fffbef0] [c0000000000ad978] .handle_fasteoi_irq+0x110/0x1ac
      [c00000000fffbf90] [c000000000025214] .call_handle_irq+0x1c/0x2c
      [c000000000a3f9a0] [c00000000000d168] .do_IRQ+0x120/0x210
      [c000000000a3fa40] [c000000000004804] hardware_interrupt_entry+0x1c/0x98
      --- Exception: 501 at .pseries_dedicated_idle_sleep+0xec/0x1cc
          LR = .pseries_dedicated_idle_sleep+0xdc/0x1cc
      [c000000000a3fd30] [c000000000038208] .pseries_dedicated_idle_sleep+0x74/0x1cc (unreliable)
      [c000000000a3fdd0] [c000000000012134] .cpu_idle+0x114/0x1dc
      [c000000000a3fe60] [c0000000004ecb18] .rest_init+0x7c/0x94
      [c000000000a3fee0] [c000000000700a40] .start_kernel+0x4b8/0x4e0
      [c000000000a3ff90] [c000000000008368] .start_here_common+0x1c/0x34
      Instruction dump:
      e92d01b0 80090894 2f800000 41be002c 481ed1d1 60000000 2fa30000 419e0080
      e93e8090 80090000 2f800000 409e0070 <0fe00000> 48000068 7fe3fb78 38800001
      Signed-off-by: NMark Nelson <markn@au1.ibm.com>
      Acked-by: NBrian King <brking@linux.vnet.ibm.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      30237853
    • A
      [SCSI] advansys, arcmsr, ipr, nsp32, qla1280, stex: use pci_ioremap_bar() · 25729a7f
      Arjan van de Ven 提交于
      Use the newly introduced pci_ioremap_bar() function in drivers/scsi.
      pci_ioremap_bar() just takes a pci device and a bar number, with the goal
      of making it really hard to get wrong, while also having a central place
      to stick sanity checks.
      Signed-off-by: NArjan van de Ven <arjan@linux.intel.com>
      Acked-by: NMatthew Wilcox <willy@linux.intel.com>
      Cc: Brian King <brking@us.ibm.com>
      Cc: Ed Lin <ed.lin@promise.com>
      Cc: Nick Cheng <nick.cheng@areca.com.tw>
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      25729a7f
  16. 24 10月, 2008 1 次提交
  17. 21 10月, 2008 1 次提交
  18. 09 10月, 2008 1 次提交
  19. 12 7月, 2008 1 次提交
  20. 30 4月, 2008 1 次提交
  21. 20 4月, 2008 1 次提交
  22. 18 4月, 2008 6 次提交
    • T
      libata: kill ata_noop_dev_select() · c9f75b04
      Tejun Heo 提交于
      Now that SFF assumptions are separated out from non-SFF reset
      sequence, port_ops->sff_dev_select() is no longer necessary for
      non-SFF controllers.  Kill ata_noop_dev_select() and ->sff_dev_select
      initialization from base and other non-SFF port_ops.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      c9f75b04
    • T
      libata: remove check_status from non-SFF drivers · 520d06f9
      Tejun Heo 提交于
      Now that all SFF stuff is separated out of core layer, core layer
      doesn't call ops->[alt_]check_status().  In fact, no one calls them
      for non-SFF drivers anymore.  Kill them.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      520d06f9
    • T
      libata: replace tf_read with qc_fill_rtf for non-SFF drivers · 4c9bf4e7
      Tejun Heo 提交于
      Now that all SFF stuff is separated out of core layer, core layer
      doesn't call ops->tf_read directly.  It gets called only via
      ops->qc_fill_rtf() for non-SFF drivers.  This patch directly
      implements private ops->qc_fill_rtf() for non-SFF controllers and kill
      ops->tf_read().
      
      This is much cleaner for non-SFF controllers as some of them have to
      cache SFF register values in private data structure and report the
      cached values via ops->tf_read().  Also, ops->tf_read() gets nasty for
      controllers which don't have clear notion of TF registers when
      operation is not in progress.
      
      As this change makes default ops->qc_fill_rtf unnecessary, move
      ata_sff_qc_fill_rtf() form ata_base_port_ops to ata_sff_port_ops where
      it belongs.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      4c9bf4e7
    • T
      libata: add qc_fill_rtf port operation · 22183bf5
      Tejun Heo 提交于
      On command completion, ata_qc_complete() directly called ops->tf_read
      to fill qc->result_tf.  This patch adds ops->qc_fill_rtf to replace
      hardcoded ops->tf_read usage.
      
      ata_sff_qc_fill_rtf() which uses ops->tf_read to fill result_tf is
      implemented and set in ata_base_port_ops and other ops tables which
      don't inherit from ata_base_port_ops, so this patch doesn't introduce
      any behavior change.
      
      ops->qc_fill_rtf() is similar to ops->sff_tf_read() but can only be
      called when a command finishes.  As some non-SFF controllers don't
      have TF registers defined unless they're associated with in-flight
      commands, this limited operation makes life easier for those drivers
      and help lifting SFF assumptions from libata core layer.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      22183bf5
    • T
      libata: rename SFF port ops · 5682ed33
      Tejun Heo 提交于
      Add sff_ prefix to SFF specific port ops.
      
      This rename is in preparation of separating SFF support out of libata
      core layer.  This patch strictly renames ops and doesn't introduce any
      behavior difference.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      5682ed33
    • T
      libata: make reset related methods proper port operations · a1efdaba
      Tejun Heo 提交于
      Currently reset methods are not specified directly in the
      ata_port_operations table.  If a LLD wants to use custom reset
      methods, it should construct and use a error_handler which uses those
      reset methods.  It's done this way for two reasons.
      
      First, the ops table already contained too many methods and adding
      four more of them would noticeably increase the amount of necessary
      boilerplate code all over low level drivers.
      
      Second, as ->error_handler uses those reset methods, it can get
      confusing.  ie. By overriding ->error_handler, those reset ops can be
      made useless making layering a bit hazy.
      
      Now that ops table uses inheritance, the first problem doesn't exist
      anymore.  The second isn't completely solved but is relieved by
      providing default values - most drivers can just override what it has
      implemented and don't have to concern itself about higher level
      callbacks.  In fact, there currently is no driver which actually
      modifies error handling behavior.  Drivers which override
      ->error_handler just wraps the standard error handler only to prepare
      the controller for EH.  I don't think making ops layering strict has
      any noticeable benefit.
      
      This patch makes ->prereset, ->softreset, ->hardreset, ->postreset and
      their PMP counterparts propoer ops.  Default ops are provided in the
      base ops tables and drivers are converted to override individual reset
      methods instead of creating custom error_handler.
      
      * ata_std_error_handler() doesn't use sata_std_hardreset() if SCRs
        aren't accessible.  sata_promise doesn't need to use separate
        error_handlers for PATA and SATA anymore.
      
      * softreset is broken for sata_inic162x and sata_sx4.  As libata now
        always prefers hardreset, this doesn't really matter but the ops are
        forced to NULL using ATA_OP_NULL for documentation purpose.
      
      * pata_hpt374 needs to use different prereset for the first and second
        PCI functions.  This used to be done by branching from
        hpt374_error_handler().  The proper way to do this is to use
        separate ops and port_info tables for each function.  Converted.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      a1efdaba
  23. 19 2月, 2008 1 次提交
    • J
      libata: eliminate the home grown dma padding in favour of · dde20207
      James Bottomley 提交于
      that provided by the block layer
      
      ATA requires that all DMA transfers begin and end on word boundaries.
      Because of this, a large amount of machinery grew up in ide to adjust
      scatterlists on this basis.  However, as of 2.5, the block layer has a
      dma_alignment variable which ensures both the beginning and length of a
      DMA transfer are aligned on the dma_alignment boundary.  Although the
      block layer does adjust the beginning of the transfer to ensure this
      happens, it doesn't actually adjust the length, it merely makes sure
      that space is allocated for transfers beyond the declared length.  The
      upshot of this is that scatterlists may be padded to any size between
      the actual length and the length adjusted to the dma_alignment safely
      knowing that memory is allocated in this region.
      
      Right at the moment, SCSI takes the default dma_aligment which is on a
      512 byte boundary.  Note that this aligment only applies to transfers
      coming in from user space.  However, since all kernel allocations are
      automatically aligned on a minimum of 32 byte boundaries, it is safe to
      adjust them in this manner as well.
      
      tj: * Adjusting sg after padding is done in block layer.  Make libata
            set queue alignment correctly for ATAPI devices and drop broken
            sg mangling from ata_sg_setup().
          * Use request->raw_data_len for ATAPI transfer chunk size.
          * Killed qc->raw_nbytes.
          * Separated out killing qc->n_iter.
      Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      dde20207
  24. 03 2月, 2008 1 次提交
  25. 23 1月, 2008 2 次提交
    • T
      libata: convert to chained sg · ff2aeb1e
      Tejun Heo 提交于
      libata used private sg iterator to handle padding sg.  Now that sg can
      be chained, padding can be handled using standard sg ops.  Convert to
      chained sg.
      
      * s/qc->__sg/qc->sg/
      
      * s/qc->pad_sgent/qc->extra_sg[]/.  Because chaining consumes one sg
        entry.  There need to be two extra sg entries.  The renaming is also
        for future addition of other extra sg entries.
      
      * Padding setup is moved into ata_sg_setup_extra() which is organized
        in a way that future addition of other extra sg entries is easy.
      
      * qc->orig_n_elem is unused and removed.
      
      * qc->n_elem now contains the number of sg entries that LLDs should
        map.  qc->mapped_n_elem is added to carry the original number of
        mapped sgs for unmapping.
      
      * The last sg of the original sg list is used to chain to extra sg
        list.  The original last sg is pointed to by qc->last_sg and the
        content is stored in qc->saved_last_sg.  It's restored during
        ata_sg_clean().
      
      * All sg walking code has been updated.  Unnecessary assertions and
        checks for conditions the core layer already guarantees are removed.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Cc: Jens Axboe <jens.axboe@oracle.com>
      Signed-off-by: NJeff Garzik <jeff@garzik.org>
      ff2aeb1e
    • T
      libata: rename ATA_PROT_ATAPI_* to ATAPI_PROT_* · 0dc36888
      Tejun Heo 提交于
      ATA_PROT_ATAPI_* are ugly and naming schemes between ATA_PROT_* and
      ATA_PROT_ATAPI_* are inconsistent causing confusion.  Rename them to
      ATAPI_PROT_* and make them consistent with ATA counterpart.
      Signed-off-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      0dc36888
  26. 12 1月, 2008 1 次提交
  27. 24 10月, 2007 1 次提交