AcpiOsAcquireObject crash [Was: 9-Stable panic: resource_list_unreserve: can't find resource]
Tom Lislegaard
Tom.Lislegaard at proact.no
Tue Nov 13 15:09:48 UTC 2012
> -----Original Message-----
> From: Andriy Gapon [mailto:avg at FreeBSD.org]
> Sent: 9. november 2012 14:46
> To: Tom Lislegaard
> Cc: freebsd-acpi at FreeBSD.org
> Subject: Re: AcpiOsAcquireObject crash [Was: 9-Stable panic: resource_list_unreserve: can't find
> resource]
>
> on 09/11/2012 14:17 Tom Lislegaard said the following:
> > kgdb) up 7
> > #7 0xffffffff802d1bdd in AcpiOsAcquireObject (Cache=0xfffffe00052bac60) at
> /usr/src/sys/contrib/dev/acpica/utilities/utcache.c:316
> > 316 ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
> > (kgdb) x/9a Cache->ListHead
> > 0xfffffffeec85c730: Cannot access memory at address 0xfffffffeec85c730
>
> [Slaps forehead] Ah, right, indeed.on
> I guess the problem hasn't happened again since then?
> Does the patch appear to work OK so far (with respect to the original problem)?
>
You're right, I haven't had any occurrence of the 'resource_list_unreserve' panic since the original patch.
The patch below works badly on my system. I notice that certain processes start to hang, for instance during boot I have to interrupt /etc/rc.d/initrandom to continue. Xorg also hangs and if I log in on another terminal I see the process is in processorstate 'acmtx'.
The kernel msg buffer is full of messages like this
ACPI Error: Could not acquire AML Interpreter mutex (20110527/exutils-107)
ACPI Exception: AE_ERROR, Thread 100076 could not acquire Mutex [0x8] (20110527/utmutex-315)
ACPI Error: Mutex [0x8] is not acquired, cannot release (20110527/utmutex-359)
ACPI Error: Mutex [0x0] is not acquired, cannot release (20110527/utmutex-359)
ACPI Error: Could not release AML Interpreter mutex (20110527/exutils-177)
-tom
> I have a suspicion about what causes the new problem.
> If it is correct then the following experimental patch may help with it:
>
> --- a/sys/contrib/dev/acpica/components/utilities/utdelete.c
> +++ b/sys/contrib/dev/acpica/components/utilities/utdelete.c
> @@ -415,6 +415,8 @@ AcpiUtUpdateRefCount (
> return;
> }
>
> + (void) AcpiUtAcquireMutex (ACPI_MTX_REFCOUNTS);
> +
> Count = Object->Common.ReferenceCount;
> NewCount = Count;
>
> @@ -490,6 +492,8 @@ AcpiUtUpdateRefCount (
> ACPI_WARNING ((AE_INFO,
> "Large Reference Count (0x%X) in object %p", Count, Object));
> }
> +
> + (void) AcpiUtReleaseMutex (ACPI_MTX_REFCOUNTS);
> }
>
>
>
> --- a/sys/contrib/dev/acpica/include/aclocal.h
> +++ b/sys/contrib/dev/acpica/include/aclocal.h
> @@ -89,8 +89,9 @@ union acpi_parse_object;
> #define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */
> #define ACPI_MTX_DEBUG_CMD_COMPLETE 6 /* AML debugger */
> #define ACPI_MTX_DEBUG_CMD_READY 7 /* AML debugger */
> +#define ACPI_MTX_REFCOUNTS 8 /* ACPI object reference counts */
>
> -#define ACPI_MAX_MUTEX 7
> +#define ACPI_MAX_MUTEX 8
> #define ACPI_NUM_MUTEX ACPI_MAX_MUTEX+1
>
>
>
> --
> Andriy Gapon
More information about the freebsd-acpi
mailing list