We have an arm64 server that encounters an ACPI GED error at boot. This causes the system to livelock and hang at boot, spewing "AcpiOsExecute: failed to enqueue task, consider increasing the debug.acpi.max_tasks tunable".
This is happening because on arm64, we do not have EARLY_AP_STARTUP, so we are running on a single core when the driver attaches. The interrupt is level triggered, and is unmasked in the interrupt controller when the interrupt is setup. After the interrupt is setup, we live-lock in an interrupt storm because the handler (which is run as part of AcpiEvaluateObject()) is in charge of ack'ing the interrupt, but is not run until after the taskqueue is scheduled. So it is never run.
The ideal solution would be to simply call AcpiEvaluateObject() directly. However, @jhb tells me that this is not safe in an interrupt context, as some GED events may sleep.
The workaround he helped me come up with is to defer the interrupt setup until after we have setup SMP.