From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41307) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZUOPe-0002Zw-Qw for qemu-devel@nongnu.org; Tue, 25 Aug 2015 20:17:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZUOPZ-0000IX-Qa for qemu-devel@nongnu.org; Tue, 25 Aug 2015 20:17:58 -0400 Received: from mail-wi0-x22b.google.com ([2a00:1450:400c:c05::22b]:33709) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZUOPZ-0000Hp-Il for qemu-devel@nongnu.org; Tue, 25 Aug 2015 20:17:53 -0400 Received: by wijn1 with SMTP id n1so8252224wij.0 for ; Tue, 25 Aug 2015 17:17:52 -0700 (PDT) Sender: Paolo Bonzini From: Paolo Bonzini Date: Wed, 26 Aug 2015 02:17:36 +0200 Message-Id: <1440548265-4755-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH v2 0/9] tcg: signal-free qemu_cpu_kick List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: mttcg@greensocs.com, cota@braap.org, rth@twiddle.net This version of the signal-free qemu_cpu_kick patches is, ehm, much better. Variable are accessed either with Java-style volatiles or protected by memory barriers, and the cleanups go further by removing qemu/tls.h and C volatiles. The logic is relatively simple. The I/O thread does (letters in parentheses indicates the synchronizes-with edges): run_on_cpu or similar ... seq_cst write 1 to exit_request (C) seq_cst read tcg_current_cpu to cpu (B) if not NULL write 1 to cpu->exit_request release barrier (A) write 1 to cpu->tcg_exit_req The CPU thread does either this: (in generated code) read cpu->tcg_exit_req acquire barrier (A) read cpu->exit_request exit from cpu_exec seq_cst write 0 to exit_request ... flush_queued_work or similar or this: seq_cst write to tcg_current_cpu (B) seq_cst read from exit_request (C) exit from cpu_exec seq_cst write 0 to exit_request ... flush_queued_work or similar The non-TLS tcg_current_cpu will go away with multi-threaded TCG. Paolo Paolo Bonzini (9): i8257: rewrite DMA_schedule to avoid hooking into the CPU loop i8257: remove cpu_request_exit irq tcg: introduce tcg_current_cpu remove qemu/tls.h tcg: assign cpu->current_tb in a simpler place tcg: synchronize cpu->exit_request and cpu->tcg_exit_req accesses tcg: synchronize exit_request and tcg_current_cpu accesses use qemu_cpu_kick instead of cpu_exit or qemu_cpu_kick_thread tcg: signal-free qemu_cpu_kick cpu-exec.c | 33 ++++++++---------- cpus.c | 91 ++++++++++++++----------------------------------- exec.c | 2 +- gdbstub.c | 2 +- hw/block/fdc.c | 2 +- hw/dma/i82374.c | 5 +-- hw/dma/i8257.c | 31 +++++++++-------- hw/i386/pc.c | 13 +------ hw/isa/i82378.c | 3 +- hw/mips/mips_fulong2e.c | 13 +------ hw/mips/mips_jazz.c | 13 +------ hw/mips/mips_malta.c | 13 +------ hw/ppc/prep.c | 11 ------ hw/ppc/spapr_rtas.c | 2 +- hw/sparc/sun4m.c | 4 +-- hw/sparc64/sun4u.c | 4 +-- include/exec/exec-all.h | 5 +-- include/hw/isa/isa.h | 4 +-- include/qemu/tls.h | 52 ---------------------------- include/qom/cpu.h | 8 ++--- qom/cpu.c | 2 ++ 21 files changed, 80 insertions(+), 233 deletions(-) delete mode 100644 include/qemu/tls.h -- 2.4.3