Re: [PATCH RFC] workqueue: remove in_workqueue_context()

Previous thread: When booting a 16TB system, unix_create1 fails due to integer overflow. by Robin Holt on Thursday, September 23, 2010 - 5:17 am. (14 messages)

Next thread: Re: [PATCH 3/3] VFIO V4: VFIO driver: Non-privileged user level PCI drivers by Andy Walls on Thursday, September 23, 2010 - 5:58 am. (2 messages)
From: Tejun Heo
Date: Thursday, September 23, 2010 - 5:35 am

Commit a25909a4 (lockdep: Add an in_workqueue_context() lockdep-based
test function) added in_workqueue_context() but there hasn't been any
in-kernel user and the lockdep annotation in workqueue is scheduled to
change.  Remove the unused function.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
Paul, I was looking through lockdep annotations to see how they can be
improved and noticed that in_workqueue_context() isn't used by anyone
and it seems like there hasn't been any in-kernel user either.  Can
this be removed or do you expect to use it somewhere?

Thanks.

 include/linux/workqueue.h |    4 ----
 kernel/workqueue.c        |   15 ---------------
 2 files changed, 19 deletions(-)

diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
index e33ff4a..f6eaf56 100644
--- a/include/linux/workqueue.h
+++ b/include/linux/workqueue.h
@@ -429,8 +429,4 @@ extern bool freeze_workqueues_busy(void);
 extern void thaw_workqueues(void);
 #endif /* CONFIG_FREEZER */

-#ifdef CONFIG_LOCKDEP
-int in_workqueue_context(struct workqueue_struct *wq);
-#endif
-
 #endif
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 19e4bc1..c758e78 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -310,21 +310,6 @@ static inline int __next_wq_cpu(int cpu, const struct cpumask *mask,
 	     (cpu) < WORK_CPU_NONE;					\
 	     (cpu) = __next_wq_cpu((cpu), cpu_possible_mask, (wq)))

-#ifdef CONFIG_LOCKDEP
-/**
- * in_workqueue_context() - in context of specified workqueue?
- * @wq: the workqueue of interest
- *
- * Checks lockdep state to see if the current task is executing from
- * within a workqueue item.  This function exists only if lockdep is
- * enabled.
- */
-int in_workqueue_context(struct workqueue_struct *wq)
-{
-	return lock_is_held(&wq->lockdep_map);
-}
-#endif
-
 #ifdef CONFIG_DEBUG_OBJECTS_WORK

 static struct debug_obj_descr work_debug_descr;
--

From: Paul E. McKenney
Date: Thursday, September 23, 2010 - 10:10 am

I added it for the drivers/vhost changes.  They were using a
variant of RCU where executing in workqueue context acted as an RCU
read-side critical section and where flushing workqueues acted as
an RCU grace period.  The in_workqueue_context() was then passed to
rcu_dereference_check() to verify correct usage.

But you are right, I don't see it being used any more, though I do still
see the big block comment documenting this in drivers/vhost/vhost.h.

Michael, what are Tejun and I missing here?

--

From: Tejun Heo
Date: Friday, October 15, 2010 - 7:48 am

Ping.  Shall I go forward with this patch?

Thanks.

-- 
tejun
--

From: Tejun Heo
Date: Tuesday, October 19, 2010 - 2:27 am

Applied to wq#for-next.  Scream if this should be reverted.

Thanks.

-- 
tejun
--

Previous thread: When booting a 16TB system, unix_create1 fails due to integer overflow. by Robin Holt on Thursday, September 23, 2010 - 5:17 am. (14 messages)

Next thread: Re: [PATCH 3/3] VFIO V4: VFIO driver: Non-privileged user level PCI drivers by Andy Walls on Thursday, September 23, 2010 - 5:58 am. (2 messages)