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