1. 13 10月, 2007 1 次提交
  2. 16 8月, 2007 6 次提交
  3. 04 8月, 2007 9 次提交
    • S
      [SCSI] aacraid: prevent panic on adapter resource failure · 2b053729
      Salyzyn, Mark 提交于
      If the driver fails to allocate the contiguous (DMAable) memory for
      system reasons, we fail to load the instance, but then we try to free
      the <nul> allocation in the cleanup code and we get a panic in
      pci_free_consistent(). This is reported against an older kernel, hope
      this is relevant for latest/greatest.
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      2b053729
    • B
      [SCSI] aha152x: use data accessors and !use_sg cleanup · 2338545a
      Boaz Harrosh 提交于
      And finally this is the regular !use_sg cleanup
      and use of data accessors.
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      2338545a
    • B
      [SCSI] aha152x: Fix check_condition code-path · 45333ffa
      Boaz Harrosh 提交于
      check_condition code-path was similar but more
      complicated to Reset. It went like this:
      
        1. extra space was allocated at aha152x_scdata for mirroring
          scsi_cmnd members.
        2. At aha152x_internal_queue() every not check_condition
          (REQUEST_SENSE) command was copied to above members in
          case of error.
        3. At busfree_run() in the DONE_CS phase if a Status of
          SAM_STAT_CHECK_CONDITION was detected. The command was
          re-queued Internally using aha152x_internal_queue(,,check_condition,)
          The old command members are over written with the
          REQUEST_SENSE info.
        4. At busfree_run() in the DONE_CS phase again. If it is a
          check_condition command, info was restored from mirror
          made at first call to aha152x_internal_queue() (see 2)
          and the command is completed.
      
      What I did is:
      
        1. Allocate less space in aha152x_scdata only for the 16-byte
          original command. (which is actually not needed by scsi-ml
          anymore at this stage. But this is to much knowledge of scsi-ml)
        2. If Status == SAM_STAT_CHECK_CONDITION, then like before
           re-queue a REQUEST_SENSE command. But only now save original
           command members. (Less of them)
        3. In aha152x_internal_queue(), just like for Reset, use the
          check_condition hint to set differently the working members.
          execute the command.
        4. At busfree_run() in the DONE_CS phase again. restore needed
           members.
      
      While at it. This patch fixes a BUG. Old code when sending
      a REQUEST_SENSE for a failed command. Would than return with
      cmd->resid == 0 which was the status of the REQUEST_SENSE.
      The failing command resid was lost. And when would resid
      be interesting if not on a failing command?
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      45333ffa
    • B
      [SCSI] aha152x: Clean Reset path · 66acdb03
      Boaz Harrosh 提交于
      What Reset code was doing:  Save command's important/dangerous
      Info on stack. NULL those members from scsi_cmnd.
      Issue a Reset. wait for it to finish than restore members
      and return.
      
      What I do is save or NULL nothing. But use the "resetting"
      hint in aha152x_internal_queue() to NULL out working members
      and leave struct scsi_cmnd alone.
      
      The indent here looks funny but it will change/drop in last
      patch and it is clear this way what changed.
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      66acdb03
    • B
      [SCSI] aha152x: preliminary fixes and some comments · 0ceb4798
      Boaz Harrosh 提交于
        hunk by hunk:
        - CHECK_CONDITION is what happens to cmnd->status >> 1
          or after status_byte() macro. But here it is used
          directly on status which means 0x1 which is an undefined
          bit in the standard. And is a status that will never
          return from a target.
      
        - in busfree_run at the DONE_SC phase we have 3 distinct
          operation:
      	1-if(DONE_SC->SCp.phase & check_condition)
                The REQUEST_SENSE command return.
                - Restore original command
      	  - Than continue to operation 3.
      	2-if(DONE_SC->SCp.Status==SAM_STAT_CHECK_CONDITION)
                A regular command returned with a status.
      	  - Internally re-Q a REQUEST_SENSE.
      	  - Do not do operation 3.
      	3-
      	  - Complete the command and return it to scsi-ml
           So the 0x2 in both these operations (1,2) means the scsi
           check-condition status, hence SAM_STAT_CHECK_CONDITION
      
        - Here the code asks about !(DONE_SC->SCp.Status & not_issued)
          but "not_issued" is an enum belonging to the "phase" member
          and not to the Status returned from target. The reason this
          works is because not_issued==1 and Also CHECK_CONDITION==1
          (remember from hunk 1). So actually the code was asking
          !(DONE_SC->SCp.Status & CHECK_CONDITION). Which means
          "Has the status been read from target yet?"
          Staus is read at status_run(). "not_issued" is
          cleared in seldo_run() which is usually earlier than
          status_run().
      
        So this patch does nothing as far as assembly is concerned
        but it does let the reader understand what is going on.
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      0ceb4798
    • B
      [SCSI] aha152x: use bounce buffer · b1ee0795
      Boaz Harrosh 提交于
      Cause highmem buffers to be bounced to low memory until this
      driver supports highmem addresses.  Otherwise it just oopses
      on NULL buffer addresses.
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      b1ee0795
    • B
      [SCSI] aha152x: fix debug mode symbol conflict · 50535df3
      Boaz Harrosh 提交于
      The symbol <debug_locks> conflicts with the rather global one in
      include/linux/locks.h.
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      50535df3
    • J
      [SCSI] sd: disentangle barriers in SCSI · 03a5743a
      James Bottomley 提交于
      Our current implementation has a generic set of barrier functions that
      go through the SCSI driver model.  Realistically, this is unnecessary,
      because the only device that can use barriers (sd) can set the flush
      functions up at probe or revalidate time.  This patch pulls the barrier
      functions out of the mid layer and scsi driver model and relocates them
      directly in sd.
      Acked-by: NTejun Heo <htejun@gmail.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      03a5743a
    • J
      [SCSI] lpfc : scsi command accessor fix for 8.2.2 · 66dbfbe6
      James Smart 提交于
      It was pointed out by Boaz Harrosh <bharrosh@panasas.com> that our
      8.2.2 lpfc patches revert a change to using SCSI command accessor
      functions.
      
      This patch, to be applied on top of the 8.2.2. patches, updates the
      driver for the accessor functions.
      Signed-off-by: NJames Smart <James.Smart@emulex.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      66dbfbe6
  4. 02 8月, 2007 10 次提交
  5. 01 8月, 2007 2 次提交
  6. 31 7月, 2007 9 次提交
  7. 28 7月, 2007 3 次提交
    • J
      [SCSI] libsas: Fix potential NULL dereference in sas_smp_get_phy_events() · 92631fa4
      Jesper Juhl 提交于
      In sas_smp_get_phy_events() we never test if the call to
      alloc_smp_req(RPEL_REQ_SIZE) succeeds or fails. That means we run
      the risk of dereferencing a NULL pointer if it does fail. Far
      better to test if we got NULL back and in that case return -ENOMEM
      just as we already do for the other memory allocation in that
      function.
      Signed-off-by: NJesper Juhl <jesper.juhl@gmail.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      92631fa4
    • S
      [SCSI] aacraid: fix Sunrise Lake reset handling · 9859c1aa
      Salyzyn, Mark 提交于
      The patch is *much* smaller than the description. I am attempting to
      answer to those that want to understand an issue that was reported in
      May this year.
      
      If a Sunrise Lake based card that requires an alternate reset mechanism
      is set up to ignore the commanded IOP_RESET it reports 0x00000010
      (IOP_RESET ignored) instead of 0x3803000F (use alternate reset mechanism
      to reset all cores), and thus the reset platform function decides to
      switch to IOP_RESET_ALWAYS because the reset platform function
      parameters indicate that we *need* to reset the card. IOP_RESET_ALWAYS
      then responds with the 0x3803000F return code, but alas we treat this as
      an error instead of using the alternate reset mechanism (put a 0x03 into
      the register offset 0x38). The reset fails, but the fact that the
      IOP_RESET_ALWAYS command was issued has put the card in a purposeful
      shutdown state in preparation for the alternate hardware reset to be
      applied. Yuck.
      
      IOP_RESET is ignored in internal production cards, typically to ensure
      that we catch all adapter lockup issues without the driver progressing
      further, so this would not appear to be a field issue and thus this
      patch was destined to be only in the internal Adaptec source tree.
      IOP_RESET_ALWAYS is reserved for
      kexec/kdump/FirmwareUpdate/AutomatedTestFrames so we did not function as
      expected in any case. Also in the past we have had OEMs specifically
      request that cards not be resetable after a BlinkLED/FirmwareAssert for
      one reason or another and To head off the possibility that the Sunrise
      Lake based cards would suffer a similar fate, we propose the enclosed
      fix.
      
      Yinghai Lu of SUN had a pre-production card with IOP_RESET disabled when
      he reported an issue to the linux kernel list back in May regarding a
      kexec problem resulting from this reset being ignore. His fix was to
      update the Firmware to one that did not ignore the IOP_RESET. Previous
      kernels did not attempt to reset the adapter and that is why it surfaced
      as a regression in his hands.
      
      The current list of aacraid based cards that use Sunrise Lake:
      
      9005:0285:9005:02b5     Adaptec 5445
      9005:0285:9005:02b6     Adaptec 5805
      9005:0285:9005:02b7     Adaptec 5085
      9005:0285:9005:02c3     Adaptec 51205
      9005:0285:9005:02c4     Adaptec 51605
      9005:0285:9005:02ce     Adaptec 51245
      9005:0285:9005:02cf     Adaptec 51645
      9005:0285:9005:02d0     Adaptec 52445
      9005:0285:9005:02d1     Adaptec 5405
      9005:0285:9005:02b8     ICP     ICP5445SL
      9005:0285:9005:02b9     ICP     ICP5085SL
      9005:0285:9005:02ba     ICP     ICP5805SL
      9005:0285:9005:02c5     ICP     ICP5125SL
      9005:0285:9005:02c6     ICP     ICP5165SL
      9005:0285:108e:7aac     SUN     STK RAID REM
      9005:0285:108e:0286     SUN     STK RAID INT
      9005:0285:108e:0287     SUN     STK RAID EXT
      9005:0285:108e:7aae     SUN     STK RAID EM
      
      All of these are publicly released with IOP_RESET enabled. So there is
      no immediate need for this patch.
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      9859c1aa
    • S
      [SCSI] aacraid: add SCSI SYNCHONIZE_CACHE range checking · b90f90d2
      Salyzyn, Mark 提交于
      Customer running an application that issues SYNCHRONIZE_CACHE calls
      directly noticed the broad stroke of the current implementation in the
      aacraid driver resulting in multiple applications feeding I/O to the
      storage causing the issuing application to stall for long periods of
      time. By only waiting for the current WRITE commands, rather than all
      commands, to complete; and those that are in range of the
      SYNCHRONIZE_CACHE call that would associate more tightly with the
      issuing application before telling the Firmware to flush it's dirty
      cache, we managed to reduce the stalling. The Firmware itself still
      flushes all the dirty cache associated with the array ignoring the
      range, it just does so in a more timely manner.
      Signed-off-by: NMark Salyzyn <aacraid@adaptec.com>
      Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
      b90f90d2