lkml.org 
[lkml]   [2013]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 1/4] drivers: android: binder: Move the node release code to a separate function
    Date
    The binder_deferred_release() function has many levels of indentation
    which makes it difficult to read. This patch moves the code which deals
    with disposing of a binder node to a separate binder_node_release()
    function, thus removing one level of indentation and allowing the code to
    fit in 80 columns.

    Signed-off-by: Mirsal Ennaime <mirsal@mirsal.fr>
    ---
    drivers/staging/android/binder.c | 76 +++++++++++++++++++++++---------------
    1 file changed, 46 insertions(+), 30 deletions(-)

    diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c
    index 24456a0..9180a5b 100644
    --- a/drivers/staging/android/binder.c
    +++ b/drivers/staging/android/binder.c
    @@ -2878,6 +2878,51 @@ static int binder_release(struct inode *nodp, struct file *filp)
    return 0;
    }

    +static int binder_node_release(struct binder_node *node, int refs)
    +{
    + struct binder_ref *ref;
    + int death = 0;
    +
    + list_del_init(&node->work.entry);
    + binder_release_work(&node->async_todo);
    +
    + if (hlist_empty(&node->refs)) {
    + kfree(node);
    + binder_stats_deleted(BINDER_STAT_NODE);
    +
    + return refs;
    + }
    +
    + node->proc = NULL;
    + node->local_strong_refs = 0;
    + node->local_weak_refs = 0;
    + hlist_add_head(&node->dead_node, &binder_dead_nodes);
    +
    + hlist_for_each_entry(ref, &node->refs, node_entry) {
    + refs++;
    +
    + if (!ref->death)
    + goto out;
    +
    + death++;
    +
    + if (list_empty(&ref->death->work.entry)) {
    + ref->death->work.type = BINDER_WORK_DEAD_BINDER;
    + list_add_tail(&ref->death->work.entry,
    + &ref->proc->todo);
    + wake_up_interruptible(&ref->proc->wait);
    + } else
    + BUG();
    + }
    +
    +out:
    + binder_debug(BINDER_DEBUG_DEAD_BINDER,
    + "node %d now dead, refs %d, death %d\n",
    + node->debug_id, refs, death);
    +
    + return refs;
    +}
    +
    static void binder_deferred_release(struct binder_proc *proc)
    {
    struct binder_transaction *t;
    @@ -2909,36 +2954,7 @@ static void binder_deferred_release(struct binder_proc *proc)

    nodes++;
    rb_erase(&node->rb_node, &proc->nodes);
    - list_del_init(&node->work.entry);
    - binder_release_work(&node->async_todo);
    - if (hlist_empty(&node->refs)) {
    - kfree(node);
    - binder_stats_deleted(BINDER_STAT_NODE);
    - } else {
    - struct binder_ref *ref;
    - int death = 0;
    -
    - node->proc = NULL;
    - node->local_strong_refs = 0;
    - node->local_weak_refs = 0;
    - hlist_add_head(&node->dead_node, &binder_dead_nodes);
    -
    - hlist_for_each_entry(ref, &node->refs, node_entry) {
    - incoming_refs++;
    - if (ref->death) {
    - death++;
    - if (list_empty(&ref->death->work.entry)) {
    - ref->death->work.type = BINDER_WORK_DEAD_BINDER;
    - list_add_tail(&ref->death->work.entry, &ref->proc->todo);
    - wake_up_interruptible(&ref->proc->wait);
    - } else
    - BUG();
    - }
    - }
    - binder_debug(BINDER_DEBUG_DEAD_BINDER,
    - "node %d now dead, refs %d, death %d\n",
    - node->debug_id, incoming_refs, death);
    - }
    + incoming_refs = binder_node_release(node, incoming_refs);
    }
    outgoing_refs = 0;
    while ((n = rb_first(&proc->refs_by_desc))) {
    --
    1.7.10.4


    \
     
     \ /
      Last update: 2013-03-12 12:21    [W:3.348 / U:0.760 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site