From owner-svn-src-head@FreeBSD.ORG Sat Mar 2 13:08:14 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 92720F24; Sat, 2 Mar 2013 13:08:14 +0000 (UTC) (envelope-from marius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 766FA9BB; Sat, 2 Mar 2013 13:08:14 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id r22D8Efi090460; Sat, 2 Mar 2013 13:08:14 GMT (envelope-from marius@svn.freebsd.org) Received: (from marius@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id r22D8E0C090459; Sat, 2 Mar 2013 13:08:14 GMT (envelope-from marius@svn.freebsd.org) Message-Id: <201303021308.r22D8E0C090459@svn.freebsd.org> From: Marius Strobl Date: Sat, 2 Mar 2013 13:08:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r247621 - head/sys/sparc64/sbus X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Mar 2013 13:08:14 -0000 Author: marius Date: Sat Mar 2 13:08:13 2013 New Revision: 247621 URL: http://svnweb.freebsd.org/changeset/base/247621 Log: - Revert the part of r247601 which turned the overtemperature and power fail interrupt shutdown handlers into filters. Shutdown_nice(9) acquires a sleep lock, which filters shouldn't do. It also seems that kern_reboot(9) still may require Giant to be hold. - Correct an incorrect argument to shutdown_nice(9). Submitted by: bde Modified: head/sys/sparc64/sbus/sbus.c Modified: head/sys/sparc64/sbus/sbus.c ============================================================================== --- head/sys/sparc64/sbus/sbus.c Sat Mar 2 13:04:58 2013 (r247620) +++ head/sys/sparc64/sbus/sbus.c Sat Mar 2 13:08:13 2013 (r247621) @@ -152,8 +152,8 @@ static void sbus_intr_assign(void *); static void sbus_intr_clear(void *); static int sbus_find_intrmap(struct sbus_softc *, u_int, bus_addr_t *, bus_addr_t *); -static driver_filter_t sbus_overtemp; -static driver_filter_t sbus_pwrfail; +static driver_intr_t sbus_overtemp; +static driver_intr_t sbus_pwrfail; static int sbus_print_res(struct sbus_devinfo *); static device_method_t sbus_methods[] = { @@ -410,7 +410,7 @@ sbus_attach(device_t dev) INTVEC(SYSIO_READ8(sc, SBR_THERM_INT_MAP)) != vec || intr_vectors[vec].iv_ic != &sbus_ic || bus_setup_intr(dev, sc->sc_ot_ires, INTR_TYPE_MISC | INTR_BRIDGE, - sbus_overtemp, NULL, sc, &sc->sc_ot_ihand) != 0) + NULL, sbus_overtemp, sc, &sc->sc_ot_ihand) != 0) panic("%s: failed to set up temperature interrupt", __func__); i = 3; sc->sc_pf_ires = bus_alloc_resource_any(dev, SYS_RES_IRQ, &i, @@ -420,7 +420,7 @@ sbus_attach(device_t dev) INTVEC(SYSIO_READ8(sc, SBR_POWER_INT_MAP)) != vec || intr_vectors[vec].iv_ic != &sbus_ic || bus_setup_intr(dev, sc->sc_pf_ires, INTR_TYPE_MISC | INTR_BRIDGE, - sbus_pwrfail, NULL, sc, &sc->sc_pf_ihand) != 0) + NULL, sbus_pwrfail, sc, &sc->sc_pf_ihand) != 0) panic("%s: failed to set up power fail interrupt", __func__); /* Initialize the counter-timer. */ @@ -897,33 +897,31 @@ sbus_get_devinfo(device_t bus, device_t * This handles the interrupt and powers off the machine. * The same needs to be done to PCI controller drivers. */ -static int +static void sbus_overtemp(void *arg __unused) { static int shutdown; /* As the interrupt is cleared we may be called multiple times. */ if (shutdown != 0) - return (FILTER_HANDLED); + return; shutdown++; printf("DANGER: OVER TEMPERATURE detected\nShutting down NOW.\n"); shutdown_nice(RB_POWEROFF); - return (FILTER_HANDLED); } /* Try to shut down in time in case of power failure. */ -static int +static void sbus_pwrfail(void *arg __unused) { static int shutdown; /* As the interrupt is cleared we may be called multiple times. */ if (shutdown != 0) - return (FILTER_HANDLED); + return; shutdown++; printf("Power failure detected\nShutting down NOW.\n"); - shutdown_nice(FILTER_HANDLED); - return (FILTER_HANDLED); + shutdown_nice(RB_POWEROFF); } static int