merge in oc-release history after reset to oc-dev
diff --git a/Binder.cpp b/Binder.cpp
index 94b2074..3cb36ce 100644
--- a/Binder.cpp
+++ b/Binder.cpp
@@ -22,6 +22,7 @@
#include <hwbinder/IInterface.h>
#include <hwbinder/Parcel.h>
+#include <sched.h>
#include <stdio.h>
namespace android {
@@ -66,10 +67,18 @@
// ---------------------------------------------------------------------------
-BHwBinder::BHwBinder() : mExtras(nullptr)
+BHwBinder::BHwBinder() : mSchedPolicy(SCHED_NORMAL), mSchedPriority(0), mExtras(nullptr)
{
}
+int BHwBinder::getMinSchedulingPolicy() {
+ return mSchedPolicy;
+}
+
+int BHwBinder::getMinSchedulingPriority() {
+ return mSchedPriority;
+}
+
status_t BHwBinder::transact(
uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags, TransactCallback callback)
{
diff --git a/Parcel.cpp b/Parcel.cpp
index f7406f9..db4bb05 100644
--- a/Parcel.cpp
+++ b/Parcel.cpp
@@ -198,9 +198,8 @@
{
flat_binder_object obj;
- obj.flags = 0x7f | FLAT_BINDER_FLAG_ACCEPTS_FDS;
if (binder != NULL) {
- IBinder *local = binder->localBinder();
+ BHwBinder *local = binder->localBinder();
if (!local) {
BpHwBinder *proxy = binder->remoteBinder();
if (proxy == NULL) {
@@ -208,10 +207,18 @@
}
const int32_t handle = proxy ? proxy->handle() : 0;
obj.type = BINDER_TYPE_HANDLE;
+ obj.flags = FLAT_BINDER_FLAG_ACCEPTS_FDS;
obj.binder = 0; /* Don't pass uninitialized stack data to a remote process */
obj.handle = handle;
obj.cookie = 0;
} else {
+ // Get policy and convert it
+ int policy = local->getMinSchedulingPolicy();
+ int priority = local->getMinSchedulingPriority();
+
+ obj.flags = priority & FLAT_BINDER_FLAG_PRIORITY_MASK;
+ obj.flags |= FLAT_BINDER_FLAG_ACCEPTS_FDS;
+ obj.flags |= (policy & 3) << FLAT_BINDER_FLAG_SCHEDPOLICY_SHIFT;
obj.type = BINDER_TYPE_BINDER;
obj.binder = reinterpret_cast<uintptr_t>(local->getWeakRefs());
obj.cookie = reinterpret_cast<uintptr_t>(local);
diff --git a/include/hwbinder/Binder.h b/include/hwbinder/Binder.h
index 5611cec..a7f8815 100644
--- a/include/hwbinder/Binder.h
+++ b/include/hwbinder/Binder.h
@@ -54,6 +54,8 @@
virtual BHwBinder* localBinder();
+ int getMinSchedulingPolicy();
+ int getMinSchedulingPriority();
protected:
virtual ~BHwBinder();
@@ -62,7 +64,9 @@
Parcel* reply,
uint32_t flags = 0,
TransactCallback callback = nullptr);
-
+ int mSchedPolicy; // policy to run transaction from this node at
+ // priority [-20..19] for SCHED_NORMAL, [1..99] for SCHED_FIFO/RT
+ int mSchedPriority;
private:
BHwBinder(const BHwBinder& o);
BHwBinder& operator=(const BHwBinder& o);
diff --git a/include/hwbinder/binder_kernel.h b/include/hwbinder/binder_kernel.h
index 2494f68..c288ba2 100644
--- a/include/hwbinder/binder_kernel.h
+++ b/include/hwbinder/binder_kernel.h
@@ -106,4 +106,10 @@
BC_REPLY_SG = _IOW('c', 18, struct binder_transaction_data_sg),
};
+enum {
+ FLAT_BINDER_FLAG_SCHEDPOLICY_MASK = 0x600,
+ FLAT_BINDER_FLAG_SCHEDPOLICY_SHIFT = 9,
+};
+
+
#endif // ANDROID_HARDWARE_BINDER_KERNEL_H