From owner-svn-src-user@FreeBSD.ORG Mon Nov 18 22:39:34 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id C706CE1C; Mon, 18 Nov 2013 22:39:34 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id B582A2C2E; Mon, 18 Nov 2013 22:39:34 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rAIMdYAn042118; Mon, 18 Nov 2013 22:39:34 GMT (envelope-from ray@svn.freebsd.org) Received: (from ray@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rAIMdYIY042117; Mon, 18 Nov 2013 22:39:34 GMT (envelope-from ray@svn.freebsd.org) Message-Id: <201311182239.rAIMdYIY042117@svn.freebsd.org> From: Aleksandr Rybalko Date: Mon, 18 Nov 2013 22:39:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r258325 - user/ed/newcons/sys/dev/vt X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Nov 2013 22:39:34 -0000 Author: ray Date: Mon Nov 18 22:39:34 2013 New Revision: 258325 URL: http://svnweb.freebsd.org/changeset/base/258325 Log: Switch to use atomic ops for VT window flags, because some modifications can come from another thread. Sponsored by: The FreeBSD Foundation Modified: user/ed/newcons/sys/dev/vt/vt_core.c Modified: user/ed/newcons/sys/dev/vt/vt_core.c ============================================================================== --- user/ed/newcons/sys/dev/vt/vt_core.c Mon Nov 18 22:37:01 2013 (r258324) +++ user/ed/newcons/sys/dev/vt/vt_core.c Mon Nov 18 22:39:34 2013 (r258325) @@ -355,7 +355,7 @@ vt_scrollmode_kbdevent(struct vt_window /* Turn scrolling off. */ vt_scroll(vw, 0, VHS_END); VTBUF_SLCK_DISABLE(&vw->vw_buf); - vw->vw_flags &= ~VWF_SCROLL; + atomic_clear_int(&vw->vw_flags, VWF_SCROLL); break; } case FKEY | F(49): /* Home key. */ @@ -438,11 +438,11 @@ vt_processkey(keyboard_t *kbd, struct vt VT_LOCK(vd); if (state & SLKED) { /* Turn scrolling on. */ - vw->vw_flags |= VWF_SCROLL; + atomic_set_int(&vw->vw_flags, VWF_SCROLL); VTBUF_SLCK_ENABLE(&vw->vw_buf); } else { /* Turn scrolling off. */ - vw->vw_flags &= ~VWF_SCROLL; + atomic_clear_int(&vw->vw_flags, VWF_SCROLL); VTBUF_SLCK_DISABLE(&vw->vw_buf); vt_scroll(vw, 0, VHS_END); } @@ -889,12 +889,12 @@ vtterm_cngetc(struct terminal *tm) kbdd_ioctl(kbd, KDGKBSTATE, (caddr_t)&state); if (state & SLKED) { /* Turn scrolling on. */ - vw->vw_flags |= VWF_SCROLL; + atomic_set_int(&vw->vw_flags, VWF_SCROLL); VTBUF_SLCK_ENABLE(&vw->vw_buf); } else { /* Turn scrolling off. */ vt_scroll(vw, 0, VHS_END); - vw->vw_flags &= ~VWF_SCROLL; + atomic_clear_int(&vw->vw_flags, VWF_SCROLL); VTBUF_SLCK_DISABLE(&vw->vw_buf); } break; @@ -934,9 +934,9 @@ vtterm_opened(struct terminal *tm, int o VT_LOCK(vd); vd->vd_flags &= ~VDF_SPLASH; if (opened) - vw->vw_flags |= VWF_OPENED; + atomic_set_int(&vw->vw_flags, VWF_OPENED); else { - vw->vw_flags &= ~VWF_OPENED; + atomic_clear_int(&vw->vw_flags, VWF_OPENED); /* TODO: finish ACQ/REL */ } VT_UNLOCK(vd); @@ -974,7 +974,7 @@ vt_change_font(struct vt_window *vw, str VT_UNLOCK(vd); return (ENOTTY); } - vw->vw_flags |= VWF_BUSY; + atomic_set_int(&vw->vw_flags, VWF_BUSY); VT_UNLOCK(vd); vt_termsize(vd, vf, &size); @@ -997,7 +997,7 @@ vt_change_font(struct vt_window *vw, str /* Force a full redraw the next timer tick. */ if (vd->vd_curwindow == vw) vd->vd_flags |= VDF_INVALID; - vw->vw_flags &= ~VWF_BUSY; + atomic_clear_int(&vw->vw_flags, VWF_BUSY); VT_UNLOCK(vd); return (0); } @@ -1034,7 +1034,7 @@ signal_vt_rel(struct vt_window *vw) vw->vw_pid = 0; return TRUE; } - vw->vw_flags |= VWF_SWWAIT_REL; + atomic_set_int(&vw->vw_flags, VWF_SWWAIT_REL); PROC_LOCK(vw->vw_proc); kern_psignal(vw->vw_proc, vw->vw_smode.relsig); PROC_UNLOCK(vw->vw_proc); @@ -1055,7 +1055,7 @@ signal_vt_acq(struct vt_window *vw) vw->vw_pid = 0; return TRUE; } - vw->vw_flags |= VWF_SWWAIT_ACQ; + atomic_set_int(&vw->vw_flags, VWF_SWWAIT_ACQ); PROC_LOCK(vw->vw_proc); kern_psignal(vw->vw_proc, vw->vw_smode.acqsig); PROC_UNLOCK(vw->vw_proc); @@ -1068,7 +1068,7 @@ finish_vt_rel(struct vt_window *vw, int { if (vw->vw_flags & VWF_SWWAIT_REL) { - vw->vw_flags &= ~VWF_SWWAIT_REL; + atomic_clear_int(&vw->vw_flags, VWF_SWWAIT_REL); if (release) { callout_drain(&vw->vw_proc_dead_timer); vt_late_window_switch(vw->vw_switch_to); @@ -1083,7 +1083,7 @@ finish_vt_acq(struct vt_window *vw) { if (vw->vw_flags & VWF_SWWAIT_ACQ) { - vw->vw_flags &= ~VWF_SWWAIT_ACQ; + atomic_clear_int(&vw->vw_flags, VWF_SWWAIT_ACQ); return 0; } return EINVAL; @@ -1392,9 +1392,9 @@ vtterm_ioctl(struct terminal *tm, u_long case VT_LOCKSWITCH: /* TODO: Check current state, switching can be in progress. */ if ((*(int *)data) & 0x01) - vw->vw_flags |= VWF_VTYLOCK; + atomic_set_int(&vw->vw_flags, VWF_VTYLOCK); else - vw->vw_flags &= ~VWF_VTYLOCK; + atomic_clear_int(&vw->vw_flags, VWF_VTYLOCK); case VT_OPENQRY: { unsigned int i;