Page MenuHomeFreeBSD

D57442.id179634.diff
No OneTemporary

D57442.id179634.diff

diff --git a/sys/dev/vt/vt_buf.c b/sys/dev/vt/vt_buf.c
--- a/sys/dev/vt/vt_buf.c
+++ b/sys/dev/vt/vt_buf.c
@@ -45,6 +45,7 @@
#define VTBUF_LOCK(vb) mtx_lock_spin(&(vb)->vb_lock)
#define VTBUF_UNLOCK(vb) mtx_unlock_spin(&(vb)->vb_lock)
+#define VTBUF_LOCK_OWNED(vb) mtx_owned(&(vb)->vb_lock)
#define POS_INDEX(c, r) (((r) << 12) + (c))
#define POS_COPY(d, s) do { \
@@ -740,9 +741,19 @@
area.tr_end.tp_col = vb->vb_scr_size.tp_col;
area.tr_end.tp_row = MAX(s, e) + 1;
- VTBUF_LOCK(vb);
- vtbuf_dirty(vb, &area);
- VTBUF_UNLOCK(vb);
+ /*
+ * If the request originates from a keyboard, the vtbuf is
+ * locked by teken for the entire duration of the request.
+ * For all other sources, we avoid holding the spinlock for
+ * extended periods.
+ */
+ if (VTBUF_LOCK_OWNED(vb)) {
+ vtbuf_dirty(vb, &area);
+ } else {
+ VTBUF_LOCK(vb);
+ vtbuf_dirty(vb, &area);
+ VTBUF_UNLOCK(vb);
+ }
}
}

File Metadata

Mime Type
text/plain
Expires
Wed, Jun 17, 10:00 PM (5 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33917336
Default Alt Text
D57442.id179634.diff (932 B)

Event Timeline