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 041c33e3e95c..005b95954593 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: |