[PATCH 9/9] relay

Chris Wilson chris at chris-wilson.co.uk
Tue Aug 14 20:32:01 UTC 2018


---
 kernel/relay.c | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/kernel/relay.c b/kernel/relay.c
index 9247741fa197..53a4dbe4b7ee 100644
--- a/kernel/relay.c
+++ b/kernel/relay.c
@@ -24,7 +24,6 @@
 #include <linux/splice.h>
 
 /* list of open channels, for cpu hotplug */
-static DEFINE_MUTEX(relay_channels_mutex);
 static LIST_HEAD(relay_channels);
 
 /*
@@ -610,9 +609,9 @@ struct rchan *relay_open(const char *base_filename,
 		if ((buf = *per_cpu_ptr(chan->buf, i)))
 			relay_close_buf(buf);
 	}
+	cpus_read_unlock();
 
 	kref_put(&chan->kref, relay_destroy_channel);
-	mutex_unlock(&relay_channels_mutex);
 	return NULL;
 }
 EXPORT_SYMBOL_GPL(relay_open);
@@ -659,15 +658,11 @@ int relay_late_setup_files(struct rchan *chan,
 	if (!chan || !base_filename)
 		return -EINVAL;
 
-	strlcpy(chan->base_filename, base_filename, NAME_MAX);
-
-	mutex_lock(&relay_channels_mutex);
 	/* Is chan already set up? */
-	if (unlikely(chan->has_base_filename)) {
-		mutex_unlock(&relay_channels_mutex);
+	if (unlikely(cmpxchg(&chan->has_base_filename, 0, 1)))
 		return -EEXIST;
-	}
-	chan->has_base_filename = 1;
+
+	strlcpy(chan->base_filename, base_filename, NAME_MAX);
 	chan->parent = parent;
 
 	if (chan->is_global) {
@@ -680,7 +675,6 @@ int relay_late_setup_files(struct rchan *chan,
 				err = 0;
 			}
 		}
-		mutex_unlock(&relay_channels_mutex);
 		return err;
 	}
 
@@ -721,7 +715,6 @@ int relay_late_setup_files(struct rchan *chan,
 			break;
 	}
 	put_cpu();
-	mutex_unlock(&relay_channels_mutex);
 
 	return err;
 }
-- 
2.18.0



More information about the Intel-gfx-trybot mailing list