From owner-svn-src-all@freebsd.org Fri Dec 20 17:15:10 2019 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 89D721DED56; Fri, 20 Dec 2019 17:15:10 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 47fb3L36Rvz4BYv; Fri, 20 Dec 2019 17:15:10 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 61BFE1F90; Fri, 20 Dec 2019 17:15:10 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id xBKHFAEM049329; Fri, 20 Dec 2019 17:15:10 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id xBKHFAfd049327; Fri, 20 Dec 2019 17:15:10 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201912201715.xBKHFAfd049327@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Fri, 20 Dec 2019 17:15:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r355937 - head/sys/dev/vt X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/sys/dev/vt X-SVN-Commit-Revision: 355937 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Dec 2019 17:15:10 -0000 Author: kevans Date: Fri Dec 20 17:15:09 2019 New Revision: 355937 URL: https://svnweb.freebsd.org/changeset/base/355937 Log: vt: store a pointer to the keyboard instead of index This effectively reverts r355935, but is functionally equivalent. We gain no benefit from storing the index and repeatedly fetching the keyboard with `kbd_get_keyboard` when we need it. We'll be notified when it's going away so we can clean up the pointer. All existing references were trivially converted. Only once instance actually needed the index. Modified: head/sys/dev/vt/vt.h head/sys/dev/vt/vt_core.c Modified: head/sys/dev/vt/vt.h ============================================================================== --- head/sys/dev/vt/vt.h Fri Dec 20 16:22:14 2019 (r355936) +++ head/sys/dev/vt/vt.h Fri Dec 20 17:15:09 2019 (r355937) @@ -158,7 +158,7 @@ struct vt_device { #define VDF_QUIET_BELL 0x80 /* Disable bell. */ #define VDF_SUSPENDED 0x100 /* Device has been suspended. */ #define VDF_DOWNGRADE 0x8000 /* The driver is being downgraded. */ - int vd_keyboard; /* (G) Keyboard index. */ + struct keyboard *vd_keyboard; /* (G) Keyboard. */ unsigned int vd_kbstate; /* (?) Device unit. */ unsigned int vd_unit; /* (c) Device unit. */ int vd_altbrk; /* (?) Alt break seq. state */ Modified: head/sys/dev/vt/vt_core.c ============================================================================== --- head/sys/dev/vt/vt_core.c Fri Dec 20 16:22:14 2019 (r355936) +++ head/sys/dev/vt/vt_core.c Fri Dec 20 17:15:09 2019 (r355937) @@ -605,8 +605,7 @@ vt_window_switch(struct vt_window *vw) /* Restore per-window keyboard mode. */ mtx_lock(&Giant); - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd != NULL) { + if ((kbd = vd->vd_keyboard) != NULL) { if (curvw->vw_kbdmode == K_XLATE) vt_save_kbd_state(curvw, kbd); @@ -982,7 +981,7 @@ vt_kbdevent(keyboard_t *kbd, int event, void *arg) break; case KBDIO_UNLOADING: mtx_lock(&Giant); - vd->vd_keyboard = -1; + vd->vd_keyboard = NULL; kbd_release(kbd, (void *)vd); mtx_unlock(&Giant); return (0); @@ -1039,19 +1038,14 @@ vt_allocate_keyboard(struct vt_device *vd) DPRINTF(20, "%s: no kbdmux allocated\n", __func__); idx0 = kbd_allocate("*", -1, vd, vt_kbdevent, vd); if (idx0 < 0) { - /* - * We don't have a keyboard yet, so we must invalidate - * vd->vd_keyboard so that later keyboard attachment can - * succeed. Any value >= 0 can accidentally match a - * keyboard. - */ - vd->vd_keyboard = -1; DPRINTF(10, "%s: No keyboard found.\n", __func__); return (-1); } + k0 = kbd_get_keyboard(idx0); } - vd->vd_keyboard = idx0; - DPRINTF(20, "%s: vd_keyboard = %d\n", __func__, vd->vd_keyboard); + vd->vd_keyboard = k0; + DPRINTF(20, "%s: vd_keyboard = %d\n", __func__, + vd->vd_keyboard->kb_index); if (vd->vd_curwindow == &vt_conswindow) { for (i = 0; i < grabbed; ++i) @@ -1540,8 +1534,7 @@ vtterm_cngetc(struct terminal *tm) } /* Stripped down keyboard handler. */ - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd == NULL) + if ((kbd = vd->vd_keyboard) == NULL) return (-1); /* Force keyboard input mode to K_XLATE */ @@ -1617,8 +1610,7 @@ vtterm_cngrab(struct terminal *tm) if (!cold) vt_window_switch(vw); - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd == NULL) + if ((kbd = vd->vd_keyboard) == NULL) return; if (vw->vw_grabbed++ > 0) @@ -1648,8 +1640,7 @@ vtterm_cnungrab(struct terminal *tm) vw = tm->tm_softc; vd = vw->vw_device; - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd == NULL) + if ((kbd = vd->vd_keyboard) == NULL) return; if (--vw->vw_grabbed > 0) @@ -2189,8 +2180,7 @@ skip_thunk: error = 0; mtx_lock(&Giant); - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd != NULL) + if ((kbd = vd->vd_keyboard) != NULL) error = kbdd_ioctl(kbd, cmd, data); mtx_unlock(&Giant); if (error == ENOIOCTL) { @@ -2208,8 +2198,7 @@ skip_thunk: if (vw == vd->vd_curwindow) { mtx_lock(&Giant); - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd != NULL) + if ((kbd = vd->vd_keyboard) != NULL) error = vt_save_kbd_state(vw, kbd); mtx_unlock(&Giant); @@ -2234,8 +2223,7 @@ skip_thunk: error = 0; if (vw == vd->vd_curwindow) { mtx_lock(&Giant); - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd != NULL) + if ((kbd = vd->vd_keyboard) != NULL) error = vt_update_kbd_state(vw, kbd); mtx_unlock(&Giant); } @@ -2247,8 +2235,7 @@ skip_thunk: if (vw == vd->vd_curwindow) { mtx_lock(&Giant); - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd != NULL) + if ((kbd = vd->vd_keyboard) != NULL) error = vt_save_kbd_leds(vw, kbd); mtx_unlock(&Giant); @@ -2273,8 +2260,7 @@ skip_thunk: error = 0; if (vw == vd->vd_curwindow) { mtx_lock(&Giant); - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd != NULL) + if ((kbd = vd->vd_keyboard) != NULL) error = vt_update_kbd_leds(vw, kbd); mtx_unlock(&Giant); } @@ -2290,8 +2276,7 @@ skip_thunk: if (vw == vd->vd_curwindow) { mtx_lock(&Giant); - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd != NULL) + if ((kbd = vd->vd_keyboard) != NULL) error = vt_save_kbd_mode(vw, kbd); mtx_unlock(&Giant); @@ -2316,8 +2301,7 @@ skip_thunk: error = 0; if (vw == vd->vd_curwindow) { mtx_lock(&Giant); - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd != NULL) + if ((kbd = vd->vd_keyboard) != NULL) error = vt_update_kbd_mode(vw, kbd); mtx_unlock(&Giant); } @@ -2362,8 +2346,7 @@ skip_thunk: if (vw == vd->vd_curwindow) { mtx_lock(&Giant); - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd != NULL) + if ((kbd = vd->vd_keyboard) != NULL) vt_save_kbd_state(vw, kbd); mtx_unlock(&Giant); } @@ -2482,7 +2465,8 @@ skip_thunk: case CONS_SETKBD: /* set the new keyboard */ mtx_lock(&Giant); error = 0; - if (vd->vd_keyboard != *(int *)data) { + if (vd->vd_keyboard == NULL || + vd->vd_keyboard->kb_index != *(int *)data) { kbd = kbd_get_keyboard(*(int *)data); if (kbd == NULL) { mtx_unlock(&Giant); @@ -2491,13 +2475,11 @@ skip_thunk: i = kbd_allocate(kbd->kb_name, kbd->kb_unit, (void *)vd, vt_kbdevent, vd); if (i >= 0) { - if (vd->vd_keyboard != -1) { - kbd = kbd_get_keyboard(vd->vd_keyboard); + if ((kbd = vd->vd_keyboard) != NULL) { vt_save_kbd_state(vd->vd_curwindow, kbd); kbd_release(kbd, (void *)vd); } - kbd = kbd_get_keyboard(i); - vd->vd_keyboard = i; + kbd = vd->vd_keyboard = kbd_get_keyboard(i); vt_update_kbd_mode(vd->vd_curwindow, kbd); vt_update_kbd_state(vd->vd_curwindow, kbd); @@ -2510,16 +2492,11 @@ skip_thunk: case CONS_RELKBD: /* release the current keyboard */ mtx_lock(&Giant); error = 0; - if (vd->vd_keyboard != -1) { - kbd = kbd_get_keyboard(vd->vd_keyboard); - if (kbd == NULL) { - mtx_unlock(&Giant); - return (EINVAL); - } + if ((kbd = vd->vd_keyboard) != NULL) { vt_save_kbd_state(vd->vd_curwindow, kbd); error = kbd_release(kbd, (void *)vd); if (error == 0) { - vd->vd_keyboard = -1; + vd->vd_keyboard = NULL; } } mtx_unlock(&Giant);