Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 981ed70d authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by Vinod Koul
Browse files

dmatest: make dmatest threads freezable



Making dmatest threads freezable allows its use for system PM testing.

Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: default avatarDan Williams <dan.j.williams@intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
parent 57001a60
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
#include <linux/delay.h>
#include <linux/dma-mapping.h>
#include <linux/dmaengine.h>
#include <linux/freezer.h>
#include <linux/init.h>
#include <linux/kthread.h>
#include <linux/module.h>
@@ -251,6 +252,7 @@ static int dmatest_func(void *data)
	int			i;

	thread_name = current->comm;
	set_freezable_with_signal();

	ret = -ENOMEM;

@@ -305,7 +307,8 @@ static int dmatest_func(void *data)
		dma_addr_t dma_srcs[src_cnt];
		dma_addr_t dma_dsts[dst_cnt];
		struct completion cmp;
		unsigned long tmo = msecs_to_jiffies(timeout);
		unsigned long start, tmo, end = 0 /* compiler... */;
		bool reload = true;
		u8 align = 0;

		total_tests++;
@@ -404,7 +407,17 @@ static int dmatest_func(void *data)
		}
		dma_async_issue_pending(chan);

		tmo = wait_for_completion_timeout(&cmp, tmo);
		do {
			start = jiffies;
			if (reload)
				end = start + msecs_to_jiffies(timeout);
			else if (end <= start)
				end = start + 1;
			tmo = wait_for_completion_interruptible_timeout(&cmp,
								end - start);
			reload = try_to_freeze();
		} while (tmo == -ERESTARTSYS);

		status = dma_async_is_tx_complete(chan, cookie, NULL, NULL);

		if (tmo == 0) {