An error occurred fetching the project authors.
  1. 19 Dec, 2018 1 commit
  2. 18 Dec, 2018 2 commits
  3. 17 Dec, 2018 1 commit
  4. 11 Dec, 2018 1 commit
  5. 04 Dec, 2018 9 commits
  6. 29 Nov, 2018 1 commit
    • Jens Axboe's avatar
      nvme: implement mq_ops->commit_rqs() hook · 04f3eafd
      Jens Axboe authored
      Split the command submission and the SQ doorbell ring, and add the
      doorbell ring as our ->commit_rqs() hook. This allows a list of
      requests to be issued, with nvme only writing the SQ update when
      it's necessary. This is more efficient if we have lists of requests
      to issue, particularly on virtualized hardware, where writing the
      SQ doorbell is more expensive than on real hardware. For those cases,
      performance increases of 2-3x have been observed.
      
      The use case for this is plugged IO, where blk-mq flushes a batch of
      requests at the time.
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      04f3eafd
  7. 26 Nov, 2018 2 commits
  8. 19 Nov, 2018 1 commit
    • Jens Axboe's avatar
      nvme: default to 0 poll queues · a4668d9b
      Jens Axboe authored
      We need a better way of configuring this, and given that polling is
      (still) a bit niche, let's default to using 0 poll queues. That way
      we'll have the same read/write/poll behavior as 4.20, and users that
      want to test/use polling are required to do manual configuration of the
      number of poll queues.
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      a4668d9b
  9. 16 Nov, 2018 1 commit
  10. 15 Nov, 2018 1 commit
  11. 14 Nov, 2018 1 commit
    • Jens Axboe's avatar
      nvme: fix boot hang with only being able to get one IRQ vector · 30e06628
      Jens Axboe authored
      NVMe always asks for io_queues + 1 worth of IRQ vectors, which
      means that even when we scale all the way down, we still ask
      for 2 vectors and get -ENOSPC in return if the system can't
      support more than 1.
      
      Getting just 1 vector is fine, it just means that we'll have
      1 IO queue and 1 admin queue, with a shared vector between them.
      Check for this case and don't add our + 1 if it happens.
      
      Fixes: 3b6592f7 ("nvme: utilize two queue maps, one for reads and one for writes")
      Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      30e06628
  12. 07 Nov, 2018 3 commits
  13. 02 Nov, 2018 1 commit
    • Keith Busch's avatar
      nvme-pci: fix conflicting p2p resource adds · 9fe5c59f
      Keith Busch authored
      The nvme pci driver had been adding its CMB resource to the P2P DMA
      subsystem everytime on on a controller reset. This results in the
      following warning:
      
          ------------[ cut here ]------------
          nvme 0000:00:03.0: Conflicting mapping in same section
          WARNING: CPU: 7 PID: 81 at kernel/memremap.c:155 devm_memremap_pages+0xa6/0x380
          ...
          Call Trace:
           pci_p2pdma_add_resource+0x153/0x370
           nvme_reset_work+0x28c/0x17b1 [nvme]
           ? add_timer+0x107/0x1e0
           ? dequeue_entity+0x81/0x660
           ? dequeue_entity+0x3b0/0x660
           ? pick_next_task_fair+0xaf/0x610
           ? __switch_to+0xbc/0x410
           process_one_work+0x1cf/0x350
           worker_thread+0x215/0x3d0
           ? process_one_work+0x350/0x350
           kthread+0x107/0x120
           ? kthread_park+0x80/0x80
           ret_from_fork+0x1f/0x30
          ---[ end trace f7ea76ac6ee72727 ]---
          nvme nvme0: failed to register the CMB
      
      This patch fixes this by registering the CMB with P2P only once.
      Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
      Reviewed-by: default avatarLogan Gunthorpe <logang@deltatee.com>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      9fe5c59f
  14. 18 Oct, 2018 1 commit
  15. 17 Oct, 2018 4 commits
  16. 02 Oct, 2018 1 commit
  17. 28 Aug, 2018 1 commit
    • Michal Wnukowski's avatar
      nvme-pci: add a memory barrier to nvme_dbbuf_update_and_check_event · f1ed3df2
      Michal Wnukowski authored
      In many architectures loads may be reordered with older stores to
      different locations.  In the nvme driver the following two operations
      could be reordered:
      
       - Write shadow doorbell (dbbuf_db) into memory.
       - Read EventIdx (dbbuf_ei) from memory.
      
      This can result in a potential race condition between driver and VM host
      processing requests (if given virtual NVMe controller has a support for
      shadow doorbell).  If that occurs, then the NVMe controller may decide to
      wait for MMIO doorbell from guest operating system, and guest driver may
      decide not to issue MMIO doorbell on any of subsequent commands.
      
      This issue is purely timing-dependent one, so there is no easy way to
      reproduce it. Currently the easiest known approach is to run "Oracle IO
      Numbers" (orion) that is shipped with Oracle DB:
      
      orion -run advanced -num_large 0 -size_small 8 -type rand -simulate \
      	concat -write 40 -duration 120 -matrix row -testname nvme_test
      
      Where nvme_test is a .lun file that contains a list of NVMe block
      devices to run test against. Limiting number of vCPUs assigned to given
      VM instance seems to increase chances for this bug to occur. On test
      environment with VM that got 4 NVMe drives and 1 vCPU assigned the
      virtual NVMe controller hang could be observed within 10-20 minutes.
      That correspond to about 400-500k IO operations processed (or about
      100GB of IO read/writes).
      
      Orion tool was used as a validation and set to run in a loop for 36
      hours (equivalent of pushing 550M IO operations). No issues were
      observed. That suggest that the patch fixes the issue.
      
      Fixes: f9f38e33 ("nvme: improve performance for virtual NVMe devices")
      Signed-off-by: default avatarMichal Wnukowski <wnukowski@google.com>
      Reviewed-by: default avatarKeith Busch <keith.busch@intel.com>
      Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
      [hch: updated changelog and comment a bit]
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      f1ed3df2
  18. 30 Jul, 2018 1 commit
  19. 23 Jul, 2018 1 commit
  20. 12 Jul, 2018 1 commit
    • Keith Busch's avatar
      nvme-pci: fix memory leak on probe failure · b6e44b4c
      Keith Busch authored
      The nvme driver specific structures need to be initialized prior to
      enabling the generic controller so we can unwind on failure with out
      using the reference counting callbacks so that 'probe' and 'remove'
      can be symmetric.
      
      The newly added iod_mempool is the only resource that was being
      allocated out of order, and a failure there would leak the generic
      controller memory. This patch just moves that allocation above the
      controller initialization.
      
      Fixes: 943e942e ("nvme-pci: limit max IO size and segments to avoid high order allocations")
      Reported-by: default avatarWeiping Zhang <zwp10758@gmail.com>
      Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      b6e44b4c
  21. 21 Jun, 2018 2 commits
  22. 08 Jun, 2018 3 commits