Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Aug 2005 12:22:00 +0300
From:      Giorgos Keramidas <keramida@freebsd.org>
To:        Hajimu UMEMOTO <ume@freebsd.org>
Cc:        acpi@freebsd.org, freebsd-current@freebsd.org
Subject:   Re: Recent CURRENT/i386 + acpi_thermal panic
Message-ID:  <20050825092200.GA576@orion.daedalusnetworks.priv>
In-Reply-To: <yge64tusafc.wl%ume@mahoroba.org>
References:  <20050824163054.GA646@orion.daedalusnetworks.priv> <ygebr3njguv.wl%ume@mahoroba.org> <20050824210954.GA1046@gothmog.gr> <yge64tusafc.wl%ume@mahoroba.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2005-08-25 17:11, Hajimu UMEMOTO <ume@freebsd.org> wrote:
> keramida> The panic message, which I failed to copy was "sleeping without a mutex".
>
> Okay, the message is out when timo is zero.
>
> keramida> Thanks for the quick reply.  I'll give a try to your patch tomorrow
> keramida> morning, when I have access to that machine again.
>
> You are welcome.
> Perhaps, I found the cause.  sc->tz_zone is initialized before each
> retrieval of new value from BIOS.  It makes the period where
> sc->tz_zone.tsp is zero.
> Please try following patch, instead:

This patch seems to work fine here.  I've gone through at least 10
reboots (which was almost impossible with the system I use now before
the patch, without triggerring at least 4-5 panics).

Thank you :)

> Index: sys/dev/acpica/acpi_thermal.c
> diff -u -p sys/dev/acpica/acpi_thermal.c.orig sys/dev/acpica/acpi_thermal.c
> --- sys/dev/acpica/acpi_thermal.c.orig	Mon Aug 22 15:25:16 2005
> +++ sys/dev/acpica/acpi_thermal.c	Thu Aug 25 16:46:15 2005
> @@ -347,7 +347,14 @@ acpi_tz_establish(struct acpi_tz_softc *
>  	    AcpiOsFree(sc->tz_zone.al[i].Pointer);
>      if (sc->tz_zone.psl.Pointer != NULL)
>  	AcpiOsFree(sc->tz_zone.psl.Pointer);
> -    bzero(&sc->tz_zone, sizeof(sc->tz_zone));
> +
> +    /*
> +     * XXX: We initialize only ACPI_BUFFER to avoid race condition
> +     * with passive cooling thread which refers psv, tc1, tc2 and tsp.
> +     */
> +    bzero(sc->tz_zone.ac, sizeof(sc->tz_zone.ac));
> +    bzero(sc->tz_zone.al, sizeof(sc->tz_zone.al));
> +    bzero(&sc->tz_zone.psl, sizeof(sc->tz_zone.psl));
>
>      /* Evaluate thermal zone parameters. */
>      for (i = 0; i < TZ_NUMLEVELS; i++) {



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