From nobody Mon Oct 6 09:20:11 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1562664161; cv=none; d=zoho.com; s=zohoarc; b=lY++xQucFlN51NO+Dak6Piff0A+RTixr/qebdKJCc8jALz7OiG8I2xwDBTpFdFfwbwkknUlRz6sfPBkpLAnwI4rba9RBXNjbwXdTf/I25Eu/anbdNcxoaEgaQQxU6zXROkhV1divFgpmZn1Jd7LUJdyrK56a2xsiIpSt9/zK7Q8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1562664161; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=pFoay7GNwEUZQB8Jr0UsvPyxNWVYPlqTjcJEEwVExaY=; b=WF+51ek9QJYX7ITxUiqsl4z0kk21Q0aJcPLU3ga8Bu7NvDgKiQh1U5jAtfm66izdYrIVBjS8BF8hYsaStMisw9MoEirKlRAlEKhQhlLsUrb8jGSBHypdm1Z42LzmaXvdhnuBGS0ClBFSgde26LjM8zeehNUoQ/dnVybhy7f5iT8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1562664161754305.4009082981472; Tue, 9 Jul 2019 02:22:41 -0700 (PDT) Received: from localhost ([::1]:48066 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkmKZ-00088u-Nl for importer@patchew.org; Tue, 09 Jul 2019 05:22:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43403) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkmJA-0006qC-Mw for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hkmJ8-0001mu-Ng for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:08 -0400 Received: from mail-io1-xd42.google.com ([2607:f8b0:4864:20::d42]:37371) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hkmJ8-0001mR-9q for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:06 -0400 Received: by mail-io1-xd42.google.com with SMTP id q22so19834010iog.4 for ; Tue, 09 Jul 2019 02:21:06 -0700 (PDT) Received: from localhost.localdomain ([172.56.12.212]) by smtp.gmail.com with ESMTPSA id c17sm17613817ioo.82.2019.07.09.02.21.01 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 09 Jul 2019 02:21:04 -0700 (PDT) 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; bh=pFoay7GNwEUZQB8Jr0UsvPyxNWVYPlqTjcJEEwVExaY=; b=zud4XPcZjkg3qLwJfacPY/UrNy72sXWazemnvyWdT7kcJwisiQhcP9GCwnaLfa1KUV jQYBNRfykwriAewJCJ4CF9x0Ip3rIUioQQkLcmgnW3q5jzs+Gt8tPDruYFuegUstpxq5 ZmjM+SO9CPWFljrBCjzn1U1wi7HLy8xJIuHIS7bj02n8zPIUeCUCS4EcfGb5WbguyuK9 pU4aIMEJMGLDqFtUgXeiV904DXy1zJj27XaX1VhtQXDw+eCIzpae1uJ1YuD5Ny2PBJJO bD5AGjPAKUO2eog2p4aGd5dIEp0c7N3DuEBq8GwvNB82f40UIfHhSrvnJ5NIRLWj6V4P vqgg== 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; bh=pFoay7GNwEUZQB8Jr0UsvPyxNWVYPlqTjcJEEwVExaY=; b=crmD3IKV29Tcd20lNIPntl5PJzUqKz5Fo5rthNfNyE/eK6eCDH3hBXg9VYcPKg5zPv Kxt+3zy7AwdcQbXTixtjm4R9/0sVkJzx1nP+mJf3YHSxX8hAnAZ6D4rOVfXlRrx7rirO jUBrxAS2KZm9r8RJ/FsT5hAP4pV/rrFBKe9c61PgNGyn7udg6kGL4fe/7h7UgG5RjQpY DXDRqjzTMd0bCfzZ3OjS9N/2OIOmyEcxr5RqzzP9KXvtRHYktzDlR9oYjxZ2xl+BYPYz o1neggBoB2rkVBMXipboM5ZngKlTD5K/6Hra53n5Zef/XfHwqpjRpl8VioLTJXHPi5Od NBLw== X-Gm-Message-State: APjAAAV7h70RlMkZ0zc4W4s7N0Kas5aztG7CaSPeJTh7IDhTr6K4I//x 9iXlCUrS1Ype9FFa/lexALsdbVJmjO8= X-Google-Smtp-Source: APXvYqyjTO5GWURhixPHPpvBaQtQxahmGq49vF1YXy1nLZCxGxWI/mvndgysDuoZlhxu7t9fSiMcuw== X-Received: by 2002:a02:c549:: with SMTP id g9mr18876778jaj.14.1562664065166; Tue, 09 Jul 2019 02:21:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 9 Jul 2019 11:20:45 +0200 Message-Id: <20190709092049.13771-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190709092049.13771-1-richard.henderson@linaro.org> References: <20190709092049.13771-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::d42 Subject: [Qemu-devel] [PATCH 1/5] include/qemu/atomic.h: Add signal_barrier 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: lvivier@redhat.com, peter.maydell@linaro.org, alex.bennee@linaro.org, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We have some potential race conditions vs our user-exec signal handler that will be solved with this barrier. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- include/qemu/atomic.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h index a6ac188188..f9cd24c899 100644 --- a/include/qemu/atomic.h +++ b/include/qemu/atomic.h @@ -88,6 +88,13 @@ #define smp_read_barrier_depends() barrier() #endif =20 +/* + * A signal barrier forces all pending local memory ops to be observed bef= ore + * a SIGSEGV is delivered to the *same* thread. In practice this is exact= ly + * the same as barrier(), but since we have the correct builtin, use it. + */ +#define signal_barrier() __atomic_signal_fence(__ATOMIC_SEQ_CST) + /* Sanity check that the size of an atomic operation isn't "overly large". * Despite the fact that e.g. i686 has 64-bit atomic operations, we do not * want to use them because we ought not need them, and this lets us do a @@ -308,6 +315,10 @@ #define smp_read_barrier_depends() barrier() #endif =20 +#ifndef signal_barrier +#define signal_barrier() barrier() +#endif + /* These will only be atomic if the processor does the fetch or store * in a single issue memory operation */ --=20 2.17.1 From nobody Mon Oct 6 09:20:11 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1562664233; cv=none; d=zoho.com; s=zohoarc; b=T80WDnBGjv/QNkBeY3HBxPmFibfF1Mb2JYprihSoaqpH1AzsMkMDaMRBu8P7GRazR2YbrQvVV6BapGgQLs30d/FPELSePTzV+E1L76tqdMq+JqlEmUjQe+Vi+oJ40x3Ul7DU5DIi1woAreY/1u9TGV0LfyJWaqrpofAj89aaUoA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1562664233; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=dbK9HyZ7CrS/6xw2w7TzA9aDBiINtJqhGyy8umr2lq4=; b=UfsXsznfLfunc0L6eCL2TLfUGeytgin1Wwgb540qq+CTueE6ix82R6cw85L9QlFmUxH6YOtvMMBm7qY5p9QCgcD6pvFV7U3frg/mRn1HmBoeqHTaqa3tn3ukMjlS6O1xJHFj5wOOGjwysL0adLhYeFkDM/RYvoRh040Io3PPU2M= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1562664233184237.806113839933; Tue, 9 Jul 2019 02:23:53 -0700 (PDT) Received: from localhost ([::1]:48083 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkmLo-0001bi-43 for importer@patchew.org; Tue, 09 Jul 2019 05:23:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43436) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkmJP-0006vw-2F for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hkmJG-0001rf-9u for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:18 -0400 Received: from mail-io1-xd42.google.com ([2607:f8b0:4864:20::d42]:36394) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hkmJE-0001qA-EI for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:13 -0400 Received: by mail-io1-xd42.google.com with SMTP id o9so26057535iom.3 for ; Tue, 09 Jul 2019 02:21:12 -0700 (PDT) Received: from localhost.localdomain ([172.56.12.212]) by smtp.gmail.com with ESMTPSA id c17sm17613817ioo.82.2019.07.09.02.21.05 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 09 Jul 2019 02:21:10 -0700 (PDT) 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; bh=dbK9HyZ7CrS/6xw2w7TzA9aDBiINtJqhGyy8umr2lq4=; b=trkqt1kPmMKQLRaasTj1fzewMkw7nS4Js9xD9izCmpbx/j2WZV60vLcqedForf2ukm ZPz1M8D4rMxSxXdefUnLldepZhf9yuZDudjF4wL3yjqn/PCkAFx1eBDQHnT0XMn59qpX NTaBuzn3v51FX3mQMUkL75/ZwUYPSTgFpLly7ulWhOImpHgue/os9EK8jIYjTQ09HrWe j2bmM0cr4enxaXFtvbtm3J8NvZ6zqizqDU4TxhzF6nN1SNXc0Crnp5BWcdSQFRJvOUig JNtQczUvrEQZHWKS7eKnMo9RvMr527N8Ap1hSs3p81HEr/R7pmZnV/ZEFSvbs21rE/sz oHVg== 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; bh=dbK9HyZ7CrS/6xw2w7TzA9aDBiINtJqhGyy8umr2lq4=; b=e3r1y+u8Lzu1ny/fbiHkyLUd4RnJAqmAKQ1Fq+xrcl8Zp2Fw7DckNt+nXlUy+ozKV/ qGVG7MUC/HboEH71tdROrO/yseOS9DnZycR3IxRyeK5VeHjCM0w8B8aAoRZzWS3QhrDx NxGMjJ/v6haC7BK8JCVA54zvG+/fJu8BmUxRPi35FNqylxddqfcHOQJiCloFugw4Zypj Kz7edTnCQ8nJbGw8yDOLaazDugzVC5Uv6G+/D166rcHwZ59JkX6m/1y6lwV8AI5OClfB 7WEdcgxyQ9zKdpsNpGzgZFIGCIJnweQn2y9KtNKCTxDyVnei9nIKfsOxqdy18Xnd8AMb hJkQ== X-Gm-Message-State: APjAAAXmqIE3z7ge8SFCZJAovO5jDNktTirbdXrME7J2d0Vuk/1UOhXK JxKGGYlVj4W25gsy93Yy4Nt1HJsaXK4= X-Google-Smtp-Source: APXvYqx5FlIuFOC35ysMORL9/Bn9KUuFTv3d3H3+q1sKq9RSDqsKAy4mTc0S9lSf++jbo79GTDvchQ== X-Received: by 2002:a02:77d4:: with SMTP id g203mr21312915jac.144.1562664071412; Tue, 09 Jul 2019 02:21:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 9 Jul 2019 11:20:46 +0200 Message-Id: <20190709092049.13771-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190709092049.13771-1-richard.henderson@linaro.org> References: <20190709092049.13771-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::d42 Subject: [Qemu-devel] [PATCH 2/5] tcg: Introduce set/clear_helper_retaddr 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: lvivier@redhat.com, peter.maydell@linaro.org, alex.bennee@linaro.org, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" At present we have a potential error in that helper_retaddr contains data for handle_cpu_signal, but we have not ensured that those stores will be scheduled properly before the operation that may fault. It might be that these races are not in practice observable, due to our use of -fno-strict-aliasing, but better safe than sorry. Adjust all of the setters of helper_retaddr. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- include/exec/cpu_ldst.h | 20 +++++++++++ include/exec/cpu_ldst_useronly_template.h | 12 +++---- accel/tcg/user-exec.c | 11 +++--- target/arm/helper-a64.c | 8 ++--- target/arm/sve_helper.c | 43 +++++++++++------------ 5 files changed, 57 insertions(+), 37 deletions(-) diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h index a08b11bd2c..9de8c93303 100644 --- a/include/exec/cpu_ldst.h +++ b/include/exec/cpu_ldst.h @@ -89,6 +89,26 @@ typedef target_ulong abi_ptr; =20 extern __thread uintptr_t helper_retaddr; =20 +static inline void set_helper_retaddr(uintptr_t ra) +{ + helper_retaddr =3D ra; + /* + * Ensure that this write is visible to the SIGSEGV handler that + * may be invoked due to a subsequent invalid memory operation. + */ + signal_barrier(); +} + +static inline void clear_helper_retaddr(void) +{ + /* + * Ensure that previous memory operations have succeeded before + * removing the data visible to the signal handler. + */ + signal_barrier(); + helper_retaddr =3D 0; +} + /* In user-only mode we provide only the _code and _data accessors. */ =20 #define MEMSUFFIX _data diff --git a/include/exec/cpu_ldst_useronly_template.h b/include/exec/cpu_l= dst_useronly_template.h index bc45e2b8d4..e65733f7e2 100644 --- a/include/exec/cpu_ldst_useronly_template.h +++ b/include/exec/cpu_ldst_useronly_template.h @@ -78,9 +78,9 @@ glue(glue(glue(cpu_ld, USUFFIX), MEMSUFFIX), _ra)(CPUArch= State *env, uintptr_t retaddr) { RES_TYPE ret; - helper_retaddr =3D retaddr; + set_helper_retaddr(retaddr); ret =3D glue(glue(cpu_ld, USUFFIX), MEMSUFFIX)(env, ptr); - helper_retaddr =3D 0; + clear_helper_retaddr(); return ret; } =20 @@ -102,9 +102,9 @@ glue(glue(glue(cpu_lds, SUFFIX), MEMSUFFIX), _ra)(CPUAr= chState *env, uintptr_t retaddr) { int ret; - helper_retaddr =3D retaddr; + set_helper_retaddr(retaddr); ret =3D glue(glue(cpu_lds, SUFFIX), MEMSUFFIX)(env, ptr); - helper_retaddr =3D 0; + clear_helper_retaddr(); return ret; } #endif @@ -128,9 +128,9 @@ glue(glue(glue(cpu_st, SUFFIX), MEMSUFFIX), _ra)(CPUArc= hState *env, RES_TYPE v, uintptr_t retaddr) { - helper_retaddr =3D retaddr; + set_helper_retaddr(retaddr); glue(glue(cpu_st, SUFFIX), MEMSUFFIX)(env, ptr, v); - helper_retaddr =3D 0; + clear_helper_retaddr(); } #endif =20 diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index cb5f4b19c5..4384b59a4d 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -134,7 +134,7 @@ static inline int handle_cpu_signal(uintptr_t pc, sigin= fo_t *info, * currently executing TB was modified and must be exited * immediately. Clear helper_retaddr for next execution. */ - helper_retaddr =3D 0; + clear_helper_retaddr(); cpu_exit_tb_from_sighandler(cpu, old_set); /* NORETURN */ =20 @@ -152,7 +152,7 @@ static inline int handle_cpu_signal(uintptr_t pc, sigin= fo_t *info, * an exception. Undo signal and retaddr state prior to longjmp. */ sigprocmask(SIG_SETMASK, old_set, NULL); - helper_retaddr =3D 0; + clear_helper_retaddr(); =20 cc =3D CPU_GET_CLASS(cpu); access_type =3D is_write ? MMU_DATA_STORE : MMU_DATA_LOAD; @@ -682,14 +682,15 @@ static void *atomic_mmu_lookup(CPUArchState *env, tar= get_ulong addr, if (unlikely(addr & (size - 1))) { cpu_loop_exit_atomic(env_cpu(env), retaddr); } - helper_retaddr =3D retaddr; - return g2h(addr); + void *ret =3D g2h(addr); + set_helper_retaddr(retaddr); + return ret; } =20 /* Macro to call the above, with local variables from the use context. */ #define ATOMIC_MMU_DECLS do {} while (0) #define ATOMIC_MMU_LOOKUP atomic_mmu_lookup(env, addr, DATA_SIZE, GETPC()) -#define ATOMIC_MMU_CLEANUP do { helper_retaddr =3D 0; } while (0) +#define ATOMIC_MMU_CLEANUP do { clear_helper_retaddr(); } while (0) =20 #define ATOMIC_NAME(X) HELPER(glue(glue(atomic_ ## X, SUFFIX), END)) #define EXTRA_ARGS diff --git a/target/arm/helper-a64.c b/target/arm/helper-a64.c index 44e45a8037..060699b901 100644 --- a/target/arm/helper-a64.c +++ b/target/arm/helper-a64.c @@ -554,7 +554,7 @@ uint64_t HELPER(paired_cmpxchg64_le)(CPUARMState *env, = uint64_t addr, /* ??? Enforce alignment. */ uint64_t *haddr =3D g2h(addr); =20 - helper_retaddr =3D ra; + set_helper_retaddr(ra); o0 =3D ldq_le_p(haddr + 0); o1 =3D ldq_le_p(haddr + 1); oldv =3D int128_make128(o0, o1); @@ -564,7 +564,7 @@ uint64_t HELPER(paired_cmpxchg64_le)(CPUARMState *env, = uint64_t addr, stq_le_p(haddr + 0, int128_getlo(newv)); stq_le_p(haddr + 1, int128_gethi(newv)); } - helper_retaddr =3D 0; + clear_helper_retaddr(); #else int mem_idx =3D cpu_mmu_index(env, false); TCGMemOpIdx oi0 =3D make_memop_idx(MO_LEQ | MO_ALIGN_16, mem_idx); @@ -624,7 +624,7 @@ uint64_t HELPER(paired_cmpxchg64_be)(CPUARMState *env, = uint64_t addr, /* ??? Enforce alignment. */ uint64_t *haddr =3D g2h(addr); =20 - helper_retaddr =3D ra; + set_helper_retaddr(ra); o1 =3D ldq_be_p(haddr + 0); o0 =3D ldq_be_p(haddr + 1); oldv =3D int128_make128(o0, o1); @@ -634,7 +634,7 @@ uint64_t HELPER(paired_cmpxchg64_be)(CPUARMState *env, = uint64_t addr, stq_be_p(haddr + 0, int128_gethi(newv)); stq_be_p(haddr + 1, int128_getlo(newv)); } - helper_retaddr =3D 0; + clear_helper_retaddr(); #else int mem_idx =3D cpu_mmu_index(env, false); TCGMemOpIdx oi0 =3D make_memop_idx(MO_BEQ | MO_ALIGN_16, mem_idx); diff --git a/target/arm/sve_helper.c b/target/arm/sve_helper.c index fd434c66ea..fc0c1755d2 100644 --- a/target/arm/sve_helper.c +++ b/target/arm/sve_helper.c @@ -4125,12 +4125,11 @@ static intptr_t max_for_page(target_ulong base, int= ptr_t mem_off, return MIN(split, mem_max - mem_off) + mem_off; } =20 -static inline void set_helper_retaddr(uintptr_t ra) -{ -#ifdef CONFIG_USER_ONLY - helper_retaddr =3D ra; +#ifndef CONFIG_USER_ONLY +/* These are normally defined only for CONFIG_USER_ONLY in */ +static inline void set_helper_retaddr(uintptr_t ra) { } +static inline void clear_helper_retaddr(void) { } #endif -} =20 /* * The result of tlb_vaddr_to_host for user-only is just g2h(x), @@ -4188,7 +4187,7 @@ static void sve_ld1_r(CPUARMState *env, void *vg, con= st target_ulong addr, if (test_host_page(host)) { mem_off =3D host_fn(vd, vg, host - mem_off, mem_off, mem_max); tcg_debug_assert(mem_off =3D=3D mem_max); - set_helper_retaddr(0); + clear_helper_retaddr(); /* After having taken any fault, zero leading inactive element= s. */ swap_memzero(vd, reg_off); return; @@ -4239,7 +4238,7 @@ static void sve_ld1_r(CPUARMState *env, void *vg, con= st target_ulong addr, } #endif =20 - set_helper_retaddr(0); + clear_helper_retaddr(); memcpy(vd, &scratch, reg_max); } =20 @@ -4312,7 +4311,7 @@ static void sve_ld2_r(CPUARMState *env, void *vg, tar= get_ulong addr, addr +=3D 2 * size; } while (i & 15); } - set_helper_retaddr(0); + clear_helper_retaddr(); =20 /* Wait until all exceptions have been raised to write back. */ memcpy(&env->vfp.zregs[rd], &scratch[0], oprsz); @@ -4341,7 +4340,7 @@ static void sve_ld3_r(CPUARMState *env, void *vg, tar= get_ulong addr, addr +=3D 3 * size; } while (i & 15); } - set_helper_retaddr(0); + clear_helper_retaddr(); =20 /* Wait until all exceptions have been raised to write back. */ memcpy(&env->vfp.zregs[rd], &scratch[0], oprsz); @@ -4372,7 +4371,7 @@ static void sve_ld4_r(CPUARMState *env, void *vg, tar= get_ulong addr, addr +=3D 4 * size; } while (i & 15); } - set_helper_retaddr(0); + clear_helper_retaddr(); =20 /* Wait until all exceptions have been raised to write back. */ memcpy(&env->vfp.zregs[rd], &scratch[0], oprsz); @@ -4494,7 +4493,7 @@ static void sve_ldff1_r(CPUARMState *env, void *vg, c= onst target_ulong addr, if (test_host_page(host)) { mem_off =3D host_fn(vd, vg, host - mem_off, mem_off, mem_max); tcg_debug_assert(mem_off =3D=3D mem_max); - set_helper_retaddr(0); + clear_helper_retaddr(); /* After any fault, zero any leading inactive elements. */ swap_memzero(vd, reg_off); return; @@ -4537,7 +4536,7 @@ static void sve_ldff1_r(CPUARMState *env, void *vg, c= onst target_ulong addr, } #endif =20 - set_helper_retaddr(0); + clear_helper_retaddr(); record_fault(env, reg_off, reg_max); } =20 @@ -4740,7 +4739,7 @@ static void sve_st1_r(CPUARMState *env, void *vg, tar= get_ulong addr, addr +=3D msize; } while (i & 15); } - set_helper_retaddr(0); + clear_helper_retaddr(); } =20 static void sve_st2_r(CPUARMState *env, void *vg, target_ulong addr, @@ -4766,7 +4765,7 @@ static void sve_st2_r(CPUARMState *env, void *vg, tar= get_ulong addr, addr +=3D 2 * msize; } while (i & 15); } - set_helper_retaddr(0); + clear_helper_retaddr(); } =20 static void sve_st3_r(CPUARMState *env, void *vg, target_ulong addr, @@ -4794,7 +4793,7 @@ static void sve_st3_r(CPUARMState *env, void *vg, tar= get_ulong addr, addr +=3D 3 * msize; } while (i & 15); } - set_helper_retaddr(0); + clear_helper_retaddr(); } =20 static void sve_st4_r(CPUARMState *env, void *vg, target_ulong addr, @@ -4824,7 +4823,7 @@ static void sve_st4_r(CPUARMState *env, void *vg, tar= get_ulong addr, addr +=3D 4 * msize; } while (i & 15); } - set_helper_retaddr(0); + clear_helper_retaddr(); } =20 #define DO_STN_1(N, NAME, ESIZE) \ @@ -4932,7 +4931,7 @@ static void sve_ld1_zs(CPUARMState *env, void *vd, vo= id *vg, void *vm, i +=3D 4, pg >>=3D 4; } while (i & 15); } - set_helper_retaddr(0); + clear_helper_retaddr(); =20 /* Wait until all exceptions have been raised to write back. */ memcpy(vd, &scratch, oprsz); @@ -4955,7 +4954,7 @@ static void sve_ld1_zd(CPUARMState *env, void *vd, vo= id *vg, void *vm, tlb_fn(env, &scratch, i * 8, base + (off << scale), oi, ra); } } - set_helper_retaddr(0); + clear_helper_retaddr(); =20 /* Wait until all exceptions have been raised to write back. */ memcpy(vd, &scratch, oprsz * 8); @@ -5133,7 +5132,7 @@ static inline void sve_ldff1_zs(CPUARMState *env, voi= d *vd, void *vg, void *vm, tlb_fn(env, vd, reg_off, addr, oi, ra); =20 /* The rest of the reads will be non-faulting. */ - set_helper_retaddr(0); + clear_helper_retaddr(); } =20 /* After any fault, zero the leading predicated false elements. */ @@ -5175,7 +5174,7 @@ static inline void sve_ldff1_zd(CPUARMState *env, voi= d *vd, void *vg, void *vm, tlb_fn(env, vd, reg_off, addr, oi, ra); =20 /* The rest of the reads will be non-faulting. */ - set_helper_retaddr(0); + clear_helper_retaddr(); } =20 /* After any fault, zero the leading predicated false elements. */ @@ -5299,7 +5298,7 @@ static void sve_st1_zs(CPUARMState *env, void *vd, vo= id *vg, void *vm, i +=3D 4, pg >>=3D 4; } while (i & 15); } - set_helper_retaddr(0); + clear_helper_retaddr(); } =20 static void sve_st1_zd(CPUARMState *env, void *vd, void *vg, void *vm, @@ -5318,7 +5317,7 @@ static void sve_st1_zd(CPUARMState *env, void *vd, vo= id *vg, void *vm, tlb_fn(env, vd, i * 8, base + (off << scale), oi, ra); } } - set_helper_retaddr(0); + clear_helper_retaddr(); } =20 #define DO_ST1_ZPZ_S(MEM, OFS) \ --=20 2.17.1 From nobody Mon Oct 6 09:20:11 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1562664252; cv=none; d=zoho.com; s=zohoarc; b=aIV6Ps646Enmlo+ixVvoabjB8RSlooAjv2RgPI5x5r7atpiYLRnQCszcx9pXHsImRjKGDr+kNsD07ZG4V8v6vO0yE2GvhUNVMKpKUEEFmrQyBJbChnMqoU1vTDe1cdPIMo5GDy0vy46wvB6+7zVpDEDYjgjwvOg9ynjh3c+nwB0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1562664252; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=GlX1ghA7K5MFvwvh9tPMB+W8XhZilfwCsvalOImEzfU=; b=YKLm2lTlsEElmWHSSJmscPYr7C2fmc0QbsmM7sWc2pIpL00FITXr6/LVVAhuZNP/eo9OUjUJxXS6IolyDjTIoCu5LWwfIK1lQmSLPV/2Fk7YinUOSk1lU8J+a14ct3le7xXQ94LgeGJbAvafM0nMBMRacR8VIVUyVP+4EwS6JbA= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1562664252306542.7878400253918; Tue, 9 Jul 2019 02:24:12 -0700 (PDT) Received: from localhost ([::1]:48084 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkmM7-0002Gz-Bm for importer@patchew.org; Tue, 09 Jul 2019 05:24:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43453) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkmJQ-00070F-Vq for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hkmJP-0001xU-3d for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:24 -0400 Received: from mail-io1-xd41.google.com ([2607:f8b0:4864:20::d41]:37378) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hkmJO-0001tL-M3 for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:23 -0400 Received: by mail-io1-xd41.google.com with SMTP id q22so19834992iog.4 for ; Tue, 09 Jul 2019 02:21:17 -0700 (PDT) Received: from localhost.localdomain ([172.56.12.212]) by smtp.gmail.com with ESMTPSA id c17sm17613817ioo.82.2019.07.09.02.21.11 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 09 Jul 2019 02:21:15 -0700 (PDT) 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; bh=GlX1ghA7K5MFvwvh9tPMB+W8XhZilfwCsvalOImEzfU=; b=Hcw2+UwBgkll2NGyXaZofgHSi0VosxBMRToLyCRg31MJyEYgk41VvS+vvK6NqS1Pmy D3PpF4E7FeHa1gNEm6Fx+KohEpzuO9ef3V5Uf8O7dU9ACuV0ezdcW9LZqSTl8j3nfEJR mPfa56HWHf2jrKwIi+yZ2CyXR9vyXrQbRiGqkB4mAXb0VWNEPMUAF4qTkavJxJBBmqLK 2hcRdPxbCgpjdZXcda/sIKjf+/5HezhBVzKyxKDlPEzBuHwxFWvFpps1uc9PXXmTn8ng c74hnb9ASHXQXj4vKrMFCkPodim2UajeIPSuzZgQGtQChxBglFOy9A3vYVxoTYE3uL3T 197g== 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; bh=GlX1ghA7K5MFvwvh9tPMB+W8XhZilfwCsvalOImEzfU=; b=RUsRoLOVg12Gb/SXrYNyJADlYfoOtrR95Dhb9NYJSqNYE25KbRNsRLhu14wOAQnn3q Jqq+D1scJn+g2hHxwJud9AMAugYR62ep/idRN7J3/KsdRhgfIuOFg6qxWqdccuR7n7ey zW/nKNrTXnRUZs5+Wg3D4wgWxKA+CKqRw/Svkvx0EjwmEi81HEHZyLopoJlCnpZaZexd bRWtJVRrnhQNYrDUvE0AHugr1OhHY70MPinei/6PxfzeSFFlkNZ28Z5EpwHKC8Rn2S2K IWpVG62GzskEDqZu6Qv4IOUdZjypG/k2oNsDnVcfZtiqZ9XviNH1/7bAKgsuyLNxH+y9 Xu1Q== X-Gm-Message-State: APjAAAUcTTn5QLmv+MtrUyCPNBrK9k8fcEIp9Cd1+uz/TI0Rd75hQ85H //lYoaxsWfqelfQfyfc70L6ghMatdP0= X-Google-Smtp-Source: APXvYqyEoSwDcgx+6jnGaPeSWKMSvSbHpyp6qKOMwqVvVGOfpB0b3zmM1kAtqj300Tr99E+ViOKSMQ== X-Received: by 2002:a02:c492:: with SMTP id t18mr27107880jam.67.1562664076190; Tue, 09 Jul 2019 02:21:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 9 Jul 2019 11:20:47 +0200 Message-Id: <20190709092049.13771-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190709092049.13771-1-richard.henderson@linaro.org> References: <20190709092049.13771-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::d41 Subject: [Qemu-devel] [PATCH 3/5] tcg: Remove cpu_ld*_code_ra 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: lvivier@redhat.com, peter.maydell@linaro.org, alex.bennee@linaro.org, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" These functions are not used, and are not usable in the context of code generation, because we never have a helper return address to pass in to them. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- include/exec/cpu_ldst_useronly_template.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/exec/cpu_ldst_useronly_template.h b/include/exec/cpu_l= dst_useronly_template.h index e65733f7e2..8c7a2c6cd7 100644 --- a/include/exec/cpu_ldst_useronly_template.h +++ b/include/exec/cpu_ldst_useronly_template.h @@ -72,6 +72,7 @@ glue(glue(cpu_ld, USUFFIX), MEMSUFFIX)(CPUArchState *env,= abi_ptr ptr) return glue(glue(ld, USUFFIX), _p)(g2h(ptr)); } =20 +#ifndef CODE_ACCESS static inline RES_TYPE glue(glue(glue(cpu_ld, USUFFIX), MEMSUFFIX), _ra)(CPUArchState *env, abi_ptr ptr, @@ -83,6 +84,7 @@ glue(glue(glue(cpu_ld, USUFFIX), MEMSUFFIX), _ra)(CPUArch= State *env, clear_helper_retaddr(); return ret; } +#endif =20 #if DATA_SIZE <=3D 2 static inline int @@ -96,6 +98,7 @@ glue(glue(cpu_lds, SUFFIX), MEMSUFFIX)(CPUArchState *env,= abi_ptr ptr) return glue(glue(lds, SUFFIX), _p)(g2h(ptr)); } =20 +#ifndef CODE_ACCESS static inline int glue(glue(glue(cpu_lds, SUFFIX), MEMSUFFIX), _ra)(CPUArchState *env, abi_ptr ptr, @@ -107,7 +110,8 @@ glue(glue(glue(cpu_lds, SUFFIX), MEMSUFFIX), _ra)(CPUAr= chState *env, clear_helper_retaddr(); return ret; } -#endif +#endif /* CODE_ACCESS */ +#endif /* DATA_SIZE <=3D 2 */ =20 #ifndef CODE_ACCESS static inline void --=20 2.17.1 From nobody Mon Oct 6 09:20:11 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1562664268; cv=none; d=zoho.com; s=zohoarc; b=GtnrIVceRloQinpwSqbxgaWJtUlvhx/nEmEodNnuuwhRHlhPmgZjxwI7A8xT6riRlhoMkHiBa2xjQtpWO52FT4bRk4zuQofapgysQ1863ynAB456bWlwqJkU+c+pZHccieOmrvejvrTf0LN9NURlJjdGWejaROwCb5e9v9HNkt4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1562664268; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=RngKFqfhqHf/c/CCpGl+L7AgkqksgPe6OGO3ZGF2urY=; b=Q1+H/NZyReDTu8lr1gp3cLu1At12GHdaD6PcXocULpJlf4K4kefkzVx9lvji+B6jVvJoeHOc1uRbJ40MZfrb+zTCRSdKQz3IMLCXCq7Apvigbhq9AS743R4KTxD2KUbLYffQ2PaeI+2/A2T9aXWtToVboA9RiysqexwqcX9nSHg= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1562664268143643.438742798218; Tue, 9 Jul 2019 02:24:28 -0700 (PDT) Received: from localhost ([::1]:48088 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkmMM-0002NO-QL for importer@patchew.org; Tue, 09 Jul 2019 05:24:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43475) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkmJS-00070r-W7 for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hkmJR-0001ym-14 for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:26 -0400 Received: from mail-io1-xd32.google.com ([2607:f8b0:4864:20::d32]:35762) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hkmJP-0001wI-3O for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:24 -0400 Received: by mail-io1-xd32.google.com with SMTP id m24so32165953ioo.2 for ; Tue, 09 Jul 2019 02:21:21 -0700 (PDT) Received: from localhost.localdomain ([172.56.12.212]) by smtp.gmail.com with ESMTPSA id c17sm17613817ioo.82.2019.07.09.02.21.16 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 09 Jul 2019 02:21:19 -0700 (PDT) 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; bh=RngKFqfhqHf/c/CCpGl+L7AgkqksgPe6OGO3ZGF2urY=; b=saez24hHd8iicEmlHJ4fN3ejAZ+9GHS4NWTCDaH0fTTTG8oFJB4OTnp8F2t13HANyM Cwgr5cGCc8CdH5e5T5H7L24UeIqjSgq7c1qpJd9NbpVzI6vPoC7r+G9rnB8LjXAeCXXK RS9PFdddDtZw+Zho+ZzrJa5gOYoTR1kxTzNyBclXVRbGtbmSobcGpxGqugRowoHVW0wz CtAkCWO1G0Elo6l7HdtHp+HW9X7dMHfKvXFm6C1l7FostlHEaEIORmoVaWmcwweqNibS E0+Q/9fBTLM0y76+Yu1G/+K4ODVw8kfbR7JKWgEeoEvrJhxlyE8yWfljv+1rqPEYYzU7 R3tg== 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; bh=RngKFqfhqHf/c/CCpGl+L7AgkqksgPe6OGO3ZGF2urY=; b=oBMN1HueneJWDiJgC6AErL80Ti3CpX1+LYphLTU0+lh2FQV0F1GAC8y7gbYsg5fkQ9 XHh0SYQkvL+OUPobrR9zdJw3hPzEMNNjiWbnLOhTlHH89Y/mGZ1FYGbQeoy5zHkqf6aB Qkm4z54Xxn7U7aZLHlaHb91dnxFWxra0OB5dNjalcmwYSLD3d/sWCNWqIe3Ho9pqApYN dG158Q7mLXyU1KFqlQYkfMX0dR+ana10d9OyRMP3j5bGetmLDbAOguwfVkdpW0MbhiSa I9B+/KDsHl4s+fjtby/7dihOIVBkbjQOQauMpDq8dG6JjpZyC13YVsyzvZ1Q/zd1VHah qP1g== X-Gm-Message-State: APjAAAU9nrT36YP5h/mkSeAUFYaeypVkaBL6UPZY2tNxt9K4EiRJxHB6 bT4tk2vBmgQpg9DmWlSDhFLyYSBfKlw= X-Google-Smtp-Source: APXvYqyBqLpFLoXDJnQF76+k/Ql0lBVmGQNA6t6pfbAWgLVt6/F5LAHxcH+MT5Xw2TUkQ1zuRxJXFg== X-Received: by 2002:a5d:87da:: with SMTP id q26mr24457621ios.193.1562664080384; Tue, 09 Jul 2019 02:21:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 9 Jul 2019 11:20:48 +0200 Message-Id: <20190709092049.13771-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190709092049.13771-1-richard.henderson@linaro.org> References: <20190709092049.13771-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::d32 Subject: [Qemu-devel] [PATCH 4/5] tcg: Remove duplicate #if !defined(CODE_ACCESS) 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: lvivier@redhat.com, peter.maydell@linaro.org, alex.bennee@linaro.org, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This code block is already surrounded by #ifndef CODE_ACCESS. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- include/exec/cpu_ldst_useronly_template.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/exec/cpu_ldst_useronly_template.h b/include/exec/cpu_l= dst_useronly_template.h index 8c7a2c6cd7..d663826ac2 100644 --- a/include/exec/cpu_ldst_useronly_template.h +++ b/include/exec/cpu_ldst_useronly_template.h @@ -118,11 +118,9 @@ static inline void glue(glue(cpu_st, SUFFIX), MEMSUFFIX)(CPUArchState *env, abi_ptr ptr, RES_TYPE v) { -#if !defined(CODE_ACCESS) trace_guest_mem_before_exec( env_cpu(env), ptr, trace_mem_build_info(SHIFT, false, MO_TE, true)); -#endif glue(glue(st, SUFFIX), _p)(g2h(ptr), v); } =20 --=20 2.17.1 From nobody Mon Oct 6 09:20:11 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1562664439; cv=none; d=zoho.com; s=zohoarc; b=bmcK1qih5f3bIBLZgMBud4YK8KZtNbNGe1auMCgwfutUF1A66lp1844b9bXMFzs8dCzOpqEckKmLl4cnepCHviO/zKhjvTRDyiaEIPIwOHSWvb3KVOwOyTW0bLu9J2PYo7No17m8S50mQSV5e4b2V/76gVtAMbBBfgqvaTYIDxM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1562664439; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=kUYtEVCtbbNfYNqyJu/DwHfi1v5PGfant7R2M4Nf9u8=; b=In3/q6Qbd2hZtcWltZJW8T66M09/gLepL2o+GYOZBW3ZjYcdZU2CiVspKpP2kB83XcczeEpPh8NoPx5bYDu4d+W7Z4vXpE+r03vPr9D5Mjgff9a9cVfY4oyFmP9jqy8q3CvCY7SwGiccBDNXwyMKFUNWUj4SDN78ZkTVI5UYwbE= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1562664439221175.99363743200786; Tue, 9 Jul 2019 02:27:19 -0700 (PDT) Received: from localhost ([::1]:48108 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkmP8-00058B-5P for importer@patchew.org; Tue, 09 Jul 2019 05:27:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43506) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hkmJW-00072R-Oi for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hkmJV-00024Z-3t for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:30 -0400 Received: from mail-io1-xd44.google.com ([2607:f8b0:4864:20::d44]:34861) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hkmJS-000210-V3 for qemu-devel@nongnu.org; Tue, 09 Jul 2019 05:21:28 -0400 Received: by mail-io1-xd44.google.com with SMTP id m24so32166341ioo.2 for ; Tue, 09 Jul 2019 02:21:25 -0700 (PDT) Received: from localhost.localdomain ([172.56.12.212]) by smtp.gmail.com with ESMTPSA id c17sm17613817ioo.82.2019.07.09.02.21.20 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 09 Jul 2019 02:21:24 -0700 (PDT) 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; bh=kUYtEVCtbbNfYNqyJu/DwHfi1v5PGfant7R2M4Nf9u8=; b=PXqwmcqId/ArQolYsEqS2pncOb0V2THv1ejejqPpn4Jcf0f5St0oe9uIjiBfWgC+wC 1uc6dGyI2fnLp6ywHdLzbeTXpowSV+v9RZZCeFMOsBGjNz5rkinlxeP2FHCOhVrA9jVl aPfDs3zUZhBEOHY+eOohvIsoPvaQqBTd7LE3AHCF0BVd65PCUoQYA7opghOkc6DmUuS3 zMcpjuAVr+MKUxMtHbK4opUnoE48vK1DL8vCZmd7X6YNfJBDtBLcy/s01eMWIxMwJgWl +rqZ3G8SqP6kgGxidc5nQ3v/slS5Zzd5KVM9098ehdEw8zdfDEG0B+o88vCd2BfSEFqI Y/PA== 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; bh=kUYtEVCtbbNfYNqyJu/DwHfi1v5PGfant7R2M4Nf9u8=; b=PYV56qTyGNoMX11vRMFaANKPALeVrcs3pTWpiA8R/LXN2C8N3WTOc4PTSb6qE1Z8Af zarcCp3OmxeUlHCRAMwRh5HVQqE274ZxPnNNfcEQJh2L0vDIgwGLyl+ACD31KlYUVK8Z eLtYcBfvjFSxs0Z7kWWkPakZ4njR1pxitGTcXAz3fWj2Ocyua290TNu07fvWEYhhPhou SIipNs/gL33f/DpjVI6Zb7NZ0xWJLvKiCsj788VpcFOgKsHm19Dkj8at4KmLcbmqddqZ NxxFuhs0mwxeVAaIlYCiy3tq9JGIG9Qf+Kl9Yxwa3dXE/AqjJZ/ziJJ1kx83FiRz50H1 i2oQ== X-Gm-Message-State: APjAAAUaphUpire/afQkrcaYt2ScO/UZ/oiriztNeHASF96Johl12BM9 j97j1FAuNKmsiBOWrSWiG0Vh4eL6hdk= X-Google-Smtp-Source: APXvYqwcOv4bWXLxEQ8rjMuPi/S/dIgM895kzPQcyDQIB9/e/Khg4V2UJCwE80glcXDd6PctGMa2Yg== X-Received: by 2002:a02:6616:: with SMTP id k22mr27315822jac.100.1562664085043; Tue, 09 Jul 2019 02:21:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 9 Jul 2019 11:20:49 +0200 Message-Id: <20190709092049.13771-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190709092049.13771-1-richard.henderson@linaro.org> References: <20190709092049.13771-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::d44 Subject: [Qemu-devel] [PATCH 5/5] tcg: Release mmap_lock on translation fault 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: lvivier@redhat.com, peter.maydell@linaro.org, alex.bennee@linaro.org, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Turn helper_retaddr into a multi-state flag that may now also indicate when we're performing a read on behalf of the translator. In this case, release the mmap_lock before the longjmp back to the main cpu loop, and thereby avoid a failing assert therein. Fixes: https://bugs.launchpad.net/qemu/+bug/1832353 Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Tested-by: Alex Benn=C3=A9e --- include/exec/cpu_ldst_useronly_template.h | 20 +++++-- accel/tcg/user-exec.c | 65 ++++++++++++++++------- 2 files changed, 62 insertions(+), 23 deletions(-) diff --git a/include/exec/cpu_ldst_useronly_template.h b/include/exec/cpu_l= dst_useronly_template.h index d663826ac2..35caae8ca6 100644 --- a/include/exec/cpu_ldst_useronly_template.h +++ b/include/exec/cpu_ldst_useronly_template.h @@ -64,12 +64,18 @@ static inline RES_TYPE glue(glue(cpu_ld, USUFFIX), MEMSUFFIX)(CPUArchState *env, abi_ptr ptr) { -#if !defined(CODE_ACCESS) +#ifdef CODE_ACCESS + RES_TYPE ret; + set_helper_retaddr(1); + ret =3D glue(glue(ld, USUFFIX), _p)(g2h(ptr)); + clear_helper_retaddr(); + return ret; +#else trace_guest_mem_before_exec( env_cpu(env), ptr, trace_mem_build_info(SHIFT, false, MO_TE, false)); -#endif return glue(glue(ld, USUFFIX), _p)(g2h(ptr)); +#endif } =20 #ifndef CODE_ACCESS @@ -90,12 +96,18 @@ glue(glue(glue(cpu_ld, USUFFIX), MEMSUFFIX), _ra)(CPUAr= chState *env, static inline int glue(glue(cpu_lds, SUFFIX), MEMSUFFIX)(CPUArchState *env, abi_ptr ptr) { -#if !defined(CODE_ACCESS) +#ifdef CODE_ACCESS + int ret; + set_helper_retaddr(1); + ret =3D glue(glue(ld, USUFFIX), _p)(g2h(ptr)); + clear_helper_retaddr(); + return ret; +#else trace_guest_mem_before_exec( env_cpu(env), ptr, trace_mem_build_info(SHIFT, true, MO_TE, false)); -#endif return glue(glue(lds, SUFFIX), _p)(g2h(ptr)); +#endif } =20 #ifndef CODE_ACCESS diff --git a/accel/tcg/user-exec.c b/accel/tcg/user-exec.c index 4384b59a4d..5adea629de 100644 --- a/accel/tcg/user-exec.c +++ b/accel/tcg/user-exec.c @@ -64,27 +64,55 @@ static inline int handle_cpu_signal(uintptr_t pc, sigin= fo_t *info, CPUState *cpu =3D current_cpu; CPUClass *cc; unsigned long address =3D (unsigned long)info->si_addr; - MMUAccessType access_type; + MMUAccessType access_type =3D is_write ? MMU_DATA_STORE : MMU_DATA_LOA= D; =20 - /* We must handle PC addresses from two different sources: - * a call return address and a signal frame address. - * - * Within cpu_restore_state_from_tb we assume the former and adjust - * the address by -GETPC_ADJ so that the address is within the call - * insn so that addr does not accidentally match the beginning of the - * next guest insn. - * - * However, when the PC comes from the signal frame, it points to - * the actual faulting host insn and not a call insn. Subtracting - * GETPC_ADJ in that case may accidentally match the previous guest in= sn. - * - * So for the later case, adjust forward to compensate for what - * will be done later by cpu_restore_state_from_tb. - */ - if (helper_retaddr) { + switch (helper_retaddr) { + default: + /* + * Fault during host memory operation within a helper function. + * The helper's host return address, saved here, gives us a + * pointer into the generated code that will unwind to the + * correct guest pc. + */ pc =3D helper_retaddr; - } else { + break; + + case 0: + /* + * Fault during host memory operation within generated code. + * (Or, a unrelated bug within qemu, but we can't tell from here). + * + * We take the host pc from the signal frame. However, we cannot + * use that value directly. Within cpu_restore_state_from_tb, we + * assume PC comes from GETPC(), as used by the helper functions, + * so we adjust the address by -GETPC_ADJ to form an address that + * is within the call insn, so that the address does not accidenti= ally + * match the beginning of the next guest insn. However, when the + * pc comes fromt he signal frame it points to the actual faulting + * host memory insn and not a call insn. + * + * Therefore, adjust to compensate for what will be done later + * by cpu_restore_state_from_tb. + */ pc +=3D GETPC_ADJ; + break; + + case 1: + /* + * Fault during host read for translation, or loosely, "execution". + *=20 + * The guest pc is already pointing to the start of the TB for whi= ch + * code is being generated. If the guest translator manages the + * page crossings correctly, this is exactly the correct address + * (and if it doesn't there's little we can do about that here). + * Therefore, do not trigger the unwinder. + * + * Like tb_gen_code, release the memory lock before cpu_loop_exit. + */ + pc =3D 0; + access_type =3D MMU_INST_FETCH; + mmap_unlock(); + break; } =20 /* For synchronous signals we expect to be coming from the vCPU @@ -155,7 +183,6 @@ static inline int handle_cpu_signal(uintptr_t pc, sigin= fo_t *info, clear_helper_retaddr(); =20 cc =3D CPU_GET_CLASS(cpu); - access_type =3D is_write ? MMU_DATA_STORE : MMU_DATA_LOAD; cc->tlb_fill(cpu, address, 0, access_type, MMU_USER_IDX, false, pc); g_assert_not_reached(); } --=20 2.17.1