From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755250AbbE1XKU (ORCPT ); Thu, 28 May 2015 19:10:20 -0400 Received: from mail-ie0-f176.google.com ([209.85.223.176]:36573 "EHLO mail-ie0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755198AbbE1XJ6 (ORCPT ); Thu, 28 May 2015 19:09:58 -0400 From: Riley Andrews To: linux-kernel@vger.kernel.org, Greg Kroah-Hartman , =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Riley Andrews , devel@driverdev.osuosl.org Subject: [PATCH 09/13] android: binder: add function for finding prior thread in transaction stack Date: Thu, 28 May 2015 16:08:27 -0700 Message-Id: <1432854511-33320-10-git-send-email-riandrews@android.com> X-Mailer: git-send-email 2.2.0.rc0.207.ga3a616c In-Reply-To: <1432854511-33320-1-git-send-email-riandrews@android.com> References: <1432854511-33320-1-git-send-email-riandrews@android.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a helper function to find a thread within a transaction stack. Signed-off-by: Riley Andrews --- drivers/android/binder.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/drivers/android/binder.c b/drivers/android/binder.c index f7f2217..abd5556 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -1634,6 +1634,19 @@ static int binder_tr_validate_stack(struct binder_thread *thread) return BR_OK; } +struct binder_thread *binder_find_used_thread(struct binder_proc *proc, + struct binder_transaction *stack) +{ + struct binder_transaction *tr = stack; + + while (tr) { + if (tr->from && tr->from->proc == proc) + return tr->from; + tr = tr->from_parent; + } + return NULL; +} + static void binder_transaction(struct binder_thread *thread, struct binder_transaction_data *tr, int reply) { @@ -1688,18 +1701,12 @@ static void binder_transaction(struct binder_thread *thread, goto err_invalid_target_handle; } if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) { - struct binder_transaction *tmp; - return_error = binder_tr_validate_stack(thread); if (return_error != BR_OK) goto err_bad_call_stack; - tmp = thread->transaction_stack; - while (tmp) { - if (tmp->from && tmp->from->proc == target_proc) - target_thread = tmp->from; - tmp = tmp->from_parent; - } + target_thread = binder_find_used_thread(target_proc, + thread->transaction_stack); } } if (target_thread) { -- 2.2.0.rc0.207.ga3a616c