1. 13 4月, 2016 6 次提交
    • K
      NVMe: Skip async events for degraded controllers · 21f033f7
      Keith Busch 提交于
      If the controller is degraded, the driver should stay out of the way so
      the user can recover the drive. This patch skips driver initiated async
      event requests when the drive is in this state.
      Signed-off-by: NKeith Busch <keith.busch@intel.com>
      Reviewed-by: NSagi Grimberg <sagi@grimberg.me>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      21f033f7
    • M
      nvme: add helper nvme_setup_cmd() · 8093f7ca
      Ming Lin 提交于
      This moves nvme_setup_{flush,discard,rw} calls into a common
      nvme_setup_cmd() helper. So we can eventually hide all the command
      setup in the core module and don't even need to update the fabrics
      drivers for any specific command type.
      Signed-off-by: NMing Lin <ming.l@ssi.samsung.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      8093f7ca
    • M
      nvme: rewrite discard support · 03b5929e
      Ming Lin 提交于
      This rewrites nvme_setup_discard() with blk_add_request_payload().
      It allocates only the necessary amount(16 bytes) for the payload.
      Signed-off-by: NMing Lin <ming.l@ssi.samsung.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      03b5929e
    • M
      nvme: add helper nvme_map_len() · 58b45602
      Ming Lin 提交于
      The helper returns the number of bytes that need to be mapped
      using PRPs/SGL entries.
      Signed-off-by: NMing Lin <ming.l@ssi.samsung.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      58b45602
    • M
      nvme: add missing lock nesting notation · 2e39e0f6
      Ming Lin 提交于
      When unloading driver, nvme_disable_io_queues() calls nvme_delete_queue()
      that sends nvme_admin_delete_cq command to admin sq. So when the command
      completed, the lock acquired by nvme_irq() actually belongs to admin queue.
      
      While the lock that nvme_del_cq_end() trying to acquire belongs to io queue.
      So it will not deadlock.
      
      This patch adds lock nesting notation to fix following report.
      
      [  109.840952] =============================================
      [  109.846379] [ INFO: possible recursive locking detected ]
      [  109.851806] 4.5.0+ #180 Tainted: G            E
      [  109.856533] ---------------------------------------------
      [  109.861958] swapper/0/0 is trying to acquire lock:
      [  109.866771]  (&(&nvmeq->q_lock)->rlock){-.....}, at: [<ffffffffc0820bc6>] nvme_del_cq_end+0x26/0x70 [nvme]
      [  109.876535]
      [  109.876535] but task is already holding lock:
      [  109.882398]  (&(&nvmeq->q_lock)->rlock){-.....}, at: [<ffffffffc0820c2b>] nvme_irq+0x1b/0x50 [nvme]
      [  109.891547]
      [  109.891547] other info that might help us debug this:
      [  109.898107]  Possible unsafe locking scenario:
      [  109.898107]
      [  109.904056]        CPU0
      [  109.906515]        ----
      [  109.908974]   lock(&(&nvmeq->q_lock)->rlock);
      [  109.913381]   lock(&(&nvmeq->q_lock)->rlock);
      [  109.917787]
      [  109.917787]  *** DEADLOCK ***
      [  109.917787]
      [  109.923738]  May be due to missing lock nesting notation
      [  109.923738]
      [  109.930558] 1 lock held by swapper/0/0:
      [  109.934413]  #0:  (&(&nvmeq->q_lock)->rlock){-.....}, at: [<ffffffffc0820c2b>] nvme_irq+0x1b/0x50 [nvme]
      [  109.944010]
      [  109.944010] stack backtrace:
      [  109.948389] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G            E   4.5.0+ #180
      [  109.955734] Hardware name: Dell Inc. OptiPlex 7010/0YXT71, BIOS A15 08/12/2013
      [  109.962989]  0000000000000000 ffff88011e203c38 ffffffff81383d9c ffffffff81c13540
      [  109.970478]  ffffffff826711d0 ffff88011e203ce8 ffffffff810bb429 0000000000000046
      [  109.977964]  0000000000000046 0000000000000000 0000000000b2e597 ffffffff81f4cb00
      [  109.985453] Call Trace:
      [  109.987911]  <IRQ>  [<ffffffff81383d9c>] dump_stack+0x85/0xc9
      [  109.993711]  [<ffffffff810bb429>] __lock_acquire+0x19b9/0x1c60
      [  109.999575]  [<ffffffff810b6d1d>] ? trace_hardirqs_off+0xd/0x10
      [  110.005524]  [<ffffffff810b386d>] ? complete+0x3d/0x50
      [  110.010688]  [<ffffffff810bb760>] lock_acquire+0x90/0xf0
      [  110.016029]  [<ffffffffc0820bc6>] ? nvme_del_cq_end+0x26/0x70 [nvme]
      [  110.022418]  [<ffffffff81772afb>] _raw_spin_lock_irqsave+0x4b/0x60
      [  110.028632]  [<ffffffffc0820bc6>] ? nvme_del_cq_end+0x26/0x70 [nvme]
      [  110.035019]  [<ffffffffc0820bc6>] nvme_del_cq_end+0x26/0x70 [nvme]
      [  110.041232]  [<ffffffff8135b485>] blk_mq_end_request+0x35/0x60
      [  110.047095]  [<ffffffffc0821ad8>] nvme_complete_rq+0x68/0x190 [nvme]
      [  110.053481]  [<ffffffff8135b53f>] __blk_mq_complete_request+0x8f/0x130
      [  110.060043]  [<ffffffff8135b611>] blk_mq_complete_request+0x31/0x40
      [  110.066343]  [<ffffffffc08209e3>] __nvme_process_cq+0x83/0x240 [nvme]
      [  110.072818]  [<ffffffffc0820c35>] nvme_irq+0x25/0x50 [nvme]
      [  110.078419]  [<ffffffff810cdb66>] handle_irq_event_percpu+0x36/0x110
      [  110.084804]  [<ffffffff810cdc77>] handle_irq_event+0x37/0x60
      [  110.090491]  [<ffffffff810d0ea3>] handle_edge_irq+0x93/0x150
      [  110.096180]  [<ffffffff81012306>] handle_irq+0xa6/0x130
      [  110.101431]  [<ffffffff81011abe>] do_IRQ+0x5e/0x120
      [  110.106333]  [<ffffffff8177384c>] common_interrupt+0x8c/0x8c
      Reviewed-by: NJohannes Thumshirn <jthumshirn@suse.de>
      Signed-off-by: NMing Lin <ming.l@ssi.samsung.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Reviewed-by: NSagi Grimberg <sagi@grimberg.me>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      2e39e0f6
    • K
      NVMe: Always use MSI/MSI-x interrupts · 788e15ab
      Keith Busch 提交于
      Multiple users have reported device initialization failure due the driver
      not receiving legacy PCI interrupts. This is not unique to any particular
      controller, but has been observed on multiple platforms.
      
      There have been no issues reported or observed when with message signaled
      interrupts, so this patch attempts to use MSI-x during initialization,
      falling back to MSI. If that fails, legacy would become the default.
      
      The setup_io_queues error handling had to change as a result: the admin
      queue's msix_entry used to be initialized to the legacy IRQ. The case
      where nr_io_queues is 0 would fail request_irq when setting up the admin
      queue's interrupt since re-enabling MSI-x fails with 0 vectors, leaving
      the admin queue's msix_entry invalid. Instead, return success immediately.
      Reported-by: NTim Muhlemmer <muhlemmer@gmail.com>
      Reported-by: NJon Derrick <jonathan.derrick@intel.com>
      Signed-off-by: NKeith Busch <keith.busch@intel.com>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      788e15ab
  2. 23 3月, 2016 1 次提交
  3. 09 3月, 2016 1 次提交
  4. 08 3月, 2016 1 次提交
  5. 04 3月, 2016 4 次提交
  6. 29 2月, 2016 4 次提交
  7. 12 2月, 2016 3 次提交
  8. 11 2月, 2016 4 次提交
  9. 10 2月, 2016 2 次提交
  10. 13 1月, 2016 6 次提交
  11. 23 12月, 2015 8 次提交