user-return-notifier.h 1.1 KB

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