dmaengine: idxd: fix missed completion on abort path
authorDave Jiang <dave.jiang@intel.com>
Wed, 8 Dec 2021 17:01:27 +0000 (10:01 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Dec 2021 08:32:41 +0000 (09:32 +0100)
commitee3701c4d9758e0d344ba859cf7459400a6d5625
tree50bdced30de5c991d850f743aaa00b2083b94ca5
parent088e4d7dba27e89584962aa2394988f115ef45e5
dmaengine: idxd: fix missed completion on abort path

[ Upstream commit 8affd8a4b5ce356c8900cfb037674f3a4a11fbdb ]

Ming reported that with the abort path of the descriptor submission, there
can be a window where a completed descriptor can be missed to be completed
by the irq completion thread:

CPU A CPU B
Submit (successful)

Submit (fail)
irq_process_work_list() // empty

llist_abort_desc()
// remove all descs from pending list

irq_process_pending_llist() // empty
exit idxd_wq_thread() with no processing

Add opportunistic descriptor completion in the abort path in order to
remove the missed completion.

Fixes: 6b4b87f2c31a ("dmaengine: idxd: fix submission race window")
Reported-by: Ming Li <ming4.li@intel.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/163898288714.443911.16084982766671976640.stgit@djiang5-desk3.ch.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/dma/idxd/submit.c