From owner-freebsd-current@FreeBSD.ORG Wed Aug 24 19:05:22 2005 Return-Path: X-Original-To: freebsd-current@freebsd.org Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0F95816A41F; Wed, 24 Aug 2005 19:05:22 +0000 (GMT) (envelope-from ume@mahoroba.org) Received: from ameno.mahoroba.org (gw4.mahoroba.org [218.45.22.175]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8512543D45; Wed, 24 Aug 2005 19:05:20 +0000 (GMT) (envelope-from ume@mahoroba.org) Received: from kasuga.mahoroba.org (IDENT:izPEQ5sAuavcCQSi6td0+DsrPNgxDbgUXmz9tPAhidbkeWIfY9uSZyEgrVWPs6Mk@kasuga.mahoroba.org [IPv6:3ffe:501:185b:8010:20b:97ff:fe2e:b521]) (user=ume mech=CRAM-MD5 bits=0) by ameno.mahoroba.org (8.13.3/8.13.3) with ESMTP/inet6 id j7OJ5C4p015310 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 25 Aug 2005 04:05:12 +0900 (JST) (envelope-from ume@mahoroba.org) Date: Thu, 25 Aug 2005 04:05:12 +0900 Message-ID: From: Hajimu UMEMOTO To: Giorgos Keramidas In-Reply-To: <20050824163054.GA646@orion.daedalusnetworks.priv> References: <20050824163054.GA646@orion.daedalusnetworks.priv> User-Agent: xcite1.38> Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.7 (=?ISO-8859-4?Q?Sanj=F2?=) APEL/10.6 Emacs/22.0.50 (i386-unknown-freebsd6.0) MULE/5.0 (SAKAKI) X-Operating-System: FreeBSD 6.0-BETA3 X-PGP-Key: http://www.imasy.or.jp/~ume/publickey.asc X-PGP-Fingerprint: 1F00 0B9E 2164 70FC 6DC5 BF5F 04E9 F086 BF90 71FE Organization: Internet Mutual Aid Society, YOKOHAMA MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by milter-greylist-2.0 (ameno.mahoroba.org [IPv6:3ffe:501:185b:8010::1]); Thu, 25 Aug 2005 04:05:13 +0900 (JST) X-Virus-Scanned: by amavisd-new X-Virus-Status: Clean X-Spam-Status: No, score=-5.8 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.0.4 X-Spam-Checker-Version: SpamAssassin 3.0.4 (2005-06-05) on ameno.mahoroba.org Cc: freebsd-current@freebsd.org Subject: Re: Recent CURRENT/i386 + acpi_thermal panic X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Aug 2005 19:05:22 -0000 Hi, >>>>> On Wed, 24 Aug 2005 19:30:54 +0300 >>>>> Giorgos Keramidas said: keramida> Recent CURRENT/i386 panics randomly at boot time at (manual copy of the keramida> console output, so there may be some errors in the numbers copied): keramida> msleep(c1a761d4,0,54,c0986ce0,0) at msleep+0x6e keramida> acpi_tz_cooling_thread(c1a76100,d5248d38,c1a76100,c09770bc,0 at acpi_tz_cooling_thread+0x58 Umm, the fifth argument to msleep() is zero. It means sc->tz_zone.tsp is zero. But, it is tested not to zero before invoking acpi_tz_cooling_thread(). Perhaps, it is cleared some where later. keramida> Any ideas why this happens "most of the time", every time I boot? Does this patch work for you for workaround? It changes to use an initial value of sc->tz_zone.tsp, and don't use updated value. Index: acpi_thermal.c diff -u -p acpi_thermal.c.orig acpi_thermal.c --- acpi_thermal.c.orig Thu Aug 18 02:01:25 2005 +++ acpi_thermal.c Thu Aug 25 03:41:53 2005 @@ -117,6 +117,7 @@ struct acpi_tz_softc { int tz_cooling_active; int tz_cooling_updated; int tz_cooling_saved_freq; + int tz_cooling_tsp; }; #define CPUFREQ_MAX_LEVELS 64 /* XXX cpufreq should export this */ @@ -282,6 +283,8 @@ acpi_tz_attach(device_t dev) OID_AUTO, "_ACx", CTLFLAG_RD, &sc->tz_zone.ac, sizeof(sc->tz_zone.ac), "IK", ""); + sc->tz_cooling_tsp = sc->tz_zone.tsp; + /* * Create thread to service all of the thermal zones. Register * our power profile event handler. @@ -299,7 +302,7 @@ acpi_tz_attach(device_t dev) /* Create a thread to handle passive cooling for each zone if enabled. */ if (sc->tz_cooling_enabled) { - if (acpi_tz_cooling_is_available(sc)) { + if (acpi_tz_cooling_is_available(sc) && sc->tz_cooling_tsp > 0) { error = acpi_tz_cooling_thread_start(sc); if (error != 0) { sc->tz_cooling_enabled = FALSE; @@ -665,7 +668,7 @@ acpi_tz_cooling_sysctl(SYSCTL_HANDLER_AR return (EINVAL); if (enabled) { - if (acpi_tz_cooling_is_available(sc)) + if (acpi_tz_cooling_is_available(sc) && sc->tz_cooling_tsp > 0) error = acpi_tz_cooling_thread_start(sc); else error = ENODEV; @@ -1003,7 +1006,7 @@ acpi_tz_cooling_thread(void *arg) } temperature = sc->tz_temperature; tsleep(&sc->tz_cooling_proc, PZERO, "cooling", - hz * sc->tz_zone.tsp / 10); + hz * sc->tz_cooling_tsp / 10); } if (sc->tz_cooling_active) { acpi_tz_cpufreq_restore(sc); Sincerely, -- Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan ume@mahoroba.org ume@{,jp.}FreeBSD.org http://www.imasy.org/~ume/