From owner-svn-src-all@FreeBSD.ORG Wed Jul 20 04:57:41 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 21A12106566B; Wed, 20 Jul 2011 04:57:41 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 111408FC13; Wed, 20 Jul 2011 04:57:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6K4veFQ001683; Wed, 20 Jul 2011 04:57:40 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6K4vets001681; Wed, 20 Jul 2011 04:57:40 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201107200457.p6K4vets001681@svn.freebsd.org> From: Hans Petter Selasky Date: Wed, 20 Jul 2011 04:57:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224223 - stable/8/sys/dev/usb/input X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 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: Wed, 20 Jul 2011 04:57:41 -0000 Author: hselasky Date: Wed Jul 20 04:57:40 2011 New Revision: 224223 URL: http://svn.freebsd.org/changeset/base/224223 Log: MFC r223989: Fix for dump after shutdown with USB keyboard plugged in. Modified: stable/8/sys/dev/usb/input/ukbd.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/dev/usb/input/ukbd.c ============================================================================== --- stable/8/sys/dev/usb/input/ukbd.c Wed Jul 20 00:36:47 2011 (r224222) +++ stable/8/sys/dev/usb/input/ukbd.c Wed Jul 20 04:57:40 2011 (r224223) @@ -59,6 +59,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include #include #include @@ -386,6 +388,33 @@ ukbd_put_key(struct ukbd_softc *sc, uint } static void +ukbd_yield(void) +{ + struct thread *td = curthread; + uint32_t old_prio; + + DROP_GIANT(); + + thread_lock(td); + + /* get current priority */ + old_prio = td->td_base_pri; + + /* set new priority */ + sched_prio(td, td->td_user_pri); + + /* cause a task switch */ + mi_switch(SW_INVOL | SWT_RELINQUISH, NULL); + + /* restore priority */ + sched_prio(td, old_prio); + + thread_unlock(td); + + PICKUP_GIANT(); +} + +static void ukbd_do_poll(struct ukbd_softc *sc, uint8_t wait) { DPRINTFN(2, "polling\n"); @@ -396,8 +425,9 @@ ukbd_do_poll(struct ukbd_softc *sc, uint if (kdb_active == 0) { while (sc->sc_inputs == 0) { - /* make sure the USB code gets a chance to run */ - pause("UKBD", 1); + + /* give USB threads a chance to run */ + ukbd_yield(); /* check if we should wait */ if (!wait)