Seen with WITNESS, this has already been fixed in amd64, diff below
backport the fix, ok?
ioapic0 at mainbus0: apid 2 pa 0xfec00000witness: lock_object uninitialized:
0xd8841440
Starting stack trace...
witness_checkorder(f5547000,fec01000,fec00000,d1820adc,d03fb01e) at
witness_checkorder+0x85 [/home/os/openbsd/sys/kern/subr_witness.c:2497]
witness_checkorder(d8841440,9,0) at witness_checkorder+0x85
[/home/os/openbsd/sys/kern/subr_witness.c:2497]
mtx_enter(d8841434) at mtx_enter+0x1c
[/home/os/openbsd/sys/kern/kern_lock.c:262]
ioapic_attach(d884a040,d8841400,d1820b84) at ioapic_attach+0xe0
[/home/os/openbsd/sys/arch/i386/i386/ioapic.c:125]
config_attach(d884a040,d0e31314,d1820b84,d068f190) at config_attach+0x18a
[/home/os/openbsd/sys/kern/subr_autoconf.c:403]
config_found_sm(d884a040,d1820b84,d068f190,0) at config_found_sm+0x29
[/home/os/openbsd/sys/kern/subr_autoconf.c:313]
acpimadt_attach(d8840400,d88bc2c0,d1820c78) at acpimadt_attach+0x34c
[/home/os/openbsd/sys/dev/acpi/acpimadt.c:0]
config_attach(d8840400,d0e32574,d1820c78,d07ddd90) at config_attach+0x18a
[/home/os/openbsd/sys/kern/subr_autoconf.c:403]
config_found_sm(d8840400,d1820c78,d07ddd90,d07e0280) at config_found_sm+0x29
[/home/os/openbsd/sys/kern/subr_autoconf.c:313]
acpi_attach_common(d8840400,f0120) at acpi_attach_common+0x585
[/home/os/openbsd/sys/dev/acpi/acpi.c:1207]
acpi_attach(d884a080,d8840400,d1820dd0) at acpi_attach+0x2c
[/home/os/openbsd/sys/arch/i386/i386/acpi_machdep.c:112]
config_attach(d884a080,d0e32734,d1820dd0,d09d73d0) at config_attach+0x18a
[/home/os/openbsd/sys/kern/subr_autoconf.c:403]
config_found_sm(d884a080,d1820dd0,d09d73d0,0) at config_found_sm+0x29
[/home/os/openbsd/sys/kern/subr_autoconf.c:313]
biosattach(d884a040,d884a080,d1820ec0) at biosattach+0x181
[/home/os/openbsd/sys/arch/i386/i386/bios.c:392]
config_attach(d884a040,d0e31274,d1820ec0,d04d3db0) at config_attach+0x18a
[/home/os/openbsd/sys/kern/subr_autoconf.c:403]
config_found_sm(d884a040,d1820ec0,d04d3db0,0) at config_found_sm+0x29
[/home/os/openbsd/sys/kern/subr_autoconf.c:313]
mainbus_attach(0,d884a040,0) at mainbus_attach+0x54
[/home/os/openbsd/sys/arch/i386/i386/mainbus.c:157]
config_attach(0,d0e2ec34,0,0) at config_attach+0x18a
[/home/os/openbsd/sys/kern/subr_autoconf.c:403]
config_rootfound(d0c28d4d,0) at config_rootfound+0xaf
[/home/os/openbsd/sys/kern/subr_autoconf.c:328]
cpu_configure(3327f5e4,181e000,182d000,1821000,0) at cpu_configure+0x4c
[/home/os/openbsd/sys/arch/i386/i386/autoconf.c:156]
main(0,0,0,0,0) at main+0x342 [/home/os/openbsd/sys/kern/init_main.c:377]
End of stack trace.
Index: i386/ioapic.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/ioapic.c,v
retrieving revision 1.41
diff -u -p -r1.41 ioapic.c
--- i386/ioapic.c 25 Aug 2018 16:09:29 -0000 1.41
+++ i386/ioapic.c 2 Sep 2021 07:27:16 -0000
@@ -309,6 +309,10 @@ ioapic_attach(struct device *parent, str
sc->sc_reg = (volatile u_int32_t *)(bh + IOAPIC_REG);
sc->sc_data = (volatile u_int32_t *)(bh + IOAPIC_DATA);
+#ifdef MULTIPROCESSOR
+ mtx_init(&sc->sc_pic.pic_mutex, IPL_NONE);
+#endif
+
ver_sz = ioapic_read(sc, IOAPIC_VER);
sc->sc_apic_vers = (ver_sz & IOAPIC_VER_MASK) >> IOAPIC_VER_SHIFT;
sc->sc_apic_sz = (ver_sz & IOAPIC_MAX_MASK) >> IOAPIC_MAX_SHIFT;