d78fd44a07
The AML mutex `acquire` handler had two defects that let a routine `_ACQ` on ACPI processor P-state objects (`processor/CPUn/pss`, opened by cpufreqd) deadlock acpid permanently: 1. Timeout units. ACPI `_ACQ` timeouts are milliseconds and 0xFFFF is the spec's "wait forever" (ACPICA ACPI_WAIT_FOREVER, actypes.h:459). The code multiplied the value by 1000, treating it as seconds, so 0xFFFF became ~18 hours. 2. No ownership. ACPI mutexes are recursive: the owning thread may re-acquire, each Acquire paired with a Release (ACPICA acpi_ex_acquire_mutex_object, exmutex.c:140). The old code tracked only a "held" set with no owner, so a nested acquire by the single AML thread waited for a release only it could perform — a self-deadlock. Because acpid is single-threaded and the same thread serves the `acpi` scheme socket, a stuck acquire stops acpid answering scheme requests. The init namespace manager then blocks in the openat it was proxying, and — since every restricted-namespace path resolution goes through that single manager — the whole system's open path wedges (observed: mini never reaches a usable brush login). Fix: track (owner ThreadId, recursion depth) per mutex, treat a nested acquire by the owner as a depth bump, interpret the timeout as milliseconds, and bound any wait to MAX_MUTEX_WAIT (5s) so a misbehaving AML method can never freeze the scheme-serving thread.