]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/pthread/priority_private.h
xnu-6153.81.5.tar.gz
[apple/xnu.git] / bsd / pthread / priority_private.h
index 5d20e08b3abdda9bcb154c7a8f337aae862fed69..dbfff7e5452f652eff34c45263e9566570a4e10e 100644 (file)
  */
 typedef unsigned long pthread_priority_t;
 
  */
 typedef unsigned long pthread_priority_t;
 
-#define _PTHREAD_PRIORITY_FLAGS_MASK                   0xff000000
-#define _PTHREAD_PRIORITY_FLAGS_SHIFT                  (24ull)
-
-#define _PTHREAD_PRIORITY_OVERCOMMIT_FLAG              0x80000000
-#define _PTHREAD_PRIORITY_INHERIT_FLAG                 0x40000000 /* dispatch only */
-#define _PTHREAD_PRIORITY_ROOTQUEUE_FLAG               0x20000000 /* dispatch only */
-#define _PTHREAD_PRIORITY_SCHED_PRI_FLAG               0x20000000
-#define _PTHREAD_PRIORITY_SCHED_PRI_MASK               0x0000ffff
-#define _PTHREAD_PRIORITY_ENFORCE_FLAG                 0x10000000 /* dispatch only */
-#define _PTHREAD_PRIORITY_OVERRIDE_FLAG                        0x08000000 /* unused */
-#define _PTHREAD_PRIORITY_FALLBACK_FLAG                        0x04000000
-#define _PTHREAD_PRIORITY_EVENT_MANAGER_FLAG   0x02000000
-#define _PTHREAD_PRIORITY_NEEDS_UNBIND_FLAG            0x01000000
-#define _PTHREAD_PRIORITY_DEFAULTQUEUE_FLAG            _PTHREAD_PRIORITY_FALLBACK_FLAG // compat
-
-#define _PTHREAD_PRIORITY_ENCODING_MASK                        0x00a00000
-#define _PTHREAD_PRIORITY_ENCODING_SHIFT               (22ull)
-#define _PTHREAD_PRIORITY_ENCODING_V0                  0x00000000
-#define _PTHREAD_PRIORITY_ENCODING_V1                  0x00400000 /* unused */
-#define _PTHREAD_PRIORITY_ENCODING_V2                  0x00800000 /* unused */
-#define _PTHREAD_PRIORITY_ENCODING_V3                  0x00a00000 /* unused */
-
-#define _PTHREAD_PRIORITY_QOS_CLASS_MASK               0x003fff00
-#define _PTHREAD_PRIORITY_VALID_QOS_CLASS_MASK 0x00003f00
-#define _PTHREAD_PRIORITY_QOS_CLASS_SHIFT              (8ull)
-
-#define _PTHREAD_PRIORITY_PRIORITY_MASK                        0x000000ff
-#define _PTHREAD_PRIORITY_PRIORITY_SHIFT               (0)
+#define _PTHREAD_PRIORITY_FLAGS_MASK                    0xff000000
+#define _PTHREAD_PRIORITY_FLAGS_SHIFT                   (24ull)
+
+#define _PTHREAD_PRIORITY_OVERCOMMIT_FLAG               0x80000000
+#define _PTHREAD_PRIORITY_INHERIT_FLAG                  0x40000000 /* dispatch only */
+#define _PTHREAD_PRIORITY_ROOTQUEUE_FLAG                0x20000000 /* dispatch only */
+#define _PTHREAD_PRIORITY_SCHED_PRI_FLAG                0x20000000
+#define _PTHREAD_PRIORITY_SCHED_PRI_MASK                0x0000ffff
+#define _PTHREAD_PRIORITY_ENFORCE_FLAG                  0x10000000 /* dispatch only */
+#define _PTHREAD_PRIORITY_OVERRIDE_FLAG                 0x08000000 /* unused */
+#define _PTHREAD_PRIORITY_FALLBACK_FLAG                 0x04000000
+#define _PTHREAD_PRIORITY_EVENT_MANAGER_FLAG    0x02000000
+#define _PTHREAD_PRIORITY_NEEDS_UNBIND_FLAG             0x01000000
+#define _PTHREAD_PRIORITY_DEFAULTQUEUE_FLAG             _PTHREAD_PRIORITY_FALLBACK_FLAG // compat
+
+#define _PTHREAD_PRIORITY_ENCODING_MASK                 0x00a00000
+#define _PTHREAD_PRIORITY_ENCODING_SHIFT                (22ull)
+#define _PTHREAD_PRIORITY_ENCODING_V0                   0x00000000
+#define _PTHREAD_PRIORITY_ENCODING_V1                   0x00400000 /* unused */
+#define _PTHREAD_PRIORITY_ENCODING_V2                   0x00800000 /* unused */
+#define _PTHREAD_PRIORITY_ENCODING_V3                   0x00a00000 /* unused */
+
+#define _PTHREAD_PRIORITY_QOS_CLASS_MASK                0x003fff00
+#define _PTHREAD_PRIORITY_VALID_QOS_CLASS_MASK  0x00003f00
+#define _PTHREAD_PRIORITY_QOS_CLASS_SHIFT               (8ull)
+
+#define _PTHREAD_PRIORITY_PRIORITY_MASK                 0x000000ff
+#define _PTHREAD_PRIORITY_PRIORITY_SHIFT                (0)
 
 #if PRIVATE
 #if XNU_KERNEL_PRIVATE && !defined(__PTHREAD_EXPOSE_INTERNALS__)
 
 #if PRIVATE
 #if XNU_KERNEL_PRIVATE && !defined(__PTHREAD_EXPOSE_INTERNALS__)
