Hello all,

I have a question regarding LEON SPARC SMP. In a LEON SPARC SMP system secondary CPUs (others that CPU#0) can be started by setting certain bits in the interrupt controller. At startup (reset) all CPUs are halted except CPU#0. In QEMU version 0.12 it was possible to simply set CPUSPARCState.halted to "0" to start a secondary CPU. This is no longer possible and reliable. The CPU that should be started does not wake up by doing this:

                env->halted = 0;
                qemu_cpu_kick(env);

It seems that the running CPU blocks the startup of the halted CPU. I need to notice, that the halted CPU has interrupts (and traps) disabled at startup. Thus, it is not possible to start the CPU by raising an interrupt.

I was playing with several things and I found that doing

                env->halted = 0;
                qemu_cpu_kick(env);
                cpu_exit(cpu_single_env);

helps. The statement cpu_exit(cpu_single_env) forces the current CPU (cpu_single_env) to exit the execution loop and which allows to start the other CPU (env).

I'm unsure if this is the correct way to solve my problem. Any comments on this?

Thanks and best regards,
Ronald

Reply via email to