diff options
author | njl <njl@FreeBSD.org> | 2007-03-26 19:38:28 +0000 |
---|---|---|
committer | njl <njl@FreeBSD.org> | 2007-03-26 19:38:28 +0000 |
commit | 764339998b0ac37e74d4476c424e7b75c7383880 (patch) | |
tree | ea2d1b3c294251274ee1dd98db1f57c6c94d1ab7 /sys | |
parent | f01ad312dfd93193fbe44055e89a48dafcd7d1ec (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/dev/acpica/Osd/OsdSynch.c | 13 |
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); } /* |