summaryrefslogtreecommitdiffstats
path: root/sys/dev/acpica
diff options
context:
space:
mode:
authornjl <njl@FreeBSD.org>2007-03-26 19:38:28 +0000
committernjl <njl@FreeBSD.org>2007-03-26 19:38:28 +0000
commit764339998b0ac37e74d4476c424e7b75c7383880 (patch)
treeea2d1b3c294251274ee1dd98db1f57c6c94d1ab7 /sys/dev/acpica
parentf01ad312dfd93193fbe44055e89a48dafcd7d1ec (diff)
downloadFreeBSD-src-764339998b0ac37e74d4476c424e7b75c7383880.zip
FreeBSD-src-764339998b0ac37e74d4476c424e7b75c7383880.tar.gz
Use a unique name for each mutex now that acpi-ca is creating more than
one (hardware & global lock). This should address witness complaints that a duplicate mutex is being acquired. Be sure to free the mutex to fix a potential memory leak. MFC after: 3 days
Diffstat (limited to 'sys/dev/acpica')
-rw-r--r--sys/dev/acpica/Osd/OsdSynch.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/dev/acpica/Osd/OsdSynch.c b/sys/dev/acpica/Osd/OsdSynch.c
index d195201..14a79f1 100644
--- a/sys/dev/acpica/Osd/OsdSynch.c
+++ b/sys/dev/acpica/Osd/OsdSynch.c
@@ -322,10 +322,16 @@ AcpiOsSignalSemaphore(ACPI_HANDLE Handle, UINT32 Units)
return_ACPI_STATUS (AE_OK);
}
+/* Combined mutex + mutex name storage since the latter must persist. */
+struct acpi_mtx_msg {
+ struct mtx mtx;
+ char msg[32];
+};
+
ACPI_STATUS
AcpiOsCreateLock (ACPI_HANDLE *OutHandle)
{
- struct mtx *m;
+ struct acpi_mtx_msg *m;
if (OutHandle == NULL)
return (AE_BAD_PARAMETER);
@@ -333,7 +339,9 @@ AcpiOsCreateLock (ACPI_HANDLE *OutHandle)
if (m == NULL)
return (AE_NO_MEMORY);
- mtx_init(m, "acpica subsystem lock", NULL, MTX_DEF);
+ /* Build a unique name based on the address of the handle. */
+ snprintf(m->msg, sizeof(m->msg), "acpi subsys %p", OutHandle);
+ mtx_init(&m->mtx, m->msg, NULL, MTX_DEF);
*OutHandle = (ACPI_HANDLE)m;
return (AE_OK);
}
@@ -346,6 +354,7 @@ AcpiOsDeleteLock (ACPI_HANDLE Handle)
if (Handle == NULL)
return;
mtx_destroy(m);
+ free(m, M_ACPISEM);
}
/*
OpenPOWER on IntegriCloud