aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/android
diff options
context:
space:
mode:
authorBhaktipriya Shridhar <bhaktipriya96@gmail.com>2016-08-13 12:46:24 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-08-15 11:00:45 -0400
commit1beba52d46f039a24f31cf5717c239c89a9d4e6f (patch)
tree6bf2b8e0615699328bbc621d9128d85e2fc7732e /drivers/android
parent6a9aabb107c65ecb6f08b010853f5571d781ba5a (diff)
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. Signed-off-by: Bhaktipriya Shridhar <bhaktipriya96@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/android')
-rw-r--r--drivers/android/binder.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 16288e777ec3..562af94bec35 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -59,7 +59,6 @@ static struct dentry *binder_debugfs_dir_entry_proc;
59static struct binder_node *binder_context_mgr_node; 59static struct binder_node *binder_context_mgr_node;
60static kuid_t binder_context_mgr_uid = INVALID_UID; 60static kuid_t binder_context_mgr_uid = INVALID_UID;
61static int binder_last_id; 61static int binder_last_id;
62static struct workqueue_struct *binder_deferred_workqueue;
63 62
64#define BINDER_DEBUG_ENTRY(name) \ 63#define BINDER_DEBUG_ENTRY(name) \
65static int binder_##name##_open(struct inode *inode, struct file *file) \ 64static 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)
3227 if (hlist_unhashed(&proc->deferred_work_node)) { 3226 if (hlist_unhashed(&proc->deferred_work_node)) {
3228 hlist_add_head(&proc->deferred_work_node, 3227 hlist_add_head(&proc->deferred_work_node,
3229 &binder_deferred_list); 3228 &binder_deferred_list);
3230 queue_work(binder_deferred_workqueue, &binder_deferred_work); 3229 schedule_work(&binder_deferred_work);
3231 } 3230 }
3232 mutex_unlock(&binder_deferred_lock); 3231 mutex_unlock(&binder_deferred_lock);
3233} 3232}
@@ -3679,10 +3678,6 @@ static int __init binder_init(void)
3679{ 3678{
3680 int ret; 3679 int ret;
3681 3680
3682 binder_deferred_workqueue = create_singlethread_workqueue("binder");
3683 if (!binder_deferred_workqueue)
3684 return -ENOMEM;
3685
3686 binder_debugfs_dir_entry_root = debugfs_create_dir("binder", NULL); 3681 binder_debugfs_dir_entry_root = debugfs_create_dir("binder", NULL);
3687 if (binder_debugfs_dir_entry_root) 3682 if (binder_debugfs_dir_entry_root)
3688 binder_debugfs_dir_entry_proc = debugfs_create_dir("proc", 3683 binder_debugfs_dir_entry_proc = debugfs_create_dir("proc",