So I started looking at this, but given I never seen the deferred unwind
bits that got merged I have to look at that first.

Headers want something like so.. Let me read the rest.

---
 include/linux/unwind_deferred.h       | 38 +++++++++++++++++++----------------
 include/linux/unwind_deferred_types.h |  2 ++
 2 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/include/linux/unwind_deferred.h b/include/linux/unwind_deferred.h
index 26122d00708a..5d51a3f2f8ec 100644
--- a/include/linux/unwind_deferred.h
+++ b/include/linux/unwind_deferred.h
@@ -8,7 +8,8 @@
 
 struct unwind_work;
 
-typedef void (*unwind_callback_t)(struct unwind_work *work, struct 
unwind_stacktrace *trace, u64 cookie);
+typedef void (*unwind_callback_t)(struct unwind_work *work,
+                                 struct unwind_stacktrace *trace, u64 cookie);
 
 struct unwind_work {
        struct list_head                list;
@@ -44,22 +45,22 @@ void unwind_deferred_task_exit(struct task_struct *task);
 static __always_inline void unwind_reset_info(void)
 {
        struct unwind_task_info *info = &current->unwind_info;
-       unsigned long bits;
+       unsigned long bits = info->unwind_mask;
 
        /* Was there any unwinding? */
-       if (unlikely(info->unwind_mask)) {
-               bits = info->unwind_mask;
-               do {
-                       /* Is a task_work going to run again before going back 
*/
-                       if (bits & UNWIND_PENDING)
-                               return;
-               } while (!try_cmpxchg(&info->unwind_mask, &bits, 0UL));
-               current->unwind_info.id.id = 0;
+       if (likely(!bits))
+               return;
 
-               if (unlikely(info->cache)) {
-                       info->cache->nr_entries = 0;
-                       info->cache->unwind_completed = 0;
-               }
+       do {
+               /* Is a task_work going to run again before going back */
+               if (bits & UNWIND_PENDING)
+                       return;
+       } while (!try_cmpxchg(&info->unwind_mask, &bits, 0UL));
+       current->unwind_info.id.id = 0;
+
+       if (unlikely(info->cache)) {
+               info->cache->nr_entries = 0;
+               info->cache->unwind_completed = 0;
        }
 }
 
@@ -68,9 +69,12 @@ static __always_inline void unwind_reset_info(void)
 static inline void unwind_task_init(struct task_struct *task) {}
 static inline void unwind_task_free(struct task_struct *task) {}
 
-static inline int unwind_user_faultable(struct unwind_stacktrace *trace) { 
return -ENOSYS; }
-static inline int unwind_deferred_init(struct unwind_work *work, 
unwind_callback_t func) { return -ENOSYS; }
-static inline int unwind_deferred_request(struct unwind_work *work, u64 
*timestamp) { return -ENOSYS; }
+static inline int unwind_user_faultable(struct unwind_stacktrace *trace)
+{ return -ENOSYS; }
+static inline int unwind_deferred_init(struct unwind_work *work, 
unwind_callback_t func)
+{ return -ENOSYS; }
+static inline int unwind_deferred_request(struct unwind_work *work, u64 
*timestamp)
+{ return -ENOSYS; }
 static inline void unwind_deferred_cancel(struct unwind_work *work) {}
 
 static inline void unwind_deferred_task_exit(struct task_struct *task) {}
diff --git a/include/linux/unwind_deferred_types.h 
b/include/linux/unwind_deferred_types.h
index 33b62ac25c86..29452ff49859 100644
--- a/include/linux/unwind_deferred_types.h
+++ b/include/linux/unwind_deferred_types.h
@@ -2,6 +2,8 @@
 #ifndef _LINUX_UNWIND_USER_DEFERRED_TYPES_H
 #define _LINUX_UNWIND_USER_DEFERRED_TYPES_H
 
+#include <linux/types.h>
+
 struct unwind_cache {
        unsigned long           unwind_completed;
        unsigned int            nr_entries;

Reply via email to