diff --git a/sys/dev/xen/console/console.c b/sys/dev/xen/console/console.c index ac8ebac9edb..5e14d486b5d 100644 --- a/sys/dev/xen/console/console.c +++ b/sys/dev/xen/console/console.c @@ -76,17 +76,17 @@ static unsigned int wc, wp; /* write_cons, write_prod */ #define XCUNIT(x) (dev2unit(x)) #define ISTTYOPEN(tp) ((tp) && ((tp)->t_state & TS_ISOPEN)) #define CN_LOCK_INIT(x, _name) \ - mtx_init(&x, _name, NULL, MTX_DEF|MTX_RECURSE) + mtx_init(&x, _name, NULL, MTX_SPIN|MTX_RECURSE) #define CN_LOCK(l) \ do { \ if (panicstr == NULL) \ - mtx_lock(&(l)); \ + mtx_lock_spin(&(l)); \ } while (0) #define CN_UNLOCK(l) \ do { \ if (panicstr == NULL) \ - mtx_unlock(&(l)); \ + mtx_unlock_spin(&(l)); \ } while (0) #define CN_LOCK_ASSERT(x) mtx_assert(&x, MA_OWNED) #define CN_LOCK_DESTROY(x) mtx_destroy(&x) diff --git a/sys/dev/xen/console/xencons_ring.c b/sys/dev/xen/console/xencons_ring.c index fc9522e4f44..a86ec5e9c2c 100644 --- a/sys/dev/xen/console/xencons_ring.c +++ b/sys/dev/xen/console/xencons_ring.c @@ -89,7 +89,7 @@ xencons_handle_input(void *unused) struct xencons_interface *intf; XENCONS_RING_IDX cons, prod; - mtx_lock(&cn_mtx); + CN_LOCK(cn_mtx); intf = xencons_interface(); cons = intf->in_cons; @@ -107,7 +107,7 @@ xencons_handle_input(void *unused) notify_remote_via_evtchn(xen_start_info->console_evtchn); xencons_tx(); - mtx_unlock(&cn_mtx); + CN_UNLOCK(cn_mtx); } void diff --git a/sys/dev/xen/console/xencons_ring.h b/sys/dev/xen/console/xencons_ring.h index fc97d95028e..7e3a64c9f6f 100644 --- a/sys/dev/xen/console/xencons_ring.h +++ b/sys/dev/xen/console/xencons_ring.h @@ -5,6 +5,17 @@ #ifndef _XENCONS_RING_H #define _XENCONS_RING_H +#define CN_LOCK(l) \ + do { \ + if (panicstr == NULL) \ + mtx_lock_spin(&(l)); \ + } while (0) +#define CN_UNLOCK(l) \ + do { \ + if (panicstr == NULL) \ + mtx_unlock_spin(&(l)); \ + } while (0) + int xencons_ring_init(void); int xencons_ring_send(const char *data, unsigned len); void xencons_rx(char *buf, unsigned len);