user-return-notifier.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _LINUX_USER_RETURN_NOTIFIER_H
  3. #define _LINUX_USER_RETURN_NOTIFIER_H
  4. #ifdef CONFIG_USER_RETURN_NOTIFIER
  5. #include <linux/list.h>
  6. #include <linux/sched.h>
  7. struct user_return_notifier {
  8. void (*on_user_return)(struct user_return_notifier *urn);
  9. struct hlist_node link;
  10. };
  11. void user_return_notifier_register(struct user_return_notifier *urn);
  12. void user_return_notifier_unregister(struct user_return_notifier *urn);
  13. static inline void propagate_user_return_notify(struct task_struct *prev,
  14. struct task_struct *next)
  15. {
  16. if (test_tsk_thread_flag(prev, TIF_USER_RETURN_NOTIFY)) {
  17. clear_tsk_thread_flag(prev, TIF_USER_RETURN_NOTIFY);
  18. set_tsk_thread_flag(next, TIF_USER_RETURN_NOTIFY);
  19. }
  20. }
  21. void fire_user_return_notifiers(void);
  22. static inline void clear_user_return_notifier(struct task_struct *p)
  23. {
  24. clear_tsk_thread_flag(p, TIF_USER_RETURN_NOTIFY);
  25. }
  26. #else
  27. struct user_return_notifier {};
  28. static inline void propagate_user_return_notify(struct task_struct *prev,
  29. struct task_struct *next)
  30. {
  31. }
  32. static inline void fire_user_return_notifiers(void) {}
  33. static inline void clear_user_return_notifier(struct task_struct *p) {}
  34. #endif
  35. #endif