Commit 4fd3c467 authored by Vinicius Costa Gomes's avatar Vinicius Costa Gomes Committed by Vinod Koul
Browse files

dmaengine: idxd: Wait for submitted operations on .device_synchronize()



When the dmaengine "core" asks the driver to synchronize, send a Drain
operation to the device workqueue, which will wait for the already
submitted operations to finish.

Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
Signed-off-by: default avatarVinicius Costa Gomes <vinicius.gomes@intel.com>
Link: https://patch.msgid.link/20260121-idxd-fix-flr-on-kernel-queues-v3-v3-6-7ed70658a9d1@intel.com


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 2a93f574
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -203,6 +203,13 @@ static int idxd_dma_terminate_all(struct dma_chan *c)
	return 0;
}

static void idxd_dma_synchronize(struct dma_chan *c)
{
	struct idxd_wq *wq = to_idxd_wq(c);

	idxd_wq_drain(wq);
}

int idxd_register_dma_device(struct idxd_device *idxd)
{
	struct idxd_dma_dev *idxd_dma;
@@ -234,6 +241,7 @@ int idxd_register_dma_device(struct idxd_device *idxd)
	dma->device_alloc_chan_resources = idxd_dma_alloc_chan_resources;
	dma->device_free_chan_resources = idxd_dma_free_chan_resources;
	dma->device_terminate_all = idxd_dma_terminate_all;
	dma->device_synchronize = idxd_dma_synchronize;

	rc = dma_async_device_register(dma);
	if (rc < 0) {