From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94D34C433DF for ; Thu, 21 May 2020 18:55:23 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6AE1120759 for ; Thu, 21 May 2020 18:55:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6AE1120759 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:41712 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jbqLi-00028P-IU for qemu-devel@archiver.kernel.org; Thu, 21 May 2020 14:55:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35226) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbqKd-0000u5-BZ for qemu-devel@nongnu.org; Thu, 21 May 2020 14:54:15 -0400 Received: from mx2.suse.de ([195.135.220.15]:49884) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jbqKb-00040h-W4 for qemu-devel@nongnu.org; Thu, 21 May 2020 14:54:14 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 9343FAD09; Thu, 21 May 2020 18:54:14 +0000 (UTC) From: Claudio Fontana To: Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [RFC 0/3] QEMU cpus.c refactoring Date: Thu, 21 May 2020 20:54:04 +0200 Message-Id: <20200521185407.25311-1-cfontana@suse.de> X-Mailer: git-send-email 2.16.4 Received-SPF: pass client-ip=195.135.220.15; envelope-from=cfontana@suse.de; helo=mx2.suse.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/21 02:02:44 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x (no timestamps) [generic] X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , Eduardo Habkost , Marcelo Tosatti , "open list:All patches CC here" , Roman Bolshakov , Wenchao Wang , Colin Xu , Claudio Fontana , "open list:X86 HAXM CPUs" , Sunil Muthuswamy , Richard Henderson Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Motivation and higher level steps: https://lists.gnu.org/archive/html/qemu-devel/2020-05/msg04628.html This is point 8) in that plan. The idea is to extract the unrelated parts in cpus, and register interfaces from each single accelerator to the main cpus module (cpus.c). While doing this RFC, I noticed some assumptions about Windows being either TCG or HAX (not considering WHPX) that might need to be revisited. I added a comment there. The thing builds successfully based on Linux cross-compilations for windows/hax, windows/whpx, and I got a good build on Darwin/hvf. Tests run successully for tcg and kvm configurations, but did not test on windows or darwin. Welcome your feedback and help on this, Claudio Claudio Fontana (3): cpu-throttle: new module, extracted from cpus.c cpu-timers: new module extracted from cpus.c cpus: implement cpus interfaces for per-accelerator threads MAINTAINERS | 3 + Makefile.target | 9 +- accel/kvm/Makefile.objs | 2 + accel/kvm/kvm-all.c | 15 +- accel/kvm/kvm-cpus-interface.c | 94 ++ accel/kvm/kvm-cpus-interface.h | 8 + accel/qtest.c | 85 +- accel/stubs/kvm-stub.c | 3 +- accel/tcg/Makefile.objs | 1 + accel/tcg/cpu-exec.c | 43 +- accel/tcg/tcg-all.c | 19 +- accel/tcg/tcg-cpus-interface.c | 523 +++++++++ accel/tcg/tcg-cpus-interface.h | 8 + accel/tcg/translate-all.c | 3 +- cpu-throttle.c | 122 ++ cpu-timers.c | 776 +++++++++++++ cpus.c | 2015 ++++------------------------------ docs/replay.txt | 6 +- exec.c | 4 - hw/core/cpu.c | 1 + hw/core/ptimer.c | 6 +- hw/i386/x86.c | 1 + include/exec/cpu-all.h | 4 + include/exec/exec-all.h | 4 +- include/hw/core/cpu.h | 37 - include/qemu/main-loop.h | 5 + include/qemu/timer.h | 20 - include/sysemu/cpu-throttle.h | 50 + include/sysemu/cpu-timers.h | 73 ++ include/sysemu/cpus.h | 56 +- include/sysemu/hw_accel.h | 57 +- include/sysemu/kvm.h | 2 +- include/sysemu/replay.h | 4 +- migration/migration.c | 1 + migration/ram.c | 1 + qtest.c | 2 +- replay/replay.c | 6 +- softmmu/vl.c | 8 +- stubs/Makefile.objs | 1 + stubs/clock-warp.c | 4 +- stubs/cpu-get-clock.c | 2 +- stubs/cpu-get-icount.c | 14 +- stubs/cpu-synchronize-state.c | 15 + target/alpha/translate.c | 3 +- target/arm/helper.c | 7 +- target/i386/Makefile.objs | 7 +- target/i386/hax-all.c | 6 +- target/i386/hax-cpus-interface.c | 85 ++ target/i386/hax-cpus-interface.h | 8 + target/i386/hax-i386.h | 2 + target/i386/hax-posix.c | 12 + target/i386/hax-windows.c | 20 + target/i386/hvf/Makefile.objs | 2 +- target/i386/hvf/hvf-cpus-interface.c | 83 ++ target/i386/hvf/hvf-cpus-interface.h | 8 + target/i386/hvf/hvf.c | 5 +- target/i386/kvm.c | 4 +- target/i386/whpx-all.c | 3 + target/i386/whpx-cpus-interface.c | 96 ++ target/i386/whpx-cpus-interface.h | 8 + target/riscv/csr.c | 8 +- tests/ptimer-test-stubs.c | 6 + tests/test-timed-average.c | 2 +- util/main-loop.c | 4 +- util/qemu-timer.c | 9 +- 65 files changed, 2524 insertions(+), 1977 deletions(-) create mode 100644 accel/kvm/kvm-cpus-interface.c create mode 100644 accel/kvm/kvm-cpus-interface.h create mode 100644 accel/tcg/tcg-cpus-interface.c create mode 100644 accel/tcg/tcg-cpus-interface.h create mode 100644 cpu-throttle.c create mode 100644 cpu-timers.c create mode 100644 include/sysemu/cpu-throttle.h create mode 100644 include/sysemu/cpu-timers.h create mode 100644 stubs/cpu-synchronize-state.c create mode 100644 target/i386/hax-cpus-interface.c create mode 100644 target/i386/hax-cpus-interface.h create mode 100644 target/i386/hvf/hvf-cpus-interface.c create mode 100644 target/i386/hvf/hvf-cpus-interface.h create mode 100644 target/i386/whpx-cpus-interface.c create mode 100644 target/i386/whpx-cpus-interface.h -- 2.16.4