From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932372AbdJZOIJ (ORCPT ); Thu, 26 Oct 2017 10:08:09 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:50810 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932234AbdJZOIH (ORCPT ); Thu, 26 Oct 2017 10:08:07 -0400 X-Google-Smtp-Source: ABhQp+T/FumhLbDNNRLQKquVxeaOmUrU9t128qbHWG/Mw6uFdInmeWCdMyddLBrJmZ83Pz7rohCwOg== From: Martijn Coenen To: gregkh@linuxfoundation.org, john.stultz@linaro.org, tkjos@google.com, arve@android.com, sherryy@android.com, tglx@linutronix.de, peterz@infradead.org, amit.pundir@linaro.org Cc: linux-kernel@vger.kernel.org, devel@driverdev.osuosl.org, maco@google.com, Martijn Coenen Subject: [PATCH v3 0/6] ANDROID: binder: RT priority inheritance Date: Thu, 26 Oct 2017 16:07:44 +0200 Message-Id: <20171026140750.119265-1-maco@android.com> X-Mailer: git-send-email 2.15.0.rc2.357.g7e34df9404-goog Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Changes since v2 [1]: - All patches in v2 not related to priority inheritance were merged, and hence removed from this series - Fixed using the wrong mask in node scheduler policy calculation, originally reported by Ganesh Mahendran - Fixed using an uninitialized value for desired_prio, originally reported by Ganesh Mahendran Changes since v1 [2]: - added more detailed commit messages and comments to the priority inheritance patches, including rationale for not using schet_setscheduler() directly, or rt_mutex prio inheritance. No functional changes. [1]: https://lkml.kernel.org/r/20170831080430.118765-1-maco@android.com [2]: https://lkml.kernel.org/r/20170825093335.100892-1-maco@android.com --- This patch series introduces support for priority inheritance of real-time scheduling policies in binder. With the introduction of Android Treble, functionality that used to be in a single process is now split over two or more processes, which communicate using binder IPC. For latency sensitive operations such as sensor events, Bluetooth audio and rendering, inheriting the (real-time) priority of the caller is crucial to meet requirements. The implementation in this series directly calls into the scheduler to modify priorities, since I haven't found a way to make this work correctly with rt_mutex or other existing priority inheritance mechanisms. The main reasons a PI rt_mutex doesn't work well are the following: 1) Binder supports asynchronous transactions, where a caller isn't blocked on a result; therefore, the caller also couldn't block on a rt_mutex. 2) Binder supports the concept of 'node priority', where the priority of a call is not determined by the caller, but by the endpoint the caller calls in to. 3) There may not necessarily be any binder threads waiting to handle a transaction, so the caller doesn't always have a thread to change the priority of; instead, the first thread to pick up the work changes its own priority. 4) rt_mutex doesn't support non-RT policies (though a patch was sent to LKML once to address this). More details in the patches themselves. I have found the current approach to be reliable, but I'm happy to look into suggestions to make this work with rt_mutex, or use other infrastructure. All patches have already been reviewed by Android engineers and are merged in Android's common kernel trees. Martijn Coenen (6): ANDROID: binder: add support for RT prio inheritance. ANDROID: binder: add min sched_policy to node. ANDROID: binder: improve priority inheritance. ANDROID: binder: add RT inheritance flag to node. ANDROID: binder: don't check prio permissions on restore. ANDROID: binder: Add tracing for binder priority inheritance. drivers/android/binder.c | 294 ++++++++++++++++++++++++++++++++---- drivers/android/binder_trace.h | 24 +++ include/uapi/linux/android/binder.h | 49 +++++- 3 files changed, 334 insertions(+), 33 deletions(-) -- 2.15.0.rc2.357.g7e34df9404-goog