Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Aug 2016 08:58:55 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r304124 - stable/11/sys/dev/usb/input
Message-ID:  <201608150858.u7F8wton057140@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Mon Aug 15 08:58:55 2016
New Revision: 304124
URL: https://svnweb.freebsd.org/changeset/base/304124

Log:
  MFC r303765:
  Keep a reference count on USB keyboard polling to allow recursive
  cngrab() during a panic for example, similar to what the AT-keyboard
  driver is doing.
  
  Found by:	Bruce Evans <brde@optusnet.com.au>

Modified:
  stable/11/sys/dev/usb/input/ukbd.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/usb/input/ukbd.c
==============================================================================
--- stable/11/sys/dev/usb/input/ukbd.c	Mon Aug 15 08:56:25 2016	(r304123)
+++ stable/11/sys/dev/usb/input/ukbd.c	Mon Aug 15 08:58:55 2016	(r304124)
@@ -198,6 +198,7 @@ struct ukbd_softc {
 	int	sc_mode;		/* input mode (K_XLATE,K_RAW,K_CODE) */
 	int	sc_state;		/* shift/lock key state */
 	int	sc_accents;		/* accent key index (> 0) */
+	int	sc_polling;		/* polling recursion count */
 	int	sc_led_size;
 	int	sc_kbd_size;
 
@@ -1983,7 +1984,16 @@ ukbd_poll(keyboard_t *kbd, int on)
 	struct ukbd_softc *sc = kbd->kb_data;
 
 	UKBD_LOCK();
-	if (on) {
+	/*
+	 * Keep a reference count on polling to allow recursive
+	 * cngrab() during a panic for example.
+	 */
+	if (on)
+		sc->sc_polling++;
+	else
+		sc->sc_polling--;
+
+	if (sc->sc_polling != 0) {
 		sc->sc_flags |= UKBD_FLAG_POLLING;
 		sc->sc_poll_thread = curthread;
 	} else {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201608150858.u7F8wton057140>