On 6/4/23 12:00, Song Gao wrote:
Add separate macro EXTIOI_CPUS for extioi interrupt controller, extioi
only supports 4 cpu. And set macro LOONGARCH_MAX_CPUS as 256 so that
loongarch virt machine supports more cpus.

Interrupts from external devices can only be routed cpu 0-3 because
of extioi limits, cpu internal interrupt such as timer/ipi can be
triggered on all cpus.

Signed-off-by: Song Gao <gaos...@loongson.cn>
---
  hw/intc/loongarch_extioi.c         |  4 ++--
  hw/loongarch/virt.c                | 21 ++++++++++++++-------
  include/hw/intc/loongarch_extioi.h | 10 ++++++----
  include/hw/loongarch/virt.h        |  2 +-
  4 files changed, 23 insertions(+), 14 deletions(-)


@@ -618,10 +623,12 @@ static void loongarch_irq_init(LoongArchMachineState 
*lams)
       * cpu_pin[9:2] <= intc_pin[7:0]
       */
      for (cpu = 0; cpu < ms->smp.cpus; cpu++) {
-        cpudev = DEVICE(qemu_get_cpu(cpu));
-        for (pin = 0; pin < LS3A_INTC_IP; pin++) {
-            qdev_connect_gpio_out(extioi, (cpu * 8 + pin),
-                                  qdev_get_gpio_in(cpudev, pin + 2));
+        if (cpu < EXTIOI_CPUS) {

Alternatively:

           for (cpu = 0; cpu < MIN(ms->smp.cpus, EXTIOI_CPUS); cpu++) {

+            cpudev = DEVICE(qemu_get_cpu(cpu));
+            for (pin = 0; pin < LS3A_INTC_IP; pin++) {
+                qdev_connect_gpio_out(extioi, (cpu * 8 + pin),
+                                      qdev_get_gpio_in(cpudev, pin + 2));
+           }
          }
      }

Reviewed-by: Philippe Mathieu-Daudé <phi...@linaro.org>


Reply via email to