fix: removal of [smp_]read_barrier_depends (v5.9)
[lttng-modules.git] / src / lttng-events.c
index 3b9b907beb85196b36301cbb6df6456ab195b23b..3986217f73f242ea1ded61a37c9bb9391dc212bc 100644 (file)
@@ -214,8 +214,10 @@ void lttng_session_destroy(struct lttng_session *session)
                BUG_ON(chan->channel_type == METADATA_CHANNEL);
                _lttng_channel_destroy(chan);
        }
+       mutex_lock(&session->metadata_cache->lock);
        list_for_each_entry(metadata_stream, &session->metadata_cache->metadata_stream, list)
                _lttng_metadata_channel_hangup(metadata_stream);
+       mutex_unlock(&session->metadata_cache->lock);
        lttng_id_tracker_destroy(&session->pid_tracker, false);
        lttng_id_tracker_destroy(&session->vpid_tracker, false);
        lttng_id_tracker_destroy(&session->uid_tracker, false);
@@ -500,12 +502,12 @@ struct lttng_channel *lttng_channel_create(struct lttng_session *session,
                goto active;    /* Refuse to add channel to active session */
        transport = lttng_transport_find(transport_name);
        if (!transport) {
-               printk(KERN_WARNING "LTTng transport %s not found\n",
+               printk(KERN_WARNING "LTTng: transport %s not found\n",
                       transport_name);
                goto notransport;
        }
        if (!try_module_get(transport->owner)) {
-               printk(KERN_WARNING "LTT : Can't lock transport module.\n");
+               printk(KERN_WARNING "LTTng: Can't lock transport module.\n");
                goto notransport;
        }
        chan = kzalloc(sizeof(struct lttng_channel), GFP_KERNEL);
@@ -1318,7 +1320,7 @@ void lttng_create_tracepoint_if_missing(struct lttng_enabler *enabler)
                                        NULL, NULL, desc,
                                        LTTNG_KERNEL_TRACEPOINT);
                        if (!event) {
-                               printk(KERN_INFO "Unable to create event %s\n",
+                               printk(KERN_INFO "LTTng: Unable to create event %s\n",
                                        probe_desc->event_desc[i]->name);
                        }
                }
@@ -1673,7 +1675,7 @@ int lttng_metadata_output_channel(struct lttng_metadata_stream *stream,
                        reserve_len);
        stream->transport->ops.event_commit(&ctx);
        stream->metadata_in += reserve_len;
-       if (reserve_len < len || stream->metadata_cache->producing != 0)
+       if (reserve_len < len)
                stream->coherent = false;
        else
                stream->coherent = true;
@@ -1689,18 +1691,21 @@ end:
 static
 void lttng_metadata_begin(struct lttng_session *session)
 {
-       mutex_lock(&session->metadata_cache->lock);
-       session->metadata_cache->producing++;
-       mutex_unlock(&session->metadata_cache->lock);
+       if (atomic_inc_return(&session->metadata_cache->producing) == 1)
+               mutex_lock(&session->metadata_cache->lock);
 }
 
 static
 void lttng_metadata_end(struct lttng_session *session)
 {
-       mutex_lock(&session->metadata_cache->lock);
-       WARN_ON_ONCE(!session->metadata_cache->producing);
-       session->metadata_cache->producing--;
-       mutex_unlock(&session->metadata_cache->lock);
+       WARN_ON_ONCE(!atomic_read(&session->metadata_cache->producing));
+       if (atomic_dec_return(&session->metadata_cache->producing) == 0) {
+               struct lttng_metadata_stream *stream;
+
+               list_for_each_entry(stream, &session->metadata_cache->metadata_stream, list)
+                       wake_up_interruptible(&stream->read_wait);
+               mutex_unlock(&session->metadata_cache->lock);
+       }
 }
 
 /*
@@ -1717,9 +1722,8 @@ int lttng_metadata_printf(struct lttng_session *session,
        char *str;
        size_t len;
        va_list ap;
-       struct lttng_metadata_stream *stream;
 
-       WARN_ON_ONCE(!READ_ONCE(session->active));
+       WARN_ON_ONCE(!LTTNG_READ_ONCE(session->active));
 
        va_start(ap, fmt);
        str = kvasprintf(GFP_KERNEL, fmt, ap);
@@ -1728,8 +1732,7 @@ int lttng_metadata_printf(struct lttng_session *session,
                return -ENOMEM;
 
        len = strlen(str);
-       mutex_lock(&session->metadata_cache->lock);
-       session->metadata_cache->producing++;
+       WARN_ON_ONCE(!atomic_read(&session->metadata_cache->producing));
        if (session->metadata_cache->metadata_written + len >
                        session->metadata_cache->cache_alloc) {
                char *tmp_cache_realloc;
@@ -1755,18 +1758,11 @@ int lttng_metadata_printf(struct lttng_session *session,
                        session->metadata_cache->metadata_written,
                        str, len);
        session->metadata_cache->metadata_written += len;
-       session->metadata_cache->producing--;
-       mutex_unlock(&session->metadata_cache->lock);
        kfree(str);
 
-       list_for_each_entry(stream, &session->metadata_cache->metadata_stream, list)
-               wake_up_interruptible(&stream->read_wait);
-
        return 0;
 
 err:
-       session->metadata_cache->producing--;
-       mutex_unlock(&session->metadata_cache->lock);
        kfree(str);
        return -ENOMEM;
 }
@@ -2351,7 +2347,7 @@ int _lttng_event_metadata_statedump(struct lttng_session *session,
 {
        int ret = 0;
 
-       if (event->metadata_dumped || !READ_ONCE(session->active))
+       if (event->metadata_dumped || !LTTNG_READ_ONCE(session->active))
                return 0;
        if (chan->channel_type == METADATA_CHANNEL)
                return 0;
@@ -2423,7 +2419,7 @@ int _lttng_channel_metadata_statedump(struct lttng_session *session,
 {
        int ret = 0;
 
-       if (chan->metadata_dumped || !READ_ONCE(session->active))
+       if (chan->metadata_dumped || !LTTNG_READ_ONCE(session->active))
                return 0;
 
        if (chan->channel_type == METADATA_CHANNEL)
@@ -2650,7 +2646,7 @@ int _lttng_session_metadata_statedump(struct lttng_session *session)
        struct lttng_event *event;
        int ret = 0;
 
-       if (!READ_ONCE(session->active))
+       if (!LTTNG_READ_ONCE(session->active))
                return 0;
 
        lttng_metadata_begin(session);
This page took 0.025362 seconds and 4 git commands to generate.