All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] MTTCG External Halt
@ 2018-01-03 22:10 Alistair Francis
  2018-01-03 22:14 ` Peter Maydell
                   ` (2 more replies)
  0 siblings, 3 replies; 25+ messages in thread
From: Alistair Francis @ 2018-01-03 22:10 UTC (permalink / raw)
  To: qemu-devel@nongnu.org Developers; +Cc: Alex Bennée, Alistair Francis

Hey guys, I'm super stuck with an ugly MTTCG issue and was wondering
if anyone had any ideas.

In the Xilinx fork of QEMU (based on 2.11) we have a way for CPUs to
halt other CPUs. This is used for example when the power control unit
halts the ARM A53s. To do this we have internal GPIO signals that end
up calling a function that basically does this:

To halt:
    cpu->halted = true;
    cpu_interrupt(cpu, CPU_INTERRUPT_HALT);

To un-halt
    cpu->halted = false;
    cpu_reset_interrupt(cpu, CPU_INTERRUPT_HALT);

We also have the standard ARM WFI (Wait For Interrupt) implementation
in op_helper.c:
    cs->halted = 1;
    cs->exception_index = EXCP_HLT;
    cpu_loop_exit(cs);

Before MTTCG this used to work great, but now either we end up with
the guest Linux complaining about CPU stalls or we hit:
ERROR:/scratch/alistai/master-qemu/cpus.c:1516:qemu_tcg_cpu_thread_fn:
assertion failed: (cpu->halted)

If I remove the instances of manually setting cpu->halted then I don't
see the asserts(), but the the WFI instruction doesn't work correctly.
So it seems like setting the halted status externally from the CPU
causes the issue. I have tried setting it inside a lock, using atomic
operations and running the setter async on the CPU, but nothing works.

Any chance any one has some insight into a way to externally set a
vCPU as halted/un-halted?

Thanks,
Alistair

^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2018-04-22 23:03 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-03 22:10 [Qemu-devel] MTTCG External Halt Alistair Francis
2018-01-03 22:14 ` Peter Maydell
2018-01-03 22:23   ` Alistair Francis
2018-01-04  1:14     ` Alistair Francis
2018-01-04 11:08 ` Alex Bennée
2018-01-06  2:23   ` Alistair Francis
2018-01-30 23:56     ` Alistair Francis
2018-01-31  4:26       ` Paolo Bonzini
2018-01-31 16:08         ` Alistair Francis
2018-01-31 20:32           ` Alex Bennée
2018-01-31 22:31             ` Alistair Francis
2018-02-01 12:01               ` Alex Bennée
2018-02-01 17:13                 ` Alistair Francis
2018-02-01 21:00                   ` Alistair Francis
2018-02-02 20:37                     ` Alex Bennée
2018-02-02 21:49                       ` Alistair Francis
2018-02-02 21:59                         ` Alistair Francis
2018-04-22 23:03                           ` Philippe Mathieu-Daudé
2018-01-31 17:13 ` Paolo Bonzini
2018-01-31 18:17   ` Alistair Francis
2018-01-31 18:48     ` Peter Maydell
2018-01-31 18:51       ` Alistair Francis
2018-01-31 18:56         ` Alistair Francis
2018-01-31 18:59         ` Peter Maydell
2018-01-31 19:37           ` Alistair Francis

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.