Version:  2.0.40 2.2.26 2.4.37 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

Linux/kernel/user-return-notifier.c

  1 
  2 #include <linux/user-return-notifier.h>
  3 #include <linux/percpu.h>
  4 #include <linux/sched.h>
  5 #include <linux/export.h>
  6 
  7 static DEFINE_PER_CPU(struct hlist_head, return_notifier_list);
  8 
  9 /*
 10  * Request a notification when the current cpu returns to userspace.  Must be
 11  * called in atomic context.  The notifier will also be called in atomic
 12  * context.
 13  */
 14 void user_return_notifier_register(struct user_return_notifier *urn)
 15 {
 16         set_tsk_thread_flag(current, TIF_USER_RETURN_NOTIFY);
 17         hlist_add_head(&urn->link, this_cpu_ptr(&return_notifier_list));
 18 }
 19 EXPORT_SYMBOL_GPL(user_return_notifier_register);
 20 
 21 /*
 22  * Removes a registered user return notifier.  Must be called from atomic
 23  * context, and from the same cpu registration occurred in.
 24  */
 25 void user_return_notifier_unregister(struct user_return_notifier *urn)
 26 {
 27         hlist_del(&urn->link);
 28         if (hlist_empty(this_cpu_ptr(&return_notifier_list)))
 29                 clear_tsk_thread_flag(current, TIF_USER_RETURN_NOTIFY);
 30 }
 31 EXPORT_SYMBOL_GPL(user_return_notifier_unregister);
 32 
 33 /* Calls registered user return notifiers */
 34 void fire_user_return_notifiers(void)
 35 {
 36         struct user_return_notifier *urn;
 37         struct hlist_node *tmp2;
 38         struct hlist_head *head;
 39 
 40         head = &get_cpu_var(return_notifier_list);
 41         hlist_for_each_entry_safe(urn, tmp2, head, link)
 42                 urn->on_user_return(urn);
 43         put_cpu_var(return_notifier_list);
 44 }
 45 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us