summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2010-05-24 10:49:57 -0500
committerPatrick Williams <iawillia@us.ibm.com>2010-05-24 10:49:57 -0500
commite3151c49a80aa6205c4bbe80683027c8444725bb (patch)
tree2cb29cdb861c0f8bff991574b5979b39066350bd
parent884936a89f9f675baf62306053fa35d58a022bff (diff)
downloadtalos-hostboot-e3151c49a80aa6205c4bbe80683027c8444725bb.tar.gz
talos-hostboot-e3151c49a80aa6205c4bbe80683027c8444725bb.zip
Add lock-free, safe console code.
-rw-r--r--src/kernel/console.C9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/kernel/console.C b/src/kernel/console.C
index 2c33645fe..18286a283 100644
--- a/src/kernel/console.C
+++ b/src/kernel/console.C
@@ -11,10 +11,13 @@ Console::Console() : iv_pos(0), iv_buffer(kernel_printk_buffer)
int Console::putc(int c)
{
- if (BUFFER_SIZE > iv_pos)
+ if ('\b' == c)
{
- iv_buffer[iv_pos] = c;
- iv_pos++;
+ __sync_sub_and_fetch(&iv_pos, 1);
+ }
+ else if (BUFFER_SIZE > iv_pos)
+ {
+ iv_buffer[__sync_fetch_and_add(&iv_pos, 1)] = c;
}
}
OpenPOWER on IntegriCloud