diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2010-05-24 10:49:57 -0500 |
---|---|---|
committer | Patrick Williams <iawillia@us.ibm.com> | 2010-05-24 10:49:57 -0500 |
commit | e3151c49a80aa6205c4bbe80683027c8444725bb (patch) | |
tree | 2cb29cdb861c0f8bff991574b5979b39066350bd | |
parent | 884936a89f9f675baf62306053fa35d58a022bff (diff) | |
download | talos-hostboot-e3151c49a80aa6205c4bbe80683027c8444725bb.tar.gz talos-hostboot-e3151c49a80aa6205c4bbe80683027c8444725bb.zip |
Add lock-free, safe console code.
-rw-r--r-- | src/kernel/console.C | 9 |
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; } } |