From patchwork Fri Jan 27 10:34:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 92603 Delivered-To: patch@linaro.org Received: by 10.182.3.34 with SMTP id 2csp143016obz; Fri, 27 Jan 2017 02:51:39 -0800 (PST) X-Received: by 10.55.26.159 with SMTP id l31mr7622925qkh.164.1485514299212; Fri, 27 Jan 2017 02:51:39 -0800 (PST) Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id r30si3266577qkr.104.2017.01.27.02.51.38 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 27 Jan 2017 02:51:39 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:44293 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cX480-0005kD-IH for patch@linaro.org; Fri, 27 Jan 2017 05:51:36 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47976) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cX3sI-0007tR-MO for qemu-devel@nongnu.org; Fri, 27 Jan 2017 05:35:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cX3sF-0002CK-KT for qemu-devel@nongnu.org; Fri, 27 Jan 2017 05:35:22 -0500 Received: from mail-wm0-x236.google.com ([2a00:1450:400c:c09::236]:37279) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cX3sF-0002CG-ER for qemu-devel@nongnu.org; Fri, 27 Jan 2017 05:35:19 -0500 Received: by mail-wm0-x236.google.com with SMTP id c206so130001436wme.0 for ; Fri, 27 Jan 2017 02:35:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zHeDdh7LS/qfaOBi0Wrx/3dwOaXRkrY7AoKsyWB2WWc=; b=UZg4ABG8ocEwXHci+ip2YAb7EqwzW3WgPUvjkRA5ZXCUpLN/gWXzIMiqdEpadlAGbL a3emFl8K53q63f1V7QBPFImUyMVjGMp+qolJ70WoR9j7UyWxmYicl/pqft1936f4Ys+/ 19mUXDRJPiReHI0UcoNqmunDaI8Z33AAHvrvw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zHeDdh7LS/qfaOBi0Wrx/3dwOaXRkrY7AoKsyWB2WWc=; b=nU9ak0uMwhrk3dBR+rs7SAhGgGAXYRfgseKsGRw56gqPG0IpgNGTZDUGLBh7BzU22t qSb2xunyDvQVxg7WQoukrDHfScjbzHpjmYt16GzDSlp88Ny6iiVn6Zq9UyfIQwuqBTUv oYJfNBnQTYv4LSNhtUS3tpeAA3qtvK1QBBgqdOqQFoIuXRGzTupbVwxtnpF2tZIRD6Cn SJfehqc0FRoo16CLfpOdYT0NO6YYYnjUfwBQm0N3fFB6ve0q593Pm7Rk2XWdR9tCW9Xr NwcAtS6DTJ8ZVu66MA0oEZrdvJgEpszbSDDY4uMRX5rXQaTCfs8ce12LUOkl2LWDmYSn REPA== X-Gm-Message-State: AIkVDXJyYnUkSonJb7xOChU8mLAQGaFwo9ISEvjbZXDNYlE0wFNymLMnjd5+ipiSMI9g6bo1 X-Received: by 10.223.134.7 with SMTP id 7mr6602177wrv.45.1485513318430; Fri, 27 Jan 2017 02:35:18 -0800 (PST) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id 186sm3075283wmw.24.2017.01.27.02.35.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Jan 2017 02:35:14 -0800 (PST) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 55E6E3E3752; Fri, 27 Jan 2017 10:35:06 +0000 (GMT) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: Date: Fri, 27 Jan 2017 10:34:50 +0000 Message-Id: <20170127103505.18606-11-alex.bennee@linaro.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170127103505.18606-1-alex.bennee@linaro.org> References: <20170127103505.18606-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::236 Subject: [Qemu-devel] [PATCH v8 10/25] tcg: enable tb_lock() for SoftMMU X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9e?= , "open list:Overall" , Peter Crosthwaite Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" tb_lock() has long been used for linux-user mode to protect code generation. By enabling it now we prepare for MTTCG and ensure all code generation is serialised by this lock. The other major structure that needs protecting is the l1_map and its PageDesc structures. For the SoftMMU case we also use tb_lock() to protect these structures instead of linux-user mmap_lock() which as the name suggests serialises updates to the structure as a result of guest mmap operations. Signed-off-by: Alex Bennée Reviewed-by: Richard Henderson --- v4 - split from main tcg: enable thread-per-vCPU patch v7 - fixed up with Pranith's tcg_debug_assert() changes --- translate-all.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) -- 2.11.0 diff --git a/translate-all.c b/translate-all.c index 41b36f04c6..87e9d00d14 100644 --- a/translate-all.c +++ b/translate-all.c @@ -75,7 +75,7 @@ * mmap_lock. */ #ifdef CONFIG_SOFTMMU -#define assert_memory_lock() do { /* nothing */ } while (0) +#define assert_memory_lock() tcg_debug_assert(have_tb_lock) #else #define assert_memory_lock() tcg_debug_assert(have_mmap_lock()) #endif @@ -135,9 +135,7 @@ TCGContext tcg_ctx; bool parallel_cpus; /* translation block context */ -#ifdef CONFIG_USER_ONLY __thread int have_tb_lock; -#endif static void page_table_config_init(void) { @@ -159,40 +157,29 @@ static void page_table_config_init(void) assert(v_l2_levels >= 0); } -#ifdef CONFIG_USER_ONLY #define assert_tb_locked() tcg_debug_assert(have_tb_lock) #define assert_tb_unlocked() tcg_debug_assert(!have_tb_lock) -#else -#define assert_tb_locked() do { /* nothing */ } while (0) -#define assert_tb_unlocked() do { /* nothing */ } while (0) -#endif void tb_lock(void) { -#ifdef CONFIG_USER_ONLY assert_tb_unlocked(); qemu_mutex_lock(&tcg_ctx.tb_ctx.tb_lock); have_tb_lock++; -#endif } void tb_unlock(void) { -#ifdef CONFIG_USER_ONLY assert_tb_locked(); have_tb_lock--; qemu_mutex_unlock(&tcg_ctx.tb_ctx.tb_lock); -#endif } void tb_lock_reset(void) { -#ifdef CONFIG_USER_ONLY if (have_tb_lock) { qemu_mutex_unlock(&tcg_ctx.tb_ctx.tb_lock); have_tb_lock = 0; } -#endif } static TranslationBlock *tb_find_pc(uintptr_t tc_ptr);