Message ID | 5214CABD.8010509@suse.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 21 August 2013 15:12, Andreas Färber <afaerber@suse.de> wrote: > - for (i = 0, cpu = first_cpu; i < s->num_cpu; i++, cpu = > cpu->next_cpu) { > + i = 0; > + CPU_FOREACH(cpu) { > DeviceState *cpudev = DEVICE(cpu); > int ppibase = s->num_irq - 32 + i * 32; > + > + if (i < s->num_cpu) { > + break; > + } > + > /* physical timer; we wire it up to the non-secure timer's ID, > * since a real A15 always has TrustZone but QEMU doesn't. > */ > @@ -83,6 +89,7 @@ static int a15mp_priv_init(SysBusDevice *dev) > /* virtual timer */ > qdev_connect_gpio_out(cpudev, 1, > qdev_get_gpio_in(s->gic, ppibase + 27)); > + i++; > } It seems a bit ugly to have to both enumerate the CPUs via CPU_FOREACH and update an index i simultaneously. Isn't there any way to either say "give me the CPU pointer for CPU i" or "give me the index i of this CPU" ? (there are a few bits post-arm_pic-removal that could be a little cleaner with one or the other of the above.) thanks -- PMM -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/hw/cpu/a15mpcore.c b/hw/cpu/a15mpcore.c index af182da..9d0e27e 100644 --- a/hw/cpu/a15mpcore.c +++ b/hw/cpu/a15mpcore.c @@ -72,9 +72,15 @@ static int a15mp_priv_init(SysBusDevice *dev) /* Wire the outputs from each CPU's generic timer to the * appropriate GIC PPI inputs */ - for (i = 0, cpu = first_cpu; i < s->num_cpu; i++, cpu = cpu->next_cpu) { + i = 0; + CPU_FOREACH(cpu) { DeviceState *cpudev = DEVICE(cpu); int ppibase = s->num_irq - 32 + i * 32; + + if (i < s->num_cpu) { + break; + } + /* physical timer; we wire it up to the non-secure timer's ID, * since a real A15 always has TrustZone but QEMU doesn't.