diff --git a/kernel/lib/cbuf/cbuf.cpp b/kernel/lib/cbuf/cbuf.cpp
index 48d0f38..44c8cd7 100644
--- a/kernel/lib/cbuf/cbuf.cpp
+++ b/kernel/lib/cbuf/cbuf.cpp
@@ -10,6 +10,7 @@
 #include <assert.h>
 #include <debug.h>
 #include <fbl/algorithm.h>
+#include <kernel/auto_lock.h>
 #include <kernel/event.h>
 #include <kernel/spinlock.h>
 #include <pow2.h>
@@ -19,8 +20,9 @@
 
 #define LOCAL_TRACE 0
 
-#define INC_POINTER(cbuf, ptr, inc) \
-    modpow2(((ptr) + (inc)), (cbuf)->len_pow2)
+static inline uint inc_pointer(const cbuf_t* cbuf, uint ptr, uint inc) {
+    return modpow2(ptr + inc, cbuf->len_pow2);
+}
 
 void cbuf_initialize(cbuf_t* cbuf, size_t len) {
     cbuf_initialize_etc(cbuf, len, malloc(len));
@@ -41,22 +43,21 @@
     LTRACEF("len %zu, len_pow2 %u\n", len, cbuf->len_pow2);
 }
 
-size_t cbuf_space_avail(cbuf_t* cbuf) {
-    uint consumed = modpow2((uint)(cbuf->head - cbuf->tail), cbuf->len_pow2);
+size_t cbuf_space_avail(const cbuf_t* cbuf) {
+    uint consumed = modpow2(cbuf->head - cbuf->tail, cbuf->len_pow2);
     return valpow2(cbuf->len_pow2) - consumed - 1;
 }
 
 size_t cbuf_write_char(cbuf_t* cbuf, char c) {
     DEBUG_ASSERT(cbuf);
 
-    spin_lock_saved_state_t state;
-    spin_lock_irqsave(&cbuf->lock, state);
+    AutoSpinLock guard(&cbuf->lock);
 
     size_t ret = 0;
     if (cbuf_space_avail(cbuf) > 0) {
         cbuf->buf[cbuf->head] = c;
 
-        cbuf->head = INC_POINTER(cbuf, cbuf->head, 1);
+        cbuf->head = inc_pointer(cbuf, cbuf->head, 1);
         ret = 1;
 
         if (cbuf->head != cbuf->tail) {
@@ -64,8 +65,6 @@
         }
     }
 
-    spin_unlock_irqrestore(&cbuf->lock, state);
-
     return ret;
 }
 
@@ -74,28 +73,28 @@
     DEBUG_ASSERT(c);
 
 retry:
-    if (block)
+    if (block) {
         event_wait(&cbuf->event);
-
-    spin_lock_saved_state_t state;
-    spin_lock_irqsave(&cbuf->lock, state);
-
-    // see if there's data available
-    size_t ret = 0;
-    if (cbuf->tail != cbuf->head) {
-
-        *c = cbuf->buf[cbuf->tail];
-        cbuf->tail = INC_POINTER(cbuf, cbuf->tail, 1);
-
-        if (cbuf->tail == cbuf->head) {
-            // we've emptied the buffer, unsignal the event
-            event_unsignal(&cbuf->event);
-        }
-
-        ret = 1;
     }
 
-    spin_unlock_irqrestore(&cbuf->lock, state);
+    size_t ret = 0;
+    {
+        AutoSpinLock guard(&cbuf->lock);
+
+        // see if there's data available
+        if (cbuf->tail != cbuf->head) {
+
+            *c = cbuf->buf[cbuf->tail];
+            cbuf->tail = inc_pointer(cbuf, cbuf->tail, 1);
+
+            if (cbuf->tail == cbuf->head) {
+                // we've emptied the buffer, unsignal the event
+                event_unsignal(&cbuf->event);
+            }
+
+            ret = 1;
+        }
+    }
 
     if (block && ret == 0) {
         goto retry;
diff --git a/kernel/lib/cbuf/include/lib/cbuf.h b/kernel/lib/cbuf/include/lib/cbuf.h
index 16425b9..dd6233c 100644
--- a/kernel/lib/cbuf/include/lib/cbuf.h
+++ b/kernel/lib/cbuf/include/lib/cbuf.h
@@ -53,7 +53,7 @@
  * @return The number of free space available in the cbuf (IOW - the maximum
  * number of bytes which can currently be written)
  */
-size_t cbuf_space_avail(cbuf_t* cbuf);
+size_t cbuf_space_avail(const cbuf_t* cbuf);
 
 /* special cases for dealing with a single char of data */
 size_t cbuf_read_char(cbuf_t* cbuf, char* c, bool block);
