1. 19 8月, 2016 1 次提交
    • Y
      qede: Fix Tx timeout due to xmit_more · 039a3927
      Yuval Mintz 提交于
      Driver uses netif_tx_queue_stopped() to make sure the xmit_more
      indication will be honored, but that only checks for DRV_XOFF.
      
      At the same time, it's possible that during transmission the DQL will
      close the transmission queue with STACK_XOFF indication.
      In re-configuration flows, when the threshold is relatively low, it's
      possible that the device has no pending tranmissions, and during
      tranmission the driver would miss doorbelling the HW.
      Since there are no pending transmission, there will never be a Tx
      completion [and thus the DQL would not remove the STACK_XOFF indication],
      eventually causing the Tx queue to timeout.
      
      While we're at it - also doorbell in case driver has to close the
      transmission queue on its own [although this one is less important -
      if the ring is full, we're bound to receive completion eventually,
      which means the doorbell would only be postponed and not indefinetly
      blocked].
      
      Fixes: 312e0676 ("qede: Utilize xmit_more")
      Signed-off-by: NYuval Mintz <Yuval.Mintz@qlogic.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      039a3927
  2. 18 8月, 2016 11 次提交
  3. 17 8月, 2016 6 次提交
  4. 16 8月, 2016 9 次提交
  5. 15 8月, 2016 2 次提交
  6. 14 8月, 2016 4 次提交
  7. 13 8月, 2016 4 次提交
  8. 12 8月, 2016 2 次提交
  9. 11 8月, 2016 1 次提交
    • G
      nvme: Suspend all queues before deletion · c21377f8
      Gabriel Krisman Bertazi 提交于
      When nvme_delete_queue fails in the first pass of the
      nvme_disable_io_queues() loop, we return early, failing to suspend all
      of the IO queues.  Later, on the nvme_pci_disable path, this causes us
      to disable MSI without actually having freed all the IRQs, which
      triggers the BUG_ON in free_msi_irqs(), as show below.
      
      This patch refactors nvme_disable_io_queues to suspend all queues before
      start submitting delete queue commands.  This way, we ensure that we
      have at least returned every IRQ before continuing with the removal
      path.
      
      [  487.529200] kernel BUG at ../drivers/pci/msi.c:368!
      cpu 0x46: Vector: 700 (Program Check) at [c0000078c5b83650]
          pc: c000000000627a50: free_msi_irqs+0x90/0x200
          lr: c000000000627a40: free_msi_irqs+0x80/0x200
          sp: c0000078c5b838d0
         msr: 9000000100029033
        current = 0xc0000078c5b40000
        paca    = 0xc000000002bd7600   softe: 0        irq_happened: 0x01
          pid   = 1376, comm = kworker/70:1H
      kernel BUG at ../drivers/pci/msi.c:368!
      Linux version 4.7.0.mainline+ (root@iod76) (gcc version 5.3.1 20160413
      (Ubuntu/IBM 5.3.1-14ubuntu2.1) ) #104 SMP Fri Jul 29 09:20:17 CDT 2016
      enter ? for help
      [c0000078c5b83920] d0000000363b0cd8 nvme_dev_disable+0x208/0x4f0 [nvme]
      [c0000078c5b83a10] d0000000363b12a4 nvme_timeout+0xe4/0x250 [nvme]
      [c0000078c5b83ad0] c0000000005690e4 blk_mq_rq_timed_out+0x64/0x110
      [c0000078c5b83b40] c00000000056c930 bt_for_each+0x160/0x170
      [c0000078c5b83bb0] c00000000056d928 blk_mq_queue_tag_busy_iter+0x78/0x110
      [c0000078c5b83c00] c0000000005675d8 blk_mq_timeout_work+0xd8/0x1b0
      [c0000078c5b83c50] c0000000000e8cf0 process_one_work+0x1e0/0x590
      [c0000078c5b83ce0] c0000000000e9148 worker_thread+0xa8/0x660
      [c0000078c5b83d80] c0000000000f2090 kthread+0x110/0x130
      [c0000078c5b83e30] c0000000000095f0 ret_from_kernel_thread+0x5c/0x6c
      Signed-off-by: NGabriel Krisman Bertazi <krisman@linux.vnet.ibm.com>
      Cc: Brian King <brking@linux.vnet.ibm.com>
      Cc: Keith Busch <keith.busch@intel.com>
      Cc: linux-nvme@lists.infradead.org
      Signed-off-by: NJens Axboe <axboe@fb.com>
      c21377f8