svn commit: r192005 - projects/releng_7_xen/sys/dev/xen/console
Kip Macy
kmacy at FreeBSD.org
Tue May 12 01:00:30 UTC 2009
Author: kmacy
Date: Tue May 12 01:00:30 2009
New Revision: 192005
URL: http://svn.freebsd.org/changeset/base/192005
Log:
convert xen console lock to a spin lock to handle case of being called from interrupt context
Modified:
projects/releng_7_xen/sys/dev/xen/console/console.c
projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c
projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h
Modified: projects/releng_7_xen/sys/dev/xen/console/console.c
==============================================================================
--- projects/releng_7_xen/sys/dev/xen/console/console.c Mon May 11 23:03:15 2009 (r192004)
+++ projects/releng_7_xen/sys/dev/xen/console/console.c Tue May 12 01:00:30 2009 (r192005)
@@ -77,18 +77,8 @@ static unsigned int wc, wp; /* write_con
#define XCUNIT(x) (minor(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)); \
- } while (0)
-#define CN_UNLOCK(l) \
- do { \
- if (panicstr == NULL) \
- mtx_unlock(&(l)); \
- } while (0)
#define CN_LOCK_ASSERT(x) mtx_assert(&x, MA_OWNED)
#define CN_LOCK_DESTROY(x) mtx_destroy(&x)
Modified: projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c
==============================================================================
--- projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c Mon May 11 23:03:15 2009 (r192004)
+++ projects/releng_7_xen/sys/dev/xen/console/xencons_ring.c Tue May 12 01:00:30 2009 (r192005)
@@ -83,25 +83,27 @@ 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;
prod = intf->in_prod;
-
+ CN_UNLOCK(cn_mtx);
+
/* XXX needs locking */
while (cons != prod) {
xencons_rx(intf->in + MASK_XENCONS_IDX(cons, intf->in), 1);
cons++;
}
+ CN_LOCK(cn_mtx);
mb();
intf->in_cons = cons;
notify_remote_via_evtchn(xen_start_info->console_evtchn);
xencons_tx();
- mtx_unlock(&cn_mtx);
+ CN_UNLOCK(cn_mtx);
}
void
Modified: projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h
==============================================================================
--- projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h Mon May 11 23:03:15 2009 (r192004)
+++ projects/releng_7_xen/sys/dev/xen/console/xencons_ring.h Tue May 12 01:00:30 2009 (r192005)
@@ -5,6 +5,18 @@
#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);
More information about the svn-src-projects
mailing list