blk-mq: Use llist_head for blk_cpu_done for-5.12/block-ipi for-5.12/block-ipi-2021-02-21
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Sat, 23 Jan 2021 20:10:27 +0000 (21:10 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 12 Feb 2021 15:28:02 +0000 (08:28 -0700)
commitf9ab49184af093f0bf6c0e6583f5b25da2c09ff5
treebdbbb203e2420e9203768702df4d68e7f0ca894b
parent0a2efafbb1c752a7041652445bc1232114409633
blk-mq: Use llist_head for blk_cpu_done

With llist_head it is possible to avoid the locking (the irq-off region)
when items are added. This makes it possible to add items on a remote
CPU without additional locking.
llist_add() returns true if the list was previously empty. This can be
used to invoke the SMP function call / raise sofirq only if the first
item was added (otherwise it is already pending).
This simplifies the code a little and reduces the IRQ-off regions.

blk_mq_raise_softirq() needs a preempt-disable section to ensure the
request is enqueued on the same CPU as the softirq is raised.
Some callers (USB-storage) invoke this path in preemptible context.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Daniel Wagner <dwagner@suse.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c
include/linux/blkdev.h