diff options
| -rw-r--r-- | kernel/marker.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/marker.c b/kernel/marker.c index 041c33e3e9..005b959545 100644 --- a/kernel/marker.c +++ b/kernel/marker.c | |||
| @@ -671,6 +671,9 @@ int marker_probe_register(const char *name, const char *format, | |||
| 671 | entry->rcu_pending = 1; | 671 | entry->rcu_pending = 1; |
| 672 | /* write rcu_pending before calling the RCU callback */ | 672 | /* write rcu_pending before calling the RCU callback */ |
| 673 | smp_wmb(); | 673 | smp_wmb(); |
| 674 | #ifdef CONFIG_PREEMPT_RCU | ||
| 675 | synchronize_sched(); /* Until we have the call_rcu_sched() */ | ||
| 676 | #endif | ||
| 674 | call_rcu(&entry->rcu, free_old_closure); | 677 | call_rcu(&entry->rcu, free_old_closure); |
| 675 | end: | 678 | end: |
| 676 | mutex_unlock(&markers_mutex); | 679 | mutex_unlock(&markers_mutex); |
| @@ -714,6 +717,9 @@ int marker_probe_unregister(const char *name, | |||
| 714 | entry->rcu_pending = 1; | 717 | entry->rcu_pending = 1; |
| 715 | /* write rcu_pending before calling the RCU callback */ | 718 | /* write rcu_pending before calling the RCU callback */ |
| 716 | smp_wmb(); | 719 | smp_wmb(); |
| 720 | #ifdef CONFIG_PREEMPT_RCU | ||
| 721 | synchronize_sched(); /* Until we have the call_rcu_sched() */ | ||
| 722 | #endif | ||
| 717 | call_rcu(&entry->rcu, free_old_closure); | 723 | call_rcu(&entry->rcu, free_old_closure); |
| 718 | remove_marker(name); /* Ignore busy error message */ | 724 | remove_marker(name); /* Ignore busy error message */ |
| 719 | ret = 0; | 725 | ret = 0; |
| @@ -792,6 +798,9 @@ int marker_probe_unregister_private_data(marker_probe_func *probe, | |||
| 792 | entry->rcu_pending = 1; | 798 | entry->rcu_pending = 1; |
| 793 | /* write rcu_pending before calling the RCU callback */ | 799 | /* write rcu_pending before calling the RCU callback */ |
| 794 | smp_wmb(); | 800 | smp_wmb(); |
| 801 | #ifdef CONFIG_PREEMPT_RCU | ||
| 802 | synchronize_sched(); /* Until we have the call_rcu_sched() */ | ||
| 803 | #endif | ||
| 795 | call_rcu(&entry->rcu, free_old_closure); | 804 | call_rcu(&entry->rcu, free_old_closure); |
| 796 | remove_marker(entry->name); /* Ignore busy error message */ | 805 | remove_marker(entry->name); /* Ignore busy error message */ |
| 797 | end: | 806 | end: |
