android: binder: Remove deprecated create_singlethread_workqueue
PATCH 1/1 android: binder: Remove deprecated create_singlethread_workqueue
The workqueue is being used to run deferred work for the android binder.
The "binder_deferred_workqueue" queues only a single work item and hence does not require ordering. Also, this workqueue is not being used on a memory recliam path. Hence, the singlethreaded workqueue has been replaced with the use of system_wq.
System workqueues have been able to handle high level of concurrency for a long time now and hence it's not required to have a singlethreaded workqueue just to gain concurrency. Unlike a dedicated per-cpu workqueue created with create_singlethread_workqueue(), system_wq allows multiple work items to overlap executions even on the same CPU; however, a per-cpu workqueue doesn't have any CPU locality or global ordering guarantee unless the target CPU is explicitly specified and thus the increase of local concurrency shouldn't make any difference.
--- drivers/android/binder.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
drivers/android/binder.c +1 -6
@@ -59,7 +59,6 @@ static struct dentry *binder_debugfs_dir_entry_proc;static struct binder_node *binder_context_mgr_node;static kuid_t binder_context_mgr_uid =INVALID_UID ;static int binder_last_id; -static struct workqueue_struct *binder_deferred_workqueue;#define BINDER_DEBUG_ENTRY (name) \ static int binder_##name##_open(struct inode *inode, struct file *file) \
@@ -3227,7 +3226,7 @@ binder_defer_work(struct binder_proc *proc, enum binder_deferred_state defer)if (hlist_unhashed (&proc->deferred_work_node)) {hlist_add_head (&proc->deferred_work_node, &binder_deferred_list); -queue_work (binder_deferred_workqueue, &binder_deferred_work); +schedule_work (&binder_deferred_work); }mutex_unlock (&binder_deferred_lock); }
@@ -3679,10 +3678,6 @@ static int __init binder_init(void) {int ret; - binder_deferred_workqueue =create_singlethread_workqueue ("binder" ); -if (!binder_deferred_workqueue) -return -ENOMEM ; - binder_debugfs_dir_entry_root =debugfs_create_dir ("binder" ,NULL );if (binder_debugfs_dir_entry_root) binder_debugfs_dir_entry_proc = debugfs_create_dir("proc",
--
2.1.4
Quoted 16 lines · Bhaktipriya Shridhar
The workqueue is being used to run deferred work for the android binder.
The "
binder_deferred_workqueue" queues only a single work item and hence does not require ordering. Also, this workqueue is not being used on a memory recliam path. Hence, the singlethreaded workqueue has been replaced with the use ofsystem_wq.System workqueues have been able to handle high level of concurrency for a long time now and hence it's not required to have a singlethreaded workqueue just to gain concurrency. Unlike a dedicated per-cpu workqueue created with
create_singlethread_workqueue(),system_wqallows multiple work items to overlap executions even on the same CPU; however, a per-cpu workqueue doesn't have any CPU locality or global ordering guarantee unless the target CPU is explicitly specified and thus the increase of local concurrency shouldn't make any difference.
Quoted 1 line
Signed-off-by Bhaktipriya Shridhar <[email protected]>
Thanks.
Signature · 1 line
tejun