X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Fmarker.c;h=794dd28fcfcf289d40cf2ad28755eda6fc38d3fb;hb=34e4b7db790ca5ff678eae7cf5658455a8991870;hp=e417b62fbb76a384e6c2cbafd2ebecabc181ca84;hpb=b4512257eb71d0432554047acf6278dc42a15a75;p=ust.git diff --git a/libust/marker.c b/libust/marker.c index e417b62..794dd28 100644 --- a/libust/marker.c +++ b/libust/marker.c @@ -1,19 +1,19 @@ /* * Copyright (C) 2007 Mathieu Desnoyers * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, + * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ //ust// #include //ust// #include @@ -30,8 +30,12 @@ //ust// #include //ust// #include -#include "marker.h" +#define _LGPL_SOURCE +#include + #include "kernelcompat.h" + +#include "marker.h" #include "usterr.h" #include "channels.h" #include "tracercore.h" @@ -501,8 +505,8 @@ static int remove_marker(const char *channel, const char *name) ret = ltt_channels_unregister(e->channel); WARN_ON(ret); /* Make sure the call_rcu has been executed */ - if (e->rcu_pending) - rcu_barrier_sched(); +//ust// if (e->rcu_pending) +//ust// rcu_barrier_sched(); kfree(e); return 0; } @@ -792,8 +796,8 @@ int marker_probe_register(const char *channel, const char *name, * If we detect that a call_rcu is pending for this marker, * make sure it's executed now. */ - if (entry->rcu_pending) - rcu_barrier_sched(); +//ust// if (entry->rcu_pending) +//ust// rcu_barrier_sched(); old = marker_entry_add_probe(entry, probe, probe_private); if (IS_ERR(old)) { ret = PTR_ERR(old); @@ -810,14 +814,14 @@ int marker_probe_register(const char *channel, const char *name, entry = get_marker(channel, name); if (!entry) goto end; - if (entry->rcu_pending) - rcu_barrier_sched(); +//ust// if (entry->rcu_pending) +//ust// rcu_barrier_sched(); entry->oldptr = old; entry->rcu_pending = 1; /* write rcu_pending before calling the RCU callback */ smp_wmb(); - call_rcu_sched(&entry->rcu, free_old_closure); - /*synchronize_rcu(); free_old_closure();*/ +//ust// call_rcu_sched(&entry->rcu, free_old_closure); + synchronize_rcu(); free_old_closure(&entry->rcu); goto end; error_unregister_channel: @@ -856,8 +860,8 @@ int marker_probe_unregister(const char *channel, const char *name, entry = get_marker(channel, name); if (!entry) goto end; - if (entry->rcu_pending) - rcu_barrier_sched(); +//ust// if (entry->rcu_pending) +//ust// rcu_barrier_sched(); old = marker_entry_remove_probe(entry, probe, probe_private); mutex_unlock(&markers_mutex); @@ -867,13 +871,14 @@ int marker_probe_unregister(const char *channel, const char *name, entry = get_marker(channel, name); if (!entry) goto end; - if (entry->rcu_pending) - rcu_barrier_sched(); +//ust// if (entry->rcu_pending) +//ust// rcu_barrier_sched(); entry->oldptr = old; entry->rcu_pending = 1; /* write rcu_pending before calling the RCU callback */ smp_wmb(); - call_rcu_sched(&entry->rcu, free_old_closure); +//ust// call_rcu_sched(&entry->rcu, free_old_closure); + synchronize_rcu(); free_old_closure(&entry->rcu); remove_marker(channel, name); /* Ignore busy error message */ ret = 0; end: @@ -940,8 +945,8 @@ int marker_probe_unregister_private_data(marker_probe_func *probe, ret = -ENOENT; goto end; } - if (entry->rcu_pending) - rcu_barrier_sched(); +//ust// if (entry->rcu_pending) +//ust// rcu_barrier_sched(); old = marker_entry_remove_probe(entry, NULL, probe_private); channel = kstrdup(entry->channel, GFP_KERNEL); name = kstrdup(entry->name, GFP_KERNEL); @@ -953,13 +958,14 @@ int marker_probe_unregister_private_data(marker_probe_func *probe, entry = get_marker(channel, name); if (!entry) goto end; - if (entry->rcu_pending) - rcu_barrier_sched(); +//ust// if (entry->rcu_pending) +//ust// rcu_barrier_sched(); entry->oldptr = old; entry->rcu_pending = 1; /* write rcu_pending before calling the RCU callback */ smp_wmb(); - call_rcu_sched(&entry->rcu, free_old_closure); +//ust// call_rcu_sched(&entry->rcu, free_old_closure); + synchronize_rcu(); free_old_closure(&entry->rcu); /* Ignore busy error message */ remove_marker(channel, name); end: