1. 04 Dec, 2009 1 commit
    • Mike Christie's avatar
      [SCSI] modify change_queue_depth to take in reason why it is being called · e881a172
      Mike Christie authored
      
      
      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: default avatarMike 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: default avatarVasu Dev <vasu.dev@intel.com>
      [jejb: fixed up 53c700]
      Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
      e881a172
  2. 21 Jun, 2009 2 commits
  3. 23 May, 2009 1 commit
    • Kleber S. Souza's avatar
      [SCSI] ipr: fix PCI permanent error handler · 6ff63896
      Kleber S. Souza authored
      
      
      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: default avatarKleber S. Souza <klebers@linux.vnet.ibm.com>
      [brking@linux.vnet.ibm.com: alternate patch substituted]
      Signed-off-by: default avatarBrian King <brking@linux.vnet.ibm.com>
      Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
      6ff63896
  4. 20 May, 2009 1 commit
  5. 27 Apr, 2009 1 commit
  6. 07 Apr, 2009 1 commit
  7. 12 Mar, 2009 3 commits
  8. 16 Jan, 2009 1 commit
  9. 02 Jan, 2009 1 commit
  10. 29 Dec, 2008 2 commits
    • Mark Nelson's avatar
      [SCSI] ipr: fix lockdep warning from ipr_ioa_reset_done · 30237853
      Mark Nelson authored
      
      
      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: default avatarMark Nelson <markn@au1.ibm.com>
      Acked-by: default avatarBrian King <brking@linux.vnet.ibm.com>
      Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
      30237853
    • Arjan van de Ven's avatar
      [SCSI] advansys, arcmsr, ipr, nsp32, qla1280, stex: use pci_ioremap_bar() · 25729a7f
      Arjan van de Ven authored
      
      
      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: default avatarArjan van de Ven <arjan@linux.intel.com>
      Acked-by: default avatarMatthew 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: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
      25729a7f
  11. 23 Oct, 2008 1 commit
  12. 20 Oct, 2008 1 commit
  13. 09 Oct, 2008 1 commit
  14. 11 Jul, 2008 1 commit
  15. 29 Apr, 2008 1 commit
  16. 19 Apr, 2008 1 commit
  17. 17 Apr, 2008 6 commits
    • Tejun Heo's avatar
      libata: kill ata_noop_dev_select() · c9f75b04
      Tejun Heo authored
      
      
      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: default avatarTejun Heo <htejun@gmail.com>
      c9f75b04
    • Tejun Heo's avatar
      libata: remove check_status from non-SFF drivers · 520d06f9
      Tejun Heo authored
      
      
      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: default avatarTejun Heo <htejun@gmail.com>
      520d06f9
    • Tejun Heo's avatar
      libata: replace tf_read with qc_fill_rtf for non-SFF drivers · 4c9bf4e7
      Tejun Heo authored
      
      
      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: default avatarTejun Heo <htejun@gmail.com>
      4c9bf4e7
    • Tejun Heo's avatar
      libata: add qc_fill_rtf port operation · 22183bf5
      Tejun Heo authored
      
      
      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: default avatarTejun Heo <htejun@gmail.com>
      22183bf5
    • Tejun Heo's avatar
      libata: rename SFF port ops · 5682ed33
      Tejun Heo authored
      
      
      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: default avatarTejun Heo <htejun@gmail.com>
      5682ed33
    • Tejun Heo's avatar
      libata: make reset related methods proper port operations · a1efdaba
      Tejun Heo authored
      
      
      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: default avatarTejun Heo <htejun@gmail.com>
      a1efdaba
  18. 19 Feb, 2008 1 commit
    • James Bottomley's avatar
      libata: eliminate the home grown dma padding in favour of · dde20207
      James Bottomley authored
      
      
      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: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
      Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
      Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
      dde20207
  19. 03 Feb, 2008 1 commit
  20. 23 Jan, 2008 2 commits
    • Tejun Heo's avatar
      libata: convert to chained sg · ff2aeb1e
      Tejun Heo authored
      
      
      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: default avatarTejun Heo <htejun@gmail.com>
      Cc: Jens Axboe <jens.axboe@oracle.com>
      Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
      ff2aeb1e
    • Tejun Heo's avatar
      libata: rename ATA_PROT_ATAPI_* to ATAPI_PROT_* · 0dc36888
      Tejun Heo authored
      
      
      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: default avatarTejun Heo <htejun@gmail.com>
      Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
      0dc36888
  21. 11 Jan, 2008 1 commit
  22. 24 Oct, 2007 1 commit
  23. 22 Oct, 2007 1 commit
  24. 18 Oct, 2007 1 commit
    • Jeff Garzik's avatar
      [libata] kill ata_sg_is_last() · 3be6cbd7
      Jeff Garzik authored
      
      
      Short term, this works around a bug introduced by early sg-chaining
      work.
      
      Long term, removing this function eliminates a branch from a hot
      path loop in each scatter/gather table build.  Also, as this code
      demonstrates, we don't need to _track_ the end of the s/g list, as
      long as we mark it in some way.  And doing so programatically is nice.
      So its a useful cleanup, regardless of its short term effects.
      
      Based conceptually on a quick patch by Jens Axboe.
      Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
      3be6cbd7
  25. 12 Oct, 2007 3 commits
    • Jeff Garzik's avatar
      [libata] Remove ->port_disable() hook · ac8869d5
      Jeff Garzik authored
      
      
      It was always set to ata_port_disable().  Removed the hook, and replaced
      the very few ap->ops->port_disable() callsites with direct calls to
      ata_port_disable().
      Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
      ac8869d5
    • Tejun Heo's avatar
      libata-link: linkify reset · cc0680a5
      Tejun Heo authored
      
      
      Make reset methods and related functions deal with ata_link instead of
      ata_port.
      
      * ata_do_reset()
      * ata_eh_reset()
      * all prereset/reset/postreset methods and related functions
      
      This patch introduces no behavior change.
      Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
      Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
      cc0680a5
    • Tejun Heo's avatar
      libata-link: introduce ata_link · 9af5c9c9
      Tejun Heo authored
      
      
      Introduce ata_link.  It abstracts PHY and sits between ata_port and
      ata_device.  This new level of abstraction is necessary to support
      SATA Port Multiplier, which basically adds a bunch of links (PHYs) to
      a ATA host port.  Fields related to command execution, spd_limit and
      EH are per-link and thus moved to ata_link.
      
      This patch only defines the host link.  Multiple link handling will be
      added later.  Also, a lot of ap->link derefences are added but many of
      them will be removed as each part is converted to deal directly with
      ata_link instead of ata_port.
      
      This patch introduces no behavior change.
      Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
      Cc: James Bottomley <James.Bottomley@SteelEye.com>
      Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
      9af5c9c9
  26. 11 Jul, 2007 2 commits
    • Zhang Rui's avatar
      sysfs: add parameter "struct bin_attribute *" in .read/.write methods for sysfs binary attributes · 91a69029
      Zhang Rui authored
      
      
      Well, first of all, I don't want to change so many files either.
      
      What I do:
      Adding a new parameter "struct bin_attribute *" in the
      .read/.write methods for the sysfs binary attributes.
      
      In fact, only the four lines change in fs/sysfs/bin.c and
      include/linux/sysfs.h do the real work.
      But I have to update all the files that use binary attributes
      to make them compatible with the new .read and .write methods.
      I'm not sure if I missed any. :(
      
      Why I do this:
      For a sysfs attribute, we can get a pointer pointing to the
      struct attribute in the .show/.store method,
      while we can't do this for the binary attributes.
      I don't know why this is different, but this does make it not
      so handy to use the binary attributes as the regular ones.
      So I think this patch is reasonable. :)
      
      Who benefits from it:
      The patch that exposes ACPI tables in sysfs
      requires such an improvement.
      All the table binary attributes share the same .read method.
      Parameter "struct bin_attribute *" is used to get
      the table signature and instance number which are used to
      distinguish different ACPI table binary attributes.
      
      Without this parameter, we need to offer different .read methods
      for different ACPI table binary attributes.
      This is impossible as there are various ACPI tables on different
      platforms, and we don't know what they are until they are loaded.
      Signed-off-by: default avatarZhang Rui <rui.zhang@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      91a69029
    • Auke Kok's avatar
      PCI: Change all drivers to use pci_device->revision · 44c10138
      Auke Kok authored
      
      
      Instead of all drivers reading pci config space to get the revision
      ID, they can now use the pci_device->revision member.
      
      This exposes some issues where drivers where reading a word or a dword
      for the revision number, and adding useless error-handling around the
      read. Some drivers even just read it for no purpose of all.
      
      In devices where the revision ID is being copied over and used in what
      appears to be the equivalent of hotpath, I have left the copy code
      and the cached copy as not to influence the driver's performance.
      
      Compile tested with make all{yes,mod}config on x86_64 and i386.
      Signed-off-by: default avatarAuke Kok <auke-jan.h.kok@intel.com>
      Acked-by: default avatarDave Jones <davej@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      44c10138
  27. 29 May, 2007 1 commit