@@ -139,16 +139,16 @@ static inline bool
 _pthread_priority_has_qos(pthread_priority_t pp)
 {
        return (pp & (_PTHREAD_PRIORITY_SCHED_PRI_FLAG |
 _pthread_priority_has_qos(pthread_priority_t pp)
 {
        return (pp & (_PTHREAD_PRIORITY_SCHED_PRI_FLAG |
-                                       _PTHREAD_PRIORITY_EVENT_MANAGER_FLAG)) == 0 &&
-                       (pp & (_PTHREAD_PRIORITY_QOS_CLASS_MASK &
-                                       ~_PTHREAD_PRIORITY_VALID_QOS_CLASS_MASK)) == 0 &&
-                       (pp & _PTHREAD_PRIORITY_VALID_QOS_CLASS_MASK) != 0;
+              _PTHREAD_PRIORITY_EVENT_MANAGER_FLAG)) == 0 &&
+              (pp & (_PTHREAD_PRIORITY_QOS_CLASS_MASK &
+              ~_PTHREAD_PRIORITY_VALID_QOS_CLASS_MASK)) == 0 &&
+              (pp & _PTHREAD_PRIORITY_VALID_QOS_CLASS_MASK) != 0;
 }
 
 __attribute__((always_inline, const))
 static inline pthread_priority_t
 _pthread_priority_make_from_thread_qos(thread_qos_t qos, int relpri,
 }
 
 __attribute__((always_inline, const))
 static inline pthread_priority_t
 _pthread_priority_make_from_thread_qos(thread_qos_t qos, int relpri,
-               unsigned long flags)
+    unsigned long flags)
 {
        pthread_priority_t pp = (flags & _PTHREAD_PRIORITY_FLAGS_MASK);
        if (qos && qos < THREAD_QOS_LAST) {
 {
        pthread_priority_t pp = (flags & _PTHREAD_PRIORITY_FLAGS_MASK);
        if (qos && qos < THREAD_QOS_LAST) {
@@ -179,14 +179,21 @@ _pthread_default_priority(unsigned long flags)
        return _pthread_priority_make_from_thread_qos(THREAD_QOS_LEGACY, 0, flags);
 }
 
        return _pthread_priority_make_from_thread_qos(THREAD_QOS_LEGACY, 0, flags);
 }
 
+__attribute__((always_inline, const))
+static inline thread_qos_t
+_pthread_priority_thread_qos_fast(pthread_priority_t pp)
+{
+       pp &= _PTHREAD_PRIORITY_QOS_CLASS_MASK;
+       pp >>= _PTHREAD_PRIORITY_QOS_CLASS_SHIFT;
+       return (thread_qos_t)__builtin_ffs((int)pp);
+}
+
 __attribute__((always_inline, const))
 static inline thread_qos_t
 _pthread_priority_thread_qos(pthread_priority_t pp)
 {
        if (_pthread_priority_has_qos(pp)) {
 __attribute__((always_inline, const))
 static inline thread_qos_t
 _pthread_priority_thread_qos(pthread_priority_t pp)
 {
        if (_pthread_priority_has_qos(pp)) {
-               pp &= _PTHREAD_PRIORITY_QOS_CLASS_MASK;
-               pp >>= _PTHREAD_PRIORITY_QOS_CLASS_SHIFT;
-               return (thread_qos_t)__builtin_ffs((int)pp);
+               return _pthread_priority_thread_qos_fast(pp);
        }
        return THREAD_QOS_UNSPECIFIED;
 }
        }
        return THREAD_QOS_UNSPECIFIED;
 }