Fix IPIs on systems with multiple clusters where the CPU interface
authorkettenis <kettenis@openbsd.org>
Sat, 16 Jul 2022 12:07:55 +0000 (12:07 +0000)
committerkettenis <kettenis@openbsd.org>
Sat, 16 Jul 2022 12:07:55 +0000 (12:07 +0000)
numbers don't necessarily match the CPU numbers used by our kernel.

Seen on an Amlogic S922X SoC where cluster 0 consists of two Cortex-A53
cores and cluster 1 consists of four Cortes-A73 cores.

ok anton@

sys/arch/arm64/dev/ampintc.c

index 45a15dd..df59eaf 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ampintc.c,v 1.28 2022/07/13 09:28:18 kettenis Exp $ */
+/* $OpenBSD: ampintc.c,v 1.29 2022/07/16 12:07:55 kettenis Exp $ */
 /*
  * Copyright (c) 2007,2009,2011 Dale Rahn <drahn@openbsd.org>
  *
@@ -1104,7 +1104,7 @@ ampintc_send_ipi(struct cpu_info *ci, int id)
                sc->sc_ipi_reason[ci->ci_cpuid] = id;
 
        /* currently will only send to one cpu */
-       sendmask = 1 << (16 + ci->ci_cpuid);
+       sendmask = sc->sc_cpu_mask[ci->ci_cpuid] << 16;
        sendmask |= sc->sc_ipi_num[id];
 
        bus_space_write_4(sc->sc_iot, sc->sc_d_ioh, ICD_SGIR, sendmask);