• J
    nvme-pci: handle completions outside of the queue lock · 5cb525c8
    Jens Axboe 提交于
    Split the completion of events into a two part process:
    
    1) Reap the events inside the queue lock
    2) Complete the events outside the queue lock
    
    Since we never wrap the queue, we can access it locklessly after we've
    updated the completion queue head. This patch started off with batching
    events on the stack, but with this trick we don't have to. Keith Busch
    <keith.busch@intel.com> came up with that idea.
    
    Note that this kills the ->cqe_seen as well. I haven't been able to
    trigger any ill effects of this. If we do race with polling every so
    often, it should be rare enough NOT to trigger any issues.
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    Signed-off-by: NKeith Busch <keith.busch@intel.com>
    [hch: refactored, restored poll early exit optimization]
    Signed-off-by: NChristoph Hellwig <hch@lst.de>
    5cb525c8
pci.c 70.4 KB