1. 13 6月, 2017 1 次提交
  2. 25 5月, 2017 1 次提交
    • S
      scsi: qla2xxx: Fix crash due to mismatch mumber of Q-pair creation for Multi queue · b95b9452
      Sawan Chandak 提交于
      when driver is loaded with Multi Queue enabled, it was noticed that
      there was one less queue pair created.
      
      Following message would indicate this:
      
      "No resources to create additional q pair."
      
      The result of one less queue pair means that system can crash, if the
      block mq layer thinks there is an extra hardware queue available, and
      the driver will use a NULL ptr qpair in that instance.
      
      Following stack trace is seen in one of the crash:
      
      irq_create_affinity_masks+0x98/0x530
      irq_create_affinity_masks+0x98/0x530
      __pci_enable_msix+0x321/0x4e0
      mutex_lock+0x12/0x40
      pci_alloc_irq_vectors_affinity+0xb5/0x140
      qla24xx_enable_msix+0x79/0x530 [qla2xxx]
      qla2x00_request_irqs+0x61/0x2d0 [qla2xxx]
      qla2x00_probe_one+0xc73/0x2390 [qla2xxx]
      ida_simple_get+0x98/0x100
      kernfs_next_descendant_post+0x40/0x50
      local_pci_probe+0x45/0xa0
      pci_device_probe+0xfc/0x140
      driver_probe_device+0x2c5/0x470
      __driver_attach+0xdd/0xe0
      driver_probe_device+0x470/0x470
      bus_for_each_dev+0x6c/0xc0
      driver_attach+0x1e/0x20
      bus_add_driver+0x45/0x270
      driver_register+0x60/0xe0
      __pci_register_driver+0x4c/0x50
      qla2x00_module_init+0x1ce/0x21e [qla2xxx]
      
      Cc: <stable@vger.kernel.org> # v4.10+
      Signed-off-by: NSawan Chandak <sawan.chandak@cavium.com>
      Signed-off-by: NHimanshu Madhani <himanshu.madhani@cavium.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      b95b9452
  3. 05 4月, 2017 1 次提交
  4. 19 3月, 2017 5 次提交
  5. 28 2月, 2017 1 次提交
  6. 19 2月, 2017 1 次提交
  7. 09 2月, 2017 5 次提交
  8. 18 1月, 2017 1 次提交
  9. 15 12月, 2016 2 次提交
  10. 16 7月, 2016 3 次提交
  11. 24 2月, 2016 5 次提交
  12. 07 2月, 2016 1 次提交
    • Q
      qla2xxx: Fix stale pointer access. · cb43285f
      Quinn Tran 提交于
      [ Upstream Commit 84e32a06 ]
      
      Commit 84e32a06 ("qla2xxx: Use pci_enable_msix_range() instead of
      pci_enable_msix()") introduced a regression when target mode is enabled.
      In qla24xx_enable_msix(), ha->max_rsp_queues was incorrectly set
      to a value higher than the number of response queues allocated causing
      an invalid dereference. Specifically here in qla2x00_init_rings():
          *rsp->in_ptr = 0;
      
      Add additional check to make sure the pointer is valid. following
      call stack will be seen
      
      ---- 8< ----
      RIP: 0010:[<ffffffffa02ccadc>]  [<ffffffffa02ccadc>] qla2x00_init_rings+0xdc/0x320 [qla2xxx]
      RSP: 0018:ffff880429447dd8  EFLAGS: 00010082
      ....
      Call Trace:
      [<ffffffffa02ceb40>] qla2x00_abort_isp+0x170/0x6b0 [qla2xxx]
      [<ffffffffa02c6f77>] qla2x00_do_dpc+0x357/0x7f0 [qla2xxx]
      [<ffffffffa02c6c20>] ? qla2x00_relogin+0x260/0x260 [qla2xxx]
      [<ffffffff8107d2c9>] kthread+0xc9/0xe0
      [<ffffffff8107d200>] ? flush_kthread_worker+0x90/0x90
      [<ffffffff8172cc6f>] ret_from_fork+0x3f/0x70
      [<ffffffff8107d200>] ? flush_kthread_worker+0x90/0x90
      ---- 8< ----
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NQuinn Tran <quinn.tran@qlogic.com>
      Signed-off-by: NHimanshu Madhani <himanshu.madhani@qlogic.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      cb43285f
  13. 08 1月, 2016 5 次提交
  14. 27 8月, 2015 5 次提交
  15. 25 7月, 2015 3 次提交
    • A
      qla2xxx: disable scsi_transport_fc registration in target mode · d20ed91b
      Alexei Potashnik 提交于
      There are multiple reasons for disabling this:
      
      1. It provides no functional benefit. We pretty much only get a few more
      sysfs entries for each port, but all that information is already
      available from /sys/kernel/debug/target/qla-session-X
      
      2. It already only works in private-loop mode. By disabling we'll be
      getting more uniform behavior with fabric mode.
      
      3. It creates complications for the new PLOGI handling mechanism:
      scsi_transport_fc port deletion timer could race with new session
      from initiator and cause logout after successful login.
      
      Cc: <stable@vger.kernel.org> # v3.18+
      Signed-off-by: NAlexei Potashnik <alexei@purestorage.com>
      Signed-off-by: NHimanshu Madhani <himanshu.madhani@qlogic.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      d20ed91b
    • A
      qla2xxx: added sess generations to detect RSCN update races · df673274
      Alexei Potashnik 提交于
      RSCN processing in qla2xxx driver can run in parallel with ELS/IO
      processing. As such the decision to remove disappeared fc port's
      session could be stale, because a new login sequence has occurred
      since and created a brand new session.
      
      Previous mechanism of dealing with this by delaying deletion request
      was prone to erroneous deletions if the event that was supposed to
      cancel the deletion never arrived or has been delayed in processing.
      
      New mechanism relies on a time-like generation counter to serialize
      RSCN updates relative to ELS/IO updates.
      
      Cc: <stable@vger.kernel.org> # v3.18+
      Signed-off-by: NAlexei Potashnik <alexei@purestorage.com>
      Signed-off-by: NHimanshu Madhani <himanshu.madhani@qlogic.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      df673274
    • A
      qla2xxx: delay plogi/prli ack until existing sessions are deleted · a6ca8878
      Alexei Potashnik 提交于
      - keep qla_tgt_sess object on the session list until it's freed
      
      - modify use of sess->deleted flag to differentiate delayed
        session deletion that can be cancelled from irreversible one:
        QLA_SESS_DELETION_PENDING vs QLA_SESS_DELETION_IN_PROGRESS
      
      - during IN_PROGRESS deletion all newly arrived commands and TMRs will
        be rejected, existing commands and TMRs will be terminated when
        given by the core to the fabric or simply dropped if session logout
        has already happened (logout terminates all existing exchanges)
      
      - new PLOGI will initiate deletion of the following sessions
        (unless deletion is already IN_PROGRESS):
        - with the same port_name (with logout)
        - different port_name, different loop_id but the same port_id
          (with logout)
        - different port_name, different port_id, but the same loop_id
          (without logout)
      
      - additionally each new PLOGI will store imm notify iocb in the
        same port_name session being deleted. When deletion process
        completes this iocb will be acked. Only the most recent PLOGI
        iocb is stored. The older ones will be terminated when replaced.
      
      - new PRLI will initiate deletion of the following sessions
        (unless deletion is already IN_PROGRESS):
        - different port_name, different port_id, but the same loop_id
         (without logout)
      
      Cc: <stable@vger.kernel.org> # v3.18+
      Signed-off-by: NAlexei Potashnik <alexei@purestorage.com>
      Acked-by: NQuinn Tran <quinn.tran@qlogic.com>
      Signed-off-by: NHimanshu Madhani <himanshu.madhani@qlogic.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      a6ca8878