[coreboot-gerrit] Patch set updated for coreboot: 11beed7 snprintf: lockless operation

Vladimir Serbinenko (phcoder@gmail.com) gerrit at coreboot.org
Wed Nov 27 07:24:57 CET 2013


Vladimir Serbinenko (phcoder at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4288

-gerrit

commit 11beed7784a478334a9c944854e211dbaca945e4
Author: Vladimir Serbinenko <phcoder at gmail.com>
Date:   Tue Nov 26 21:48:57 2013 +0100

    snprintf: lockless operation
    
    Instead of having global variables put them on the stack.
    
    Change-Id: I462e3b245612ff2dfb077da1cbcc5ac88f8b8e48
    Signed-off-by: Vladimir Serbinenko <phcoder at gmail.com>
---
 src/console/vsprintf.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/console/vsprintf.c b/src/console/vsprintf.c
index 435401b..321ce81 100644
--- a/src/console/vsprintf.c
+++ b/src/console/vsprintf.c
@@ -20,32 +20,32 @@
  */
 
 #include <string.h>
-#include <smp/spinlock.h>
 #include <console/vtxprintf.h>
 #include <trace.h>
 
-DECLARE_SPIN_LOCK(vsprintf_lock)
-
-static char *str_buf;
+struct vsprintf_context
+{
+	char *str_buf;
+};
 
-static void str_tx_byte(unsigned char byte)
+static void str_tx_byte(unsigned char byte, void *data)
 {
-	*str_buf = byte;
-	str_buf++;
+	struct vsprintf_context *ctx = data;
+	*ctx->str_buf = byte;
+	ctx->str_buf++;
 }
 
 static int vsprintf(char *buf, const char *fmt, va_list args)
 {
 	int i;
+	struct vsprintf_context ctx;
 
 	DISABLE_TRACE;
-	spin_lock(&vsprintf_lock);
 
-	str_buf = buf;
-	i = vtxprintf(str_tx_byte, fmt, args);
-	*str_buf = '\0';
+	ctx.str_buf = buf;
+	i = vtxdprintf(str_tx_byte, fmt, args, &ctx);
+	*ctx.str_buf = '\0';
 
-	spin_unlock(&vsprintf_lock);
 	ENABLE_TRACE;
 
 	return i;



More information about the coreboot-gerrit mailing list