KVM: x86: Loading segments on 64-bit mode may be wrong
[sfrench/cifs-2.6.git] / kernel / notifier.c
1 #include <linux/kdebug.h>
2 #include <linux/kprobes.h>
3 #include <linux/export.h>
4 #include <linux/notifier.h>
5 #include <linux/rcupdate.h>
6 #include <linux/vmalloc.h>
7 #include <linux/reboot.h>
8
9 /*
10  *      Notifier list for kernel code which wants to be called
11  *      at shutdown. This is used to stop any idling DMA operations
12  *      and the like.
13  */
14 BLOCKING_NOTIFIER_HEAD(reboot_notifier_list);
15
16 /*
17  *      Notifier chain core routines.  The exported routines below
18  *      are layered on top of these, with appropriate locking added.
19  */
20
21 static int notifier_chain_register(struct notifier_block **nl,
22                 struct notifier_block *n)
23 {
24         while ((*nl) != NULL) {
25                 if (n->priority > (*nl)->priority)
26                         break;
27                 nl = &((*nl)->next);
28         }
29         n->next = *nl;
30         rcu_assign_pointer(*nl, n);
31         return 0;
32 }
33
34 static int notifier_chain_cond_register(struct notifier_block **nl,
35                 struct notifier_block *n)
36 {
37         while ((*nl) != NULL) {
38                 if ((*nl) == n)
39                         return 0;
40                 if (n->priority > (*nl)->priority)
41                         break;
42                 nl = &((*nl)->next);
43         }
44         n->next = *nl;
45         rcu_assign_pointer(*nl, n);
46         return 0;
47 }
48
49 static int notifier_chain_unregister(struct notifier_block **nl,
50                 struct notifier_block *n)
51 {
52         while ((*nl) != NULL) {
53                 if ((*nl) == n) {
54                         rcu_assign_pointer(*nl, n->next);
55                         return 0;
56                 }
57                 nl = &((*nl)->next);
58         }
59         return -ENOENT;
60 }
61
62 /**
63  * notifier_call_chain - Informs the registered notifiers about an event.
64  *      @nl:            Pointer to head of the blocking notifier chain
65  *      @val:           Value passed unmodified to notifier function
66  *      @v:             Pointer passed unmodified to notifier function
67  *      @nr_to_call:    Number of notifier functions to be called. Don't care
68  *                      value of this parameter is -1.
69  *      @nr_calls:      Records the number of notifications sent. Don't care
70  *                      value of this field is NULL.
71  *      @returns:       notifier_call_chain returns the value returned by the
72  *                      last notifier function called.
73  */
74 static int notifier_call_chain(struct notifier_block **nl,
75                                unsigned long val, void *v,
76                                int nr_to_call, int *nr_calls)
77 {
78         int ret = NOTIFY_DONE;
79         struct notifier_block *nb, *next_nb;
80
81         nb = rcu_dereference_raw(*nl);
82
83         while (nb && nr_to_call) {
84                 next_nb = rcu_dereference_raw(nb->next);
85
86 #ifdef CONFIG_DEBUG_NOTIFIERS
87                 if (unlikely(!func_ptr_is_kernel_text(nb->notifier_call))) {
88                         WARN(1, "Invalid notifier called!");
89                         nb = next_nb;
90                         continue;
91                 }
92 #endif
93                 ret = nb->notifier_call(nb, val, v);
94
95                 if (nr_calls)
96                         (*nr_calls)++;
97
98                 if ((ret & NOTIFY_STOP_MASK) == NOTIFY_STOP_MASK)
99                         break;
100                 nb = next_nb;
101                 nr_to_call--;
102         }
103         return ret;
104 }
105 NOKPROBE_SYMBOL(notifier_call_chain);
106
107 /*
108  *      Atomic notifier chain routines.  Registration and unregistration
109  *      use a spinlock, and call_chain is synchronized by RCU (no locks).
110  */
111
112 /**
113  *      atomic_notifier_chain_register - Add notifier to an atomic notifier chain
114  *      @nh: Pointer to head of the atomic notifier chain
115  *      @n: New entry in notifier chain
116  *
117  *      Adds a notifier to an atomic notifier chain.
118  *
119  *      Currently always returns zero.
120  */
121 int atomic_notifier_chain_register(struct atomic_notifier_head *nh,
122                 struct notifier_block *n)
123 {
124         unsigned long flags;
125         int ret;
126
127         spin_lock_irqsave(&nh->lock, flags);
128         ret = notifier_chain_register(&nh->head, n);
129         spin_unlock_irqrestore(&nh->lock, flags);
130         return ret;
131 }
132 EXPORT_SYMBOL_GPL(atomic_notifier_chain_register);
133
134 /**
135  *      atomic_notifier_chain_unregister - Remove notifier from an atomic notifier chain
136  *      @nh: Pointer to head of the atomic notifier chain
137  *      @n: Entry to remove from notifier chain
138  *
139  *      Removes a notifier from an atomic notifier chain.
140  *
141  *      Returns zero on success or %-ENOENT on failure.
142  */
143 int atomic_notifier_chain_unregister(struct atomic_notifier_head *nh,
144                 struct notifier_block *n)
145 {
146         unsigned long flags;
147         int ret;
148
149         spin_lock_irqsave(&nh->lock, flags);
150         ret = notifier_chain_unregister(&nh->head, n);
151         spin_unlock_irqrestore(&nh->lock, flags);
152         synchronize_rcu();
153         return ret;
154 }
155 EXPORT_SYMBOL_GPL(atomic_notifier_chain_unregister);
156
157 /**
158  *      __atomic_notifier_call_chain - Call functions in an atomic notifier chain
159  *      @nh: Pointer to head of the atomic notifier chain
160  *      @val: Value passed unmodified to notifier function
161  *      @v: Pointer passed unmodified to notifier function
162  *      @nr_to_call: See the comment for notifier_call_chain.
163  *      @nr_calls: See the comment for notifier_call_chain.
164  *
165  *      Calls each function in a notifier chain in turn.  The functions
166  *      run in an atomic context, so they must not block.
167  *      This routine uses RCU to synchronize with changes to the chain.
168  *
169  *      If the return value of the notifier can be and'ed
170  *      with %NOTIFY_STOP_MASK then atomic_notifier_call_chain()
171  *      will return immediately, with the return value of
172  *      the notifier function which halted execution.
173  *      Otherwise the return value is the return value
174  *      of the last notifier function called.
175  */
176 int __atomic_notifier_call_chain(struct atomic_notifier_head *nh,
177                                  unsigned long val, void *v,
178                                  int nr_to_call, int *nr_calls)
179 {
180         int ret;
181
182         rcu_read_lock();
183         ret = notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls);
184         rcu_read_unlock();
185         return ret;
186 }
187 EXPORT_SYMBOL_GPL(__atomic_notifier_call_chain);
188 NOKPROBE_SYMBOL(__atomic_notifier_call_chain);
189
190 int atomic_notifier_call_chain(struct atomic_notifier_head *nh,
191                                unsigned long val, void *v)
192 {
193         return __atomic_notifier_call_chain(nh, val, v, -1, NULL);
194 }
195 EXPORT_SYMBOL_GPL(atomic_notifier_call_chain);
196 NOKPROBE_SYMBOL(atomic_notifier_call_chain);
197
198 /*
199  *      Blocking notifier chain routines.  All access to the chain is
200  *      synchronized by an rwsem.
201  */
202
203 /**
204  *      blocking_notifier_chain_register - Add notifier to a blocking notifier chain
205  *      @nh: Pointer to head of the blocking notifier chain
206  *      @n: New entry in notifier chain
207  *
208  *      Adds a notifier to a blocking notifier chain.
209  *      Must be called in process context.
210  *
211  *      Currently always returns zero.
212  */
213 int blocking_notifier_chain_register(struct blocking_notifier_head *nh,
214                 struct notifier_block *n)
215 {
216         int ret;
217
218         /*
219          * This code gets used during boot-up, when task switching is
220          * not yet working and interrupts must remain disabled.  At
221          * such times we must not call down_write().
222          */
223         if (unlikely(system_state == SYSTEM_BOOTING))
224                 return notifier_chain_register(&nh->head, n);
225
226         down_write(&nh->rwsem);
227         ret = notifier_chain_register(&nh->head, n);
228         up_write(&nh->rwsem);
229         return ret;
230 }
231 EXPORT_SYMBOL_GPL(blocking_notifier_chain_register);
232
233 /**
234  *      blocking_notifier_chain_cond_register - Cond add notifier to a blocking notifier chain
235  *      @nh: Pointer to head of the blocking notifier chain
236  *      @n: New entry in notifier chain
237  *
238  *      Adds a notifier to a blocking notifier chain, only if not already
239  *      present in the chain.
240  *      Must be called in process context.
241  *
242  *      Currently always returns zero.
243  */
244 int blocking_notifier_chain_cond_register(struct blocking_notifier_head *nh,
245                 struct notifier_block *n)
246 {
247         int ret;
248
249         down_write(&nh->rwsem);
250         ret = notifier_chain_cond_register(&nh->head, n);
251         up_write(&nh->rwsem);
252         return ret;
253 }
254 EXPORT_SYMBOL_GPL(blocking_notifier_chain_cond_register);
255
256 /**
257  *      blocking_notifier_chain_unregister - Remove notifier from a blocking notifier chain
258  *      @nh: Pointer to head of the blocking notifier chain
259  *      @n: Entry to remove from notifier chain
260  *
261  *      Removes a notifier from a blocking notifier chain.
262  *      Must be called from process context.
263  *
264  *      Returns zero on success or %-ENOENT on failure.
265  */
266 int blocking_notifier_chain_unregister(struct blocking_notifier_head *nh,
267                 struct notifier_block *n)
268 {
269         int ret;
270
271         /*
272          * This code gets used during boot-up, when task switching is
273          * not yet working and interrupts must remain disabled.  At
274          * such times we must not call down_write().
275          */
276         if (unlikely(system_state == SYSTEM_BOOTING))
277                 return notifier_chain_unregister(&nh->head, n);
278
279         down_write(&nh->rwsem);
280         ret = notifier_chain_unregister(&nh->head, n);
281         up_write(&nh->rwsem);
282         return ret;
283 }
284 EXPORT_SYMBOL_GPL(blocking_notifier_chain_unregister);
285
286 /**
287  *      __blocking_notifier_call_chain - Call functions in a blocking notifier chain
288  *      @nh: Pointer to head of the blocking notifier chain
289  *      @val: Value passed unmodified to notifier function
290  *      @v: Pointer passed unmodified to notifier function
291  *      @nr_to_call: See comment for notifier_call_chain.
292  *      @nr_calls: See comment for notifier_call_chain.
293  *
294  *      Calls each function in a notifier chain in turn.  The functions
295  *      run in a process context, so they are allowed to block.
296  *
297  *      If the return value of the notifier can be and'ed
298  *      with %NOTIFY_STOP_MASK then blocking_notifier_call_chain()
299  *      will return immediately, with the return value of
300  *      the notifier function which halted execution.
301  *      Otherwise the return value is the return value
302  *      of the last notifier function called.
303  */
304 int __blocking_notifier_call_chain(struct blocking_notifier_head *nh,
305                                    unsigned long val, void *v,
306                                    int nr_to_call, int *nr_calls)
307 {
308         int ret = NOTIFY_DONE;
309
310         /*
311          * We check the head outside the lock, but if this access is
312          * racy then it does not matter what the result of the test
313          * is, we re-check the list after having taken the lock anyway:
314          */
315         if (rcu_access_pointer(nh->head)) {
316                 down_read(&nh->rwsem);
317                 ret = notifier_call_chain(&nh->head, val, v, nr_to_call,
318                                         nr_calls);
319                 up_read(&nh->rwsem);
320         }
321         return ret;
322 }
323 EXPORT_SYMBOL_GPL(__blocking_notifier_call_chain);
324
325 int blocking_notifier_call_chain(struct blocking_notifier_head *nh,
326                 unsigned long val, void *v)
327 {
328         return __blocking_notifier_call_chain(nh, val, v, -1, NULL);
329 }
330 EXPORT_SYMBOL_GPL(blocking_notifier_call_chain);
331
332 /*
333  *      Raw notifier chain routines.  There is no protection;
334  *      the caller must provide it.  Use at your own risk!
335  */
336
337 /**
338  *      raw_notifier_chain_register - Add notifier to a raw notifier chain
339  *      @nh: Pointer to head of the raw notifier chain
340  *      @n: New entry in notifier chain
341  *
342  *      Adds a notifier to a raw notifier chain.
343  *      All locking must be provided by the caller.
344  *
345  *      Currently always returns zero.
346  */
347 int raw_notifier_chain_register(struct raw_notifier_head *nh,
348                 struct notifier_block *n)
349 {
350         return notifier_chain_register(&nh->head, n);
351 }
352 EXPORT_SYMBOL_GPL(raw_notifier_chain_register);
353
354 /**
355  *      raw_notifier_chain_unregister - Remove notifier from a raw notifier chain
356  *      @nh: Pointer to head of the raw notifier chain
357  *      @n: Entry to remove from notifier chain
358  *
359  *      Removes a notifier from a raw notifier chain.
360  *      All locking must be provided by the caller.
361  *
362  *      Returns zero on success or %-ENOENT on failure.
363  */
364 int raw_notifier_chain_unregister(struct raw_notifier_head *nh,
365                 struct notifier_block *n)
366 {
367         return notifier_chain_unregister(&nh->head, n);
368 }
369 EXPORT_SYMBOL_GPL(raw_notifier_chain_unregister);
370
371 /**
372  *      __raw_notifier_call_chain - Call functions in a raw notifier chain
373  *      @nh: Pointer to head of the raw notifier chain
374  *      @val: Value passed unmodified to notifier function
375  *      @v: Pointer passed unmodified to notifier function
376  *      @nr_to_call: See comment for notifier_call_chain.
377  *      @nr_calls: See comment for notifier_call_chain
378  *
379  *      Calls each function in a notifier chain in turn.  The functions
380  *      run in an undefined context.
381  *      All locking must be provided by the caller.
382  *
383  *      If the return value of the notifier can be and'ed
384  *      with %NOTIFY_STOP_MASK then raw_notifier_call_chain()
385  *      will return immediately, with the return value of
386  *      the notifier function which halted execution.
387  *      Otherwise the return value is the return value
388  *      of the last notifier function called.
389  */
390 int __raw_notifier_call_chain(struct raw_notifier_head *nh,
391                               unsigned long val, void *v,
392                               int nr_to_call, int *nr_calls)
393 {
394         return notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls);
395 }
396 EXPORT_SYMBOL_GPL(__raw_notifier_call_chain);
397
398 int raw_notifier_call_chain(struct raw_notifier_head *nh,
399                 unsigned long val, void *v)
400 {
401         return __raw_notifier_call_chain(nh, val, v, -1, NULL);
402 }
403 EXPORT_SYMBOL_GPL(raw_notifier_call_chain);
404
405 /*
406  *      SRCU notifier chain routines.    Registration and unregistration
407  *      use a mutex, and call_chain is synchronized by SRCU (no locks).
408  */
409
410 /**
411  *      srcu_notifier_chain_register - Add notifier to an SRCU notifier chain
412  *      @nh: Pointer to head of the SRCU notifier chain
413  *      @n: New entry in notifier chain
414  *
415  *      Adds a notifier to an SRCU notifier chain.
416  *      Must be called in process context.
417  *
418  *      Currently always returns zero.
419  */
420 int srcu_notifier_chain_register(struct srcu_notifier_head *nh,
421                 struct notifier_block *n)
422 {
423         int ret;
424
425         /*
426          * This code gets used during boot-up, when task switching is
427          * not yet working and interrupts must remain disabled.  At
428          * such times we must not call mutex_lock().
429          */
430         if (unlikely(system_state == SYSTEM_BOOTING))
431                 return notifier_chain_register(&nh->head, n);
432
433         mutex_lock(&nh->mutex);
434         ret = notifier_chain_register(&nh->head, n);
435         mutex_unlock(&nh->mutex);
436         return ret;
437 }
438 EXPORT_SYMBOL_GPL(srcu_notifier_chain_register);
439
440 /**
441  *      srcu_notifier_chain_unregister - Remove notifier from an SRCU notifier chain
442  *      @nh: Pointer to head of the SRCU notifier chain
443  *      @n: Entry to remove from notifier chain
444  *
445  *      Removes a notifier from an SRCU notifier chain.
446  *      Must be called from process context.
447  *
448  *      Returns zero on success or %-ENOENT on failure.
449  */
450 int srcu_notifier_chain_unregister(struct srcu_notifier_head *nh,
451                 struct notifier_block *n)
452 {
453         int ret;
454
455         /*
456          * This code gets used during boot-up, when task switching is
457          * not yet working and interrupts must remain disabled.  At
458          * such times we must not call mutex_lock().
459          */
460         if (unlikely(system_state == SYSTEM_BOOTING))
461                 return notifier_chain_unregister(&nh->head, n);
462
463         mutex_lock(&nh->mutex);
464         ret = notifier_chain_unregister(&nh->head, n);
465         mutex_unlock(&nh->mutex);
466         synchronize_srcu(&nh->srcu);
467         return ret;
468 }
469 EXPORT_SYMBOL_GPL(srcu_notifier_chain_unregister);
470
471 /**
472  *      __srcu_notifier_call_chain - Call functions in an SRCU notifier chain
473  *      @nh: Pointer to head of the SRCU notifier chain
474  *      @val: Value passed unmodified to notifier function
475  *      @v: Pointer passed unmodified to notifier function
476  *      @nr_to_call: See comment for notifier_call_chain.
477  *      @nr_calls: See comment for notifier_call_chain
478  *
479  *      Calls each function in a notifier chain in turn.  The functions
480  *      run in a process context, so they are allowed to block.
481  *
482  *      If the return value of the notifier can be and'ed
483  *      with %NOTIFY_STOP_MASK then srcu_notifier_call_chain()
484  *      will return immediately, with the return value of
485  *      the notifier function which halted execution.
486  *      Otherwise the return value is the return value
487  *      of the last notifier function called.
488  */
489 int __srcu_notifier_call_chain(struct srcu_notifier_head *nh,
490                                unsigned long val, void *v,
491                                int nr_to_call, int *nr_calls)
492 {
493         int ret;
494         int idx;
495
496         idx = srcu_read_lock(&nh->srcu);
497         ret = notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls);
498         srcu_read_unlock(&nh->srcu, idx);
499         return ret;
500 }
501 EXPORT_SYMBOL_GPL(__srcu_notifier_call_chain);
502
503 int srcu_notifier_call_chain(struct srcu_notifier_head *nh,
504                 unsigned long val, void *v)
505 {
506         return __srcu_notifier_call_chain(nh, val, v, -1, NULL);
507 }
508 EXPORT_SYMBOL_GPL(srcu_notifier_call_chain);
509
510 /**
511  *      srcu_init_notifier_head - Initialize an SRCU notifier head
512  *      @nh: Pointer to head of the srcu notifier chain
513  *
514  *      Unlike other sorts of notifier heads, SRCU notifier heads require
515  *      dynamic initialization.  Be sure to call this routine before
516  *      calling any of the other SRCU notifier routines for this head.
517  *
518  *      If an SRCU notifier head is deallocated, it must first be cleaned
519  *      up by calling srcu_cleanup_notifier_head().  Otherwise the head's
520  *      per-cpu data (used by the SRCU mechanism) will leak.
521  */
522 void srcu_init_notifier_head(struct srcu_notifier_head *nh)
523 {
524         mutex_init(&nh->mutex);
525         if (init_srcu_struct(&nh->srcu) < 0)
526                 BUG();
527         nh->head = NULL;
528 }
529 EXPORT_SYMBOL_GPL(srcu_init_notifier_head);
530
531 static ATOMIC_NOTIFIER_HEAD(die_chain);
532
533 int notrace notify_die(enum die_val val, const char *str,
534                struct pt_regs *regs, long err, int trap, int sig)
535 {
536         struct die_args args = {
537                 .regs   = regs,
538                 .str    = str,
539                 .err    = err,
540                 .trapnr = trap,
541                 .signr  = sig,
542
543         };
544         return atomic_notifier_call_chain(&die_chain, val, &args);
545 }
546 NOKPROBE_SYMBOL(notify_die);
547
548 int register_die_notifier(struct notifier_block *nb)
549 {
550         vmalloc_sync_all();
551         return atomic_notifier_chain_register(&die_chain, nb);
552 }
553 EXPORT_SYMBOL_GPL(register_die_notifier);
554
555 int unregister_die_notifier(struct notifier_block *nb)
556 {
557         return atomic_notifier_chain_unregister(&die_chain, nb);
558 }
559 EXPORT_SYMBOL_GPL(unregister_die_notifier);