Re: [PATCH] Revert "workqueue: remove unused cancel_work()"

From: Andrey Grodzovsky
Date: Sat May 21 2022 - 00:04:35 EST




On 2022-05-20 03:52, Tejun Heo wrote:
On Fri, May 20, 2022 at 08:22:39AM +0200, Christian König wrote:
Am 20.05.22 um 02:47 schrieb Lai Jiangshan:
On Thu, May 19, 2022 at 11:04 PM Andrey Grodzovsky
<andrey.grodzovsky@xxxxxxx> wrote:
See this patch-set https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.spinics.net%2Flists%2Famd-gfx%2Fmsg78514.html&amp;data=05%7C01%7Candrey.grodzovsky%40amd.com%7Cb25896b7e8b14e605a8d08da3a35a7c7%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637886299388464620%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=TRabWQQrhy6nwkLfuXI4A%2FOcF9f%2FtFKdxIRfGc8Das4%3D&amp;reserved=0, specifically patch
'drm/amdgpu: Switch to delayed work from work_struct.

I will just reiterate here -

We need to be able to do non blocking cancel pending reset works
from within GPU reset. Currently kernel API allows this only
for delayed_work and not for work_struct.

I'm OK with the change.

With an updated changelog:

Reviewed-by: Lai Jiangshan<jiangshanlai@xxxxxxxxx>

Good morning guys,

for the patch itself Reviewed-by: Christian König <christian.koenig@xxxxxxx>

And just for the record: We plan to push this upstream through the drm
branches, if anybody has any objections to that please speak up.

Andrey, care to resend with updated description?

Thanks


Just adding here as attachment since only description changed changed.

AndreyFrom 78df30cc97f10c885f5159a293e6afe2348aa60c Mon Sep 17 00:00:00 2001
From: Andrey Grodzovsky <andrey.grodzovsky@xxxxxxx>
Date: Thu, 19 May 2022 09:47:28 -0400
Subject: Revert "workqueue: remove unused cancel_work()"

This reverts commit 6417250d3f894e66a68ba1cd93676143f2376a6f.

amdpgu need this function in order to prematurly stop pending
reset works when another reset work already in progress.

Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@xxxxxxx>
---
include/linux/workqueue.h | 1 +
kernel/workqueue.c | 9 +++++++++
2 files changed, 10 insertions(+)

diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
index 7fee9b6cfede..9e41e1226193 100644
--- a/include/linux/workqueue.h
+++ b/include/linux/workqueue.h
@@ -453,6 +453,7 @@ extern int schedule_on_each_cpu(work_func_t func);
int execute_in_process_context(work_func_t fn, struct execute_work *);

extern bool flush_work(struct work_struct *work);
+extern bool cancel_work(struct work_struct *work);
extern bool cancel_work_sync(struct work_struct *work);

extern bool flush_delayed_work(struct delayed_work *dwork);
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 613917bbc4e7..f94b596ebffd 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -3267,6 +3267,15 @@ static bool __cancel_work(struct work_struct *work, bool is_dwork)
return ret;
}

+/*
+ * See cancel_delayed_work()
+ */
+bool cancel_work(struct work_struct *work)
+{
+ return __cancel_work(work, false);
+}
+EXPORT_SYMBOL(cancel_work);
+
/**
* cancel_delayed_work - cancel a delayed work
* @dwork: delayed_work to cancel
--
2.25.1