From nobody Mon Feb 9 11:44:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1648110653597724.8463726054601; Thu, 24 Mar 2022 01:30:53 -0700 (PDT) Received: from localhost ([::1]:46406 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nXIrs-0001Lj-8v for importer@patchew.org; Thu, 24 Mar 2022 04:30:52 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52308) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhy-0006Er-6i for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:38 -0400 Received: from mout.kundenserver.de ([212.227.126.187]:51307) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhw-0003TU-4H for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:37 -0400 Received: from quad ([82.142.12.150]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MwQCb-1oNTsn0nKf-00sNcl; Thu, 24 Mar 2022 09:20:20 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 01/10] linux-user: Fix syscall parameter handling for MIPS n32 Date: Thu, 24 Mar 2022 09:20:07 +0100 Message-Id: <20220324082016.3463521-2-laurent@vivier.eu> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220324082016.3463521-1-laurent@vivier.eu> References: <20220324082016.3463521-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:Qx7s9Bv8r1ulMZjDoATFEUOEAO5q9gD3j/ccSTSxF/DgSC3xpKu Ic9xxJQtQC/siOVZyyYvLdwDthqmnlrA+IxKIgA/B4nOnEZnNjqy26FD1NIQ3LlO1oTkELM K8sDJB3RXT3rpHPnmAzdl60V7eJBug2dEsCHwOqjJAmO9/J6UDo/zOp2Dba9i0vix7kEipj sNY2MIXg4airA6eKkBkgg== X-UI-Out-Filterresults: notjunk:1;V03:K0:1sLvegZV+XM=:GDbxdMZdfz+9NYq3flkA09 Z5UA03aUuHQJZaKpkSS1T/4bpUwuW0aNN0ZYArj9BvUrMuAvBCiPKDGHSsS+610Kq4n+wpu1v ThLDmPqhc7OYKlXYZ7VQ6mKQvKOlgcXf2tdmBhKOTlX9oFUnt31zcrhxO52jVonXXpvGicVo1 /t/54007EhFthsRAoiAf9kujWRvEq0JWKVmbxjHEdBuU//xyFEh0fF3to3pyUIQBnXVyXEpqP SfkTLq8buwKfeY4vw/nEyDBCPu4TjCz0g0pLI3gIvbDooBpjJkZLWJwv6QwNAgiittrC4s/8E iRqOMxLhpcFwDuxdGvGfgRpe4BlqWaIGW0/Qtr9H9SotLGXCM0oGjpH4yMCWEHogO5cs9w6mD sPRE84d4dkZK8rMekqzQy8I4wMv62N7BmnGVaihKaxcRRL+zzoTiCjbEOV0Fl+XZ2aMJi/Z1w 0l3mrJiAU+pJ0sDvJMoAzdyfq7bsnCHcXBE31N4vVmY/1/8K0CDgbr1k4fGXnNlVerjHfX+70 TKjXxh2OdT7mNspuLpMT2+IG1zZetjFpL32KKOlD9it+qVUMb8PkoZg2lSJtHFfUpeIf/l7Tf gyK6vve6KBRYVKzQ+2MGaDCeXfdXcRIglcy4yXP/Gx9AUwEKFXeCTqyXs9/Vi2fZ5t8tw4Q/N KPN69evUDKOzZa+XCRyibeCKmeEaCEXhQiJNsmq8owrXtY6Hqzdx/fGGhs1CHUIj0D/Y= Received-SPF: pass (zohomail.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; Received-SPF: none client-ip=212.227.126.187; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Andreas=20K=20=2E=20H=C3=BCttel?= , Richard Henderson , Laurent Vivier , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , WANG Xuerui Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1648110655725100001 From: WANG Xuerui The MIPS n32 ABI is basically n64 with the address space (i.e. pointer width) shrinked to 32 bits. Meanwhile the current code treats it as o32-like based on TARGET_ABI_BITS, which causes problems with n32 syscalls utilizing 64-bit offsets, like pread64, affecting most (if not all) recently built n32 binaries. This partially solves issue #909 ("qemu-mipsn32(el) user mode emulator fails to execute any recently built n32 binaries"); with this change applied, the built qemu-mipsn32el is able to progress beyond the pread64, and finish _dl_start_user for the "getting ld.so load libc.so" case. The program later dies with SIGBUS, though, due to _dl_start_user not maintaining stack alignment after removing ld.so itself from argv, and qemu-user starting to enforce alignment recently, but that is orthogonal to the issue here; the more common case of chrooting is working, verified with my own-built Gentoo n32 sysroot. (Depending on the exact ISA used, one may have to explicitly specify QEMU_CPU, which is the case for my chroot.) Buglink: https://gitlab.com/qemu-project/qemu/-/issues/909 Signed-off-by: WANG Xuerui Cc: Laurent Vivier Cc: Philippe Mathieu-Daud=C3=A9 Cc: Jiaxun Yang Cc: Andreas K. H=C3=BCttel Reviewed-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20220320052259.1610883-1-xen0n@gentoo.org> Signed-off-by: Laurent Vivier --- linux-user/user-internals.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/linux-user/user-internals.h b/linux-user/user-internals.h index a8fdd6933b23..ee152ccfaa8f 100644 --- a/linux-user/user-internals.h +++ b/linux-user/user-internals.h @@ -112,7 +112,7 @@ static inline int is_error(abi_long ret) return (abi_ulong)ret >=3D (abi_ulong)(-4096); } =20 -#if TARGET_ABI_BITS =3D=3D 32 +#if (TARGET_ABI_BITS =3D=3D 32) && !defined(TARGET_ABI_MIPSN32) static inline uint64_t target_offset64(uint32_t word0, uint32_t word1) { #ifdef TARGET_WORDS_BIGENDIAN @@ -121,7 +121,7 @@ static inline uint64_t target_offset64(uint32_t word0, = uint32_t word1) return ((uint64_t)word1 << 32) | word0; #endif } -#else /* TARGET_ABI_BITS =3D=3D 32 */ +#else /* TARGET_ABI_BITS =3D=3D 32 && !defined(TARGET_ABI_MIPSN32) */ static inline uint64_t target_offset64(uint64_t word0, uint64_t word1) { return word0; @@ -136,7 +136,7 @@ static inline int regpairs_aligned(void *cpu_env, int n= um) { return ((((CPUARMState *)cpu_env)->eabi) =3D=3D 1) ; } -#elif defined(TARGET_MIPS) && (TARGET_ABI_BITS =3D=3D 32) +#elif defined(TARGET_MIPS) && defined(TARGET_ABI_MIPSO32) static inline int regpairs_aligned(void *cpu_env, int num) { return 1; } #elif defined(TARGET_PPC) && !defined(TARGET_PPC64) /* --=20 2.35.1 From nobody Mon Feb 9 11:44:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1648110232051916.2282237353874; Thu, 24 Mar 2022 01:23:52 -0700 (PDT) Received: from localhost ([::1]:60830 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nXIl4-0000EW-PH for importer@patchew.org; Thu, 24 Mar 2022 04:23:50 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52192) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhm-0005wJ-4A for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:26 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:37997) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhk-0003OF-Ao for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:25 -0400 Received: from quad ([82.142.12.150]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1Mxlmw-1oHAUs2r8g-00zHFM; Thu, 24 Mar 2022 09:20:20 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 02/10] linux-user/alpha: Fix sigsuspend for big-endian hosts Date: Thu, 24 Mar 2022 09:20:08 +0100 Message-Id: <20220324082016.3463521-3-laurent@vivier.eu> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220324082016.3463521-1-laurent@vivier.eu> References: <20220324082016.3463521-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:43bgUBuOuPLymVy2drw/4Xgq5LQTluwPpkoFEOmKPZ2duv5PnCW ZpWiF3dZW8gLgJTbVsHNNtYh8Naq93PJBY73MxKhwVI41r3fb6rWYNU+ok1rCE2CkGD8Fj+ TozOzgVhC63z8EA6iNQT6RpT3+lsmPsI3vP4Brup6pxdJBEj0qf8Y+lVtMt3vcwZLfaVviT CE+a5hG+0nyJLxAmkvcgg== X-UI-Out-Filterresults: notjunk:1;V03:K0:h7SI9Mo7S84=:P6PGxjkOyd+M02QKJv7UCP etm+Kj0tZ074dvtbpTeo0WKtxdZvkw0P1gVuTglaTnoD2+i1kcNWTq2OZub/nNG2DpFWG/C2c GeTsHIrmYeWN9Fz0jlb2cfLJfQYD/dQwx2dgSsy/yZMZL6VlLdjAYn9H5vDttiKGqq8gYsxhx smQxIm+uXgBT/VS4nW6o+Xj8GZZaYYkoDB1PcxAS0C46aO2ByXjARnjd34BbTA18TsP2aQ7e2 S7lWEFi6Qdol/YbT2AcdCAi0jBjUIewU7tJDYS0+F+EHYPU2Ro/x/wh2gjLszsuTUn9e/JqFW Z5Ibr5lO/vUPjdAtwmDQTaHiwUI6/vfBhuqjZafHJ3Mz7ULNXckGIP4b/s2ovwh9snbzHjvAL ahwy6cQARp81HRA0jcz4LRMaFeZ/TOL8HmsI+TRfJ0qTjECO9wR/gu8/siEzMv3YZyBZWEjEs 2ERDoSE4yglRGaf/4yWOuLFVIT7to12aXtUIvrCiSNrZuTMZDCwOHTMMsEWt6bFybv/EjkWGF LhavNZVUEhf1WJ6Is4jhZQMyDYA4rPXXX58xe1Sqe8GY0Dkl/Xeym8PR3pvsffXOxgGuR6gNS Wupd49ffLxJAcGdrV2BSrsZ92I85j1MFOHYijUxz1/qFFOZSAnZ4pDNW6fqvzv4kPL0ck8+3+ A3xSAiPI+KEzE+Lo5GoFMjUyav9gOMVUJUEyxdINMibJaeRhxKtdoVXgvfVORx4Le+bE= Received-SPF: pass (zohomail.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; Received-SPF: none client-ip=212.227.126.135; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1648110265769100001 Content-Type: text/plain; charset="utf-8" From: Richard Henderson On alpha, the sigset argument for sigsuspend is in a register. When we drop that into memory that happens in host-endianness, but target_to_host_old_sigset will treat it as target-endianness. Signed-off-by: Richard Henderson Reviewed-by: Laurent Vivier Message-Id: <20220315084308.433109-2-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/syscall.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 75ed71eb461d..77cd88b53785 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -9559,7 +9559,8 @@ static abi_long do_syscall1(void *cpu_env, int num, a= bi_long arg1, { TaskState *ts =3D cpu->opaque; #if defined(TARGET_ALPHA) - abi_ulong mask =3D arg1; + /* target_to_host_old_sigset will bswap back */ + abi_ulong mask =3D tswapal(arg1); target_to_host_old_sigset(&ts->sigsuspend_mask, &mask); #else if (!(p =3D lock_user(VERIFY_READ, arg1, sizeof(target_sigset_= t), 1))) --=20 2.35.1 From nobody Mon Feb 9 11:44:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16481102096771004.7224150010057; Thu, 24 Mar 2022 01:23:29 -0700 (PDT) Received: from localhost ([::1]:60838 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nXIkh-0000El-LF for importer@patchew.org; Thu, 24 Mar 2022 04:23:28 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52218) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhn-0005ws-00 for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:27 -0400 Received: from mout.kundenserver.de ([212.227.126.131]:50943) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhk-0003OW-Ao for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:26 -0400 Received: from quad ([82.142.12.150]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1Ml6Zo-1nuUun0f8O-00lTl8; Thu, 24 Mar 2022 09:20:21 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 03/10] linux-user: Split out helpers for sigsuspend Date: Thu, 24 Mar 2022 09:20:09 +0100 Message-Id: <20220324082016.3463521-4-laurent@vivier.eu> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220324082016.3463521-1-laurent@vivier.eu> References: <20220324082016.3463521-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:h/hiLCYON9mf8iCUsZb+jRyt3rv6XTzgK0T3aX4p84MSt87Vob8 oRHX5kpanZA0ZDmU9NSDBxzbHNbPLffD684tuYuh5037wq5D41+kUDB0DVYe3e0DKAgBFde jPDUtgC86834AsAjjYIKYKoW6CdBMIlzR3kVl0DHfxTsS/QayZSWcoJF2eG7N6lPFT58C9t BhG6n3D45Sj7Auh1RsF6w== X-UI-Out-Filterresults: notjunk:1;V03:K0:lAP70PINeZE=:EyxbdLcmu0vMgirTlViHdN H6u6EoCiG/VvqGBsCFwuMCPG8i33eUzpnOBjmSzCeEXlmKE5O1xn/zKYj9MJbk5XwmBamCeJA UF06r2EoYZPTdmkrFWIw6BruW5/CqfCJSXP1W11W33bBlotzuArjREMmhn3mPkXmc1oArsJJm QKJnxomoNVPn2aeTCKargey0JN9RaDd0zIEbghpnII6mgYAmbBFarcUw5rGHjAx3vEjYM1her KlOV1UmvEl7grbHkrKMKP9/OK5SPe05yUTUpeeIfeF4KhOH3JYIDlXry99R28nsX/sHLKs+S6 jiRT13Y3fWIVGjTGRBBkkVfJgDWlGXEqQ64YbBL94y0XZI6M3YnDjzOX+eVkH5ewCE0VPlknY MrTN9Zep10zdZ19LcaUb6kum6bVgwKQ0ImY19QfvBiITa/JPgpcI2piADyvAuU/2c2s68RmWX K3Cx4nw1F8TJoVBOPois5VE8TMf7H9pM2WfgSRR8NghVuV6T+juL82PYn8HCsTxTrZvXp0TCV EPKtqxnraG41Vu36kmhHqz++AZt39yhHv5DC+JWFB/GtVNmhHQWxYruP3I0f3zqyo214E0Aza wMteeCPrFVFMmtVCXbUXJaG+j+936hRzLocn43jbua4H9yLRVBheA34pCBVq5xFlvfzdMOJSX hieYP/vyDEE+Ju2HsTvjk5PpaS0MocftavQTyKxRms30TFu9hz8ztx9B61gMgp3Wwz4g= Received-SPF: pass (zohomail.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; Received-SPF: none client-ip=212.227.126.131; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1648110252343100001 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Two new functions: process_sigsuspend_mask and finish_sigsuspend_mask. Move the size check and copy-from-user code. Signed-off-by: Richard Henderson Reviewed-by: Laurent Vivier Message-Id: <20220315084308.433109-3-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/signal-common.h | 26 +++++++++++++++++++++++++ linux-user/signal.c | 23 ++++++++++++++++++++++ linux-user/syscall.c | 40 ++++++++++++++++---------------------- 3 files changed, 66 insertions(+), 23 deletions(-) diff --git a/linux-user/signal-common.h b/linux-user/signal-common.h index 2113165a7583..6a7e4a93fc13 100644 --- a/linux-user/signal-common.h +++ b/linux-user/signal-common.h @@ -92,4 +92,30 @@ abi_long do_swapcontext(CPUArchState *env, abi_ulong uol= d_ctx, */ int block_signals(void); /* Returns non zero if signal pending */ =20 +/** + * process_sigsuspend_mask: read and apply syscall-local signal mask + * + * Read the guest signal mask from @sigset, length @sigsize. + * Convert that to a host signal mask and save it to sigpending_mask. + * + * Return value: negative target errno, or zero; + * store &sigpending_mask into *pset on success. + */ +int process_sigsuspend_mask(sigset_t **pset, target_ulong sigset, + target_ulong sigsize); + +/** + * finish_sigsuspend_mask: finish a sigsuspend-like syscall + * + * Set in_sigsuspend if we need to use the modified sigset + * during process_pending_signals. + */ +static inline void finish_sigsuspend_mask(int ret) +{ + if (ret !=3D -QEMU_ERESTARTSYS) { + TaskState *ts =3D (TaskState *)thread_cpu->opaque; + ts->in_sigsuspend =3D 1; + } +} + #endif diff --git a/linux-user/signal.c b/linux-user/signal.c index 2a3f3cc23f92..092e70b80c6f 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -1199,3 +1199,26 @@ void process_pending_signals(CPUArchState *cpu_env) } ts->in_sigsuspend =3D 0; } + +int process_sigsuspend_mask(sigset_t **pset, target_ulong sigset, + target_ulong sigsize) +{ + TaskState *ts =3D (TaskState *)thread_cpu->opaque; + sigset_t *host_set =3D &ts->sigsuspend_mask; + target_sigset_t *target_sigset; + + if (sigsize !=3D sizeof(*target_sigset)) { + /* Like the kernel, we enforce correct size sigsets */ + return -TARGET_EINVAL; + } + + target_sigset =3D lock_user(VERIFY_READ, sigset, sigsize, 1); + if (!target_sigset) { + return -TARGET_EFAULT; + } + target_to_host_sigset(host_set, target_sigset); + unlock_user(target_sigset, sigset, 0); + + *pset =3D host_set; + return 0; +} diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 77cd88b53785..d9b5662ff820 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -9557,41 +9557,35 @@ static abi_long do_syscall1(void *cpu_env, int num,= abi_long arg1, #ifdef TARGET_NR_sigsuspend case TARGET_NR_sigsuspend: { - TaskState *ts =3D cpu->opaque; + sigset_t *set; + #if defined(TARGET_ALPHA) + TaskState *ts =3D cpu->opaque; /* target_to_host_old_sigset will bswap back */ abi_ulong mask =3D tswapal(arg1); - target_to_host_old_sigset(&ts->sigsuspend_mask, &mask); + set =3D &ts->sigsuspend_mask; + target_to_host_old_sigset(set, &mask); #else - if (!(p =3D lock_user(VERIFY_READ, arg1, sizeof(target_sigset_= t), 1))) - return -TARGET_EFAULT; - target_to_host_old_sigset(&ts->sigsuspend_mask, p); - unlock_user(p, arg1, 0); -#endif - ret =3D get_errno(safe_rt_sigsuspend(&ts->sigsuspend_mask, - SIGSET_T_SIZE)); - if (ret !=3D -QEMU_ERESTARTSYS) { - ts->in_sigsuspend =3D 1; + ret =3D process_sigsuspend_mask(&set, arg1, sizeof(target_sigs= et_t)); + if (ret !=3D 0) { + return ret; } +#endif + ret =3D get_errno(safe_rt_sigsuspend(set, SIGSET_T_SIZE)); + finish_sigsuspend_mask(ret); } return ret; #endif case TARGET_NR_rt_sigsuspend: { - TaskState *ts =3D cpu->opaque; + sigset_t *set; =20 - if (arg2 !=3D sizeof(target_sigset_t)) { - return -TARGET_EINVAL; - } - if (!(p =3D lock_user(VERIFY_READ, arg1, sizeof(target_sigset_= t), 1))) - return -TARGET_EFAULT; - target_to_host_sigset(&ts->sigsuspend_mask, p); - unlock_user(p, arg1, 0); - ret =3D get_errno(safe_rt_sigsuspend(&ts->sigsuspend_mask, - SIGSET_T_SIZE)); - if (ret !=3D -QEMU_ERESTARTSYS) { - ts->in_sigsuspend =3D 1; + ret =3D process_sigsuspend_mask(&set, arg1, arg2); + if (ret !=3D 0) { + return ret; } + ret =3D get_errno(safe_rt_sigsuspend(set, SIGSET_T_SIZE)); + finish_sigsuspend_mask(ret); } return ret; #ifdef TARGET_NR_rt_sigtimedwait --=20 2.35.1 From nobody Mon Feb 9 11:44:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1648110834597409.9484541552396; Thu, 24 Mar 2022 01:33:54 -0700 (PDT) Received: from localhost ([::1]:49664 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nXIun-0003fe-1D for importer@patchew.org; Thu, 24 Mar 2022 04:33:53 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52212) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhm-0005wn-V1 for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:27 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:54823) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhk-0003On-Bm for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:26 -0400 Received: from quad ([82.142.12.150]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MEVJq-1nIQc32Yuo-00G0tU; Thu, 24 Mar 2022 09:20:21 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 04/10] linux-user: Properly handle sigset arg to pselect Date: Thu, 24 Mar 2022 09:20:10 +0100 Message-Id: <20220324082016.3463521-5-laurent@vivier.eu> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220324082016.3463521-1-laurent@vivier.eu> References: <20220324082016.3463521-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:bfJ3jrAxtj2L4It4OZ/JdzQGDXMGqrZYZOJ9DbZJkKRuPxDZgVo 5q0HsXVLAYHGZb24Zaumk/+GVjS8LRZxNv3d8sPSQck5QYdT8BcBwDaw+prLDMrf5zooBlk OKkzN2vhbonA4vDZxRW/kr3jld30s4bLgWY5JyzdaH3V6GI7Flt7witUp7/kcthobYaYXCW 6ja4doaNCJWAHJENaAwIg== X-UI-Out-Filterresults: notjunk:1;V03:K0:sJYDj1PbD/c=:aZVY0KofkaVghyr4xM3rHy dnAMZgXmoNDlXzMDioxhJ8St2vKkZ7ctrZKU4BUDCXhg3j/U+71RmPHkInqTKFplJx6FyMa5U QoP9NF8ZUNJ9YIkupeWWhE8NHmudShn6KM2+2rI2l/uqC+k6QUQpsEGPW2rujQNvlakxYB9HE r4WGwRP5ZqUdApCUilxNLTM30U8wR9H5coLpMwUSJxht1C4daIqY4XiKE7wFf/u9ytsMi2YrE 69UzjrnTWrHaSMWtn7tnFbpTt4CPPM414dQjPXNnTHzFUKGOLimrVz3PCxrCrGmjmlcpeSu0y ebDNk8fQN9xx6TM3pWzfTTZbTW6hgq0XF8cXHqI/dmEmUQkNRq2vIWfSf6rUSS8SBNK2XU5yd Sb1HL9K+uELhOy8s9lWhO5Ddw5D/7cNm8pW7TwyAJ4Kel1/v0FdLCl5m5WvPS8CsMr7a7OJG1 sWR4CdfLn/GhtlS456HysWAO0cLvZn1yGcEgcrnTvJXj+s3JO+GtzbradjDOIToLhdjQ922lo A9/edBmU2MF/XE5rWbpuHoyl56SFoZh9wE0p069gAZilac2FklspUzUlPQP57Jgsx8+OmRu+P MTDeba03AwJEUIQesnc6QSa+lBX+uMQjXSh/Ygtlxs5cDkiPogKxlb4Yhh1jSlnBlioXqN8L0 kWvwu730FM2YwcCq00wdSwnxDvYz+/zLJoW91zn3JZENq/Fg5hADWqZD4VK1L1uLpRGQ= Received-SPF: pass (zohomail.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; Received-SPF: none client-ip=212.227.126.135; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1648110836684100001 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Unblocked signals are never delivered, because we didn't record the new mask for process_pending_signals. Handle this with the same mechanism as sigsuspend. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/834 Signed-off-by: Richard Henderson Reviewed-by: Laurent Vivier Message-Id: <20220315084308.433109-4-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/syscall.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index d9b5662ff820..ffd4cefc8b7a 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -1391,14 +1391,12 @@ static abi_long do_pselect6(abi_long arg1, abi_long= arg2, abi_long arg3, * The 6th arg is actually two args smashed together, * so we cannot use the C library. */ - sigset_t set; struct { sigset_t *set; size_t size; } sig, *sig_ptr; =20 abi_ulong arg_sigset, arg_sigsize, *arg7; - target_sigset_t *target_sigset; =20 n =3D arg1; rfd_addr =3D arg2; @@ -1439,10 +1437,8 @@ static abi_long do_pselect6(abi_long arg1, abi_long = arg2, abi_long arg3, } =20 /* Extract the two packed args for the sigset */ + sig_ptr =3D NULL; if (arg6) { - sig_ptr =3D &sig; - sig.size =3D SIGSET_T_SIZE; - arg7 =3D lock_user(VERIFY_READ, arg6, sizeof(*arg7) * 2, 1); if (!arg7) { return -TARGET_EFAULT; @@ -1452,28 +1448,22 @@ static abi_long do_pselect6(abi_long arg1, abi_long= arg2, abi_long arg3, unlock_user(arg7, arg6, 0); =20 if (arg_sigset) { - sig.set =3D &set; - if (arg_sigsize !=3D sizeof(*target_sigset)) { - /* Like the kernel, we enforce correct size sigsets */ - return -TARGET_EINVAL; - } - target_sigset =3D lock_user(VERIFY_READ, arg_sigset, - sizeof(*target_sigset), 1); - if (!target_sigset) { - return -TARGET_EFAULT; + ret =3D process_sigsuspend_mask(&sig.set, arg_sigset, arg_sigs= ize); + if (ret !=3D 0) { + return ret; } - target_to_host_sigset(&set, target_sigset); - unlock_user(target_sigset, arg_sigset, 0); - } else { - sig.set =3D NULL; + sig_ptr =3D &sig; + sig.size =3D SIGSET_T_SIZE; } - } else { - sig_ptr =3D NULL; } =20 ret =3D get_errno(safe_pselect6(n, rfds_ptr, wfds_ptr, efds_ptr, ts_ptr, sig_ptr)); =20 + if (sig_ptr) { + finish_sigsuspend_mask(ret); + } + if (!is_error(ret)) { if (rfd_addr && copy_to_user_fdset(rfd_addr, &rfds, n)) { return -TARGET_EFAULT; --=20 2.35.1 From nobody Mon Feb 9 11:44:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 164811050448543.3552401461219; Thu, 24 Mar 2022 01:28:24 -0700 (PDT) Received: from localhost ([::1]:41090 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nXIpT-00066h-Ck for importer@patchew.org; Thu, 24 Mar 2022 04:28:23 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52214) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhm-0005wo-UL for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:27 -0400 Received: from mout.kundenserver.de ([212.227.126.131]:42009) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhk-0003Ov-D5 for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:26 -0400 Received: from quad ([82.142.12.150]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MTi9N-1nd6WR0H8v-00U5V1; Thu, 24 Mar 2022 09:20:22 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 05/10] linux-user: Properly handle sigset arg to epoll_pwait Date: Thu, 24 Mar 2022 09:20:11 +0100 Message-Id: <20220324082016.3463521-6-laurent@vivier.eu> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220324082016.3463521-1-laurent@vivier.eu> References: <20220324082016.3463521-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:v2D7+tvf13oh60xk8WP5a54Aq2Ag0XesnjnpCQnlE84OKqPPW2P Z9oOu5HCdhO33syVBaDqaiLIEPt6tvxefn75XXxfp2uvQm5DjYb7UBwJt4o4H6Qi7hnzGHh RUJlpHP1zhH/YUF5zV3mv+turQpE4kHov+wjQbFQoXKjRCjHoIftsgb8nDLYaqxoSgqeVNc ryBGzUWWilo2FfMbFoPxA== X-UI-Out-Filterresults: notjunk:1;V03:K0:2mnjocTbFFw=:JdZptCg3aeanSe9c6vNYX8 oj2PXYKQ997yF4dVBzFauOnSxL4enzx1zjIQM/vNq8y7uVO+Fl1CllTaXJdMf62yZdD8Dx44S Uzzklkd/9m5l6fnZVhYbv/i3KAz7VV1xJIzrGNGfDd4P6tvkU8ofHq3zhV9/APM2dDPayUfr2 bLVmwEJ+Sf8EbGZVXDFHq1Ucil3gXcvGFN01vE82y+PjonK5xgj4hUog5mtuLDuKddg+Dsgl8 QReoVM4ECc5N2HHZpVQt7z/CEGY3KFESXDGx3LNXBY6h5fpZ8Vr9hoNkFXoloM1PDtFHxTYr4 cDQihkO6hyJgYF5ip099OQJ6h1anwgdPKlhiu4JoTImwFHrrdyMeidauU4WFevaKij4FePk5L kaEePSXhoKTQqpZZWrAwRlxzqpJG4WKwSk5c1aqd5q98u5HqDD7pqg//VsB88TAuYi+F2ADyE iS1WaYZoZAVO6KQTbvpHy3h/S5e0ZY/qvlTf7AgH5PUReja0c/kPpMGvjEX3spNaB8gPKOVY0 nzzpqr7IrwyvMbEDY6PPScFhA3R0/9ZIPUdfpKd+RJV9WcPaYpsh9pIvLGaJPEToBXsPKiIVf wR31wfqm9pp9LesExumhCzapIlzm+b14+K4B8LGd1Ah8KN0bVn7fcp9i7Y8r50vG7taMF26fS yVptMAjTomlvnrQI6QG1E73Urei+/hv2E8LTxlA9TgIjwIJ3ntlF2dIrf8bWbIJDi134= Received-SPF: pass (zohomail.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; Received-SPF: none client-ip=212.227.126.131; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1648110505332100001 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Unblocked signals are never delivered, because we didn't record the new mask for process_pending_signals. Handle this with the same mechanism as sigsuspend. Signed-off-by: Richard Henderson Reviewed-by: Laurent Vivier Message-Id: <20220315084308.433109-5-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/syscall.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index ffd4cefc8b7a..67af40deac07 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -12694,29 +12694,21 @@ static abi_long do_syscall1(void *cpu_env, int nu= m, abi_long arg1, #if defined(TARGET_NR_epoll_pwait) case TARGET_NR_epoll_pwait: { - target_sigset_t *target_set; - sigset_t _set, *set =3D &_set; + sigset_t *set =3D NULL; =20 if (arg5) { - if (arg6 !=3D sizeof(target_sigset_t)) { - ret =3D -TARGET_EINVAL; - break; - } - - target_set =3D lock_user(VERIFY_READ, arg5, - sizeof(target_sigset_t), 1); - if (!target_set) { - ret =3D -TARGET_EFAULT; + ret =3D process_sigsuspend_mask(&set, arg5, arg6); + if (ret !=3D 0) { break; } - target_to_host_sigset(set, target_set); - unlock_user(target_set, arg5, 0); - } else { - set =3D NULL; } =20 ret =3D get_errno(safe_epoll_pwait(epfd, ep, maxevents, timeou= t, set, SIGSET_T_SIZE)); + + if (set) { + finish_sigsuspend_mask(ret); + } break; } #endif --=20 2.35.1 From nobody Mon Feb 9 11:44:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1648110831406992.2347197981785; Thu, 24 Mar 2022 01:33:51 -0700 (PDT) Received: from localhost ([::1]:49592 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nXIuj-0003c3-PX for importer@patchew.org; Thu, 24 Mar 2022 04:33:49 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52216) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhm-0005wp-Us for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:27 -0400 Received: from mout.kundenserver.de ([212.227.126.133]:52963) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhk-0003P6-Nl for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:26 -0400 Received: from quad ([82.142.12.150]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MYedH-1ncZtN2BQB-00VkSn; Thu, 24 Mar 2022 09:20:22 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 06/10] linux-user: Properly handle sigset arg to ppoll Date: Thu, 24 Mar 2022 09:20:12 +0100 Message-Id: <20220324082016.3463521-7-laurent@vivier.eu> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220324082016.3463521-1-laurent@vivier.eu> References: <20220324082016.3463521-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:MQj22sMYeCS9DSnLGnftAziUQubUY1cVCcQYrGZ/TXFuChSRtpp MBqTNR7JVpT/DmGopMRWVlAOtLxQKeUwBUlIplTmo7cxhH9hL2aeTrXDkPngF/vQoZDQPz7 dFtA7j9AOQ9Mj+2CJDiJKg8V2WQSVCjcZnKnij0UoimmIlvpOa5n4qSARTYdzFGBiKrmMEn PXWGmiQYq+Y/QRZ4WQNVw== X-UI-Out-Filterresults: notjunk:1;V03:K0:Ok2kemLSHks=:xJFPqQEB73fSWlGhuF1DmZ oRp29qwRfb2PFvt+8d4NsZzw1+4MdBHV5rb3Kp1/Y53L/a+DNdKpjTHSSUHqrbnX2DnupuNY8 sgJ/8XzRSzU6ZaN9tPj7eO33sy1+94zM5Jf0D4tpmKwc3UirQNmaNp/AjIQdgJ6+OnjAIJyCr lPANd25mJL1cGIpiCuCPWru1ogcM3QiQYvNp8OPrCyB/tjKrvSh6edq1jzXYKCiKabTP0dYvJ Y4H/N/d92w9chuMfWH+090RZ7ICIWVSiwk4thYT7ClpvXYTKcAqUkbOMMASnbcA7KYkgTIq4X 9P1boUDdfMdpQKqFT31UfjHujHTYqflAHOODWoaV3Q2N3xhm7y6IhmE9MTfpclw8JZWEjNMsg nxdvhY7mlDkRHIS8Hu9m9yRMvoeKgpz3j9FLJRHYbbxKLVMJhdGjqr2FWfv0cpKtOEDwMeWZC XBIoMAVu15xohtAga5hwPGbFAjXC6fRXdEpNsTEPNMrj01qv70X9atPiHiV/zxaCv3wezVsUE +aidZ9gwdQ8xCX1deD/5gA9ZUi2Ts04lsjCys3HZYZlFm8a3Czxh7XgAYcDJbEpcCFeHljWoX VLpzeVxUJ+tdIyGVLPyCiAzbpntVxIOxNJIfpgtWB0JpSajz0PKqCdSaTKK3oVvaF4wxStam+ XCSHCQQR2ujYy6blO5kAo22SJixXhNUBkr+fwqlJ+D4u6Bz57tlConu50sUOYsUdGjWk= Received-SPF: pass (zohomail.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; Received-SPF: none client-ip=212.227.126.133; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1648110832866100001 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Unblocked signals are never delivered, because we didn't record the new mask for process_pending_signals. Handle this with the same mechanism as sigsuspend. Signed-off-by: Richard Henderson Reviewed-by: Laurent Vivier Message-Id: <20220315084308.433109-6-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/syscall.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 67af40deac07..f65045efe6a2 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -1519,8 +1519,7 @@ static abi_long do_ppoll(abi_long arg1, abi_long arg2= , abi_long arg3, } if (ppoll) { struct timespec _timeout_ts, *timeout_ts =3D &_timeout_ts; - target_sigset_t *target_set; - sigset_t _set, *set =3D &_set; + sigset_t *set =3D NULL; =20 if (arg3) { if (time64) { @@ -1539,25 +1538,19 @@ static abi_long do_ppoll(abi_long arg1, abi_long ar= g2, abi_long arg3, } =20 if (arg4) { - if (arg5 !=3D sizeof(target_sigset_t)) { - unlock_user(target_pfd, arg1, 0); - return -TARGET_EINVAL; - } - - target_set =3D lock_user(VERIFY_READ, arg4, - sizeof(target_sigset_t), 1); - if (!target_set) { + ret =3D process_sigsuspend_mask(&set, arg4, arg5); + if (ret !=3D 0) { unlock_user(target_pfd, arg1, 0); - return -TARGET_EFAULT; + return ret; } - target_to_host_sigset(set, target_set); - } else { - set =3D NULL; } =20 ret =3D get_errno(safe_ppoll(pfd, nfds, timeout_ts, set, SIGSET_T_SIZE)); =20 + if (set) { + finish_sigsuspend_mask(ret); + } if (!is_error(ret) && arg3) { if (time64) { if (host_to_target_timespec64(arg3, timeout_ts)) { @@ -1569,9 +1562,6 @@ static abi_long do_ppoll(abi_long arg1, abi_long arg2= , abi_long arg3, } } } - if (arg4) { - unlock_user(target_set, arg4, 0); - } } else { struct timespec ts, *pts; =20 --=20 2.35.1 From nobody Mon Feb 9 11:44:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1648110835762177.4072164065626; Thu, 24 Mar 2022 01:33:55 -0700 (PDT) Received: from localhost ([::1]:49868 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nXIuo-0003qs-DV for importer@patchew.org; Thu, 24 Mar 2022 04:33:54 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52262) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhq-00060d-Q7 for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:30 -0400 Received: from mout.kundenserver.de ([212.227.126.134]:42445) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhp-0003RZ-53 for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:30 -0400 Received: from quad ([82.142.12.150]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MZCrZ-1nc1f40q2b-00VCV1; Thu, 24 Mar 2022 09:20:23 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 07/10] linux-user: Fix missing space in error message Date: Thu, 24 Mar 2022 09:20:13 +0100 Message-Id: <20220324082016.3463521-8-laurent@vivier.eu> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220324082016.3463521-1-laurent@vivier.eu> References: <20220324082016.3463521-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:bPz0y/RG92IsAAKj0NqSt4bsoIEWFQO4M+8uFIYnLxN+Uuht/n9 S8hm6gDChgWL7qwySTryBXf83rQoxKK7WetuK2mAv9Qk8SK8TMJJdQv1Uf/X2kRCKmhQCMN 4l9YmA2bpjdWFU3/z34IdfPcfjR25uWMbvqqYlNuJCgqsG9dCa8t9P6ZWVi/YDIFAXiu1ua NlGa1tQQJLW0cKdghpfRw== X-UI-Out-Filterresults: notjunk:1;V03:K0:z48gS2SW2bE=:lyA3pvYCBAqjZMi6nfItoQ 7UzwqBnzNO8tLmGYVkDgQsNr+rHMZEOM7IgFq7T0hu+L89O8DMHeuxFZzcx5p+1VxQnIqcXBC bhdOTRgNAWQ9EeAtoL6QAPPqhWTvoWGfu5V2bXDIWy1V86d/s3SXPzUqOoCJMkYskEk1jDnCV oGLQowI70UJ7L23hh997yXHiEpdlbbYTVykoFmdG4HxmU8wwSrMql7TwEEEz59XTOjWGvKAgj onA7gbqpQ2XEBOeqSOVAlzced18v8kf+aXtkns+XViCBiDYvgepvEgIky2zkh7IueGh2PpPat IoHkkAPEynwYCbY/lOlOm9a/6Ufv3ubsJnTHaB0vNniyy3ZYRN0d/kwyisO/V3FJorxckKCJR C3aulLR1xb/sakYPlMVzl5U09gw1WckcXqSQS22CZxassEJSzHILkx53Fx8tAWU5OXtZ+V03J bTRfCiTcQkdik4Hlym+saDTI4TfgCuoKVYMknN9enq55K6jC/Dvk5HhrUmnv3rS1H569Sz6Nc soAsq5hq1VPRoiCjmGsR7wuuoQeCUtOSOAqx9+610srYL7iXXtm/jgt8uzudYzt2hdO6GfAN2 NNpzs0IwAPpmFpt9fZFUpoSN/aPzDmZpA3T6JY4SNnOVcyjsRmdxg9DIRj0X7f32yCM8mNUiE TsOYlIoCC7rCwVs1TJ962ar10Qm9AeO5svMwUaeVJulUpPjvTxAPKrFN34vfVg2JelUo= Received-SPF: pass (zohomail.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; Received-SPF: none client-ip=212.227.126.134; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Patrick Venture , Fergus Henderson , Laurent Vivier , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Maydell Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1648110837331100003 From: Fergus Henderson Signed-off-by: Fergus Henderson Signed-off-by: Patrick Venture Reviewed-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20220310192148.1696486-1-venture@google.com> Signed-off-by: Laurent Vivier --- linux-user/elfload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 9628a38361cb..c45da4d63375 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -2504,7 +2504,7 @@ static void pgb_reserved_va(const char *image_name, a= bi_ulong guest_loaddr, addr =3D mmap(test, reserved_va, PROT_NONE, flags, -1, 0); if (addr =3D=3D MAP_FAILED || addr !=3D test) { error_report("Unable to reserve 0x%lx bytes of virtual address " - "space at %p (%s) for use as guest address space (che= ck your" + "space at %p (%s) for use as guest address space (che= ck your " "virtual memory ulimit setting, min_mmap_addr or rese= rve less " "using -R option)", reserved_va, test, strerror(errno= )); exit(EXIT_FAILURE); --=20 2.35.1 From nobody Mon Feb 9 11:44:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1648110260038499.0936400419688; Thu, 24 Mar 2022 01:24:20 -0700 (PDT) Received: from localhost ([::1]:60966 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nXIlQ-0000LT-BE for importer@patchew.org; Thu, 24 Mar 2022 04:24:14 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52232) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhn-0005xg-SP for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:28 -0400 Received: from mout.kundenserver.de ([212.227.126.133]:39315) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhl-0003Ps-Qv for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:27 -0400 Received: from quad ([82.142.12.150]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MyK1E-1oGcGZ3Ji0-00yjHa; Thu, 24 Mar 2022 09:20:23 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 08/10] linux-user/arm: Implement __kernel_memory_barrier Date: Thu, 24 Mar 2022 09:20:14 +0100 Message-Id: <20220324082016.3463521-9-laurent@vivier.eu> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220324082016.3463521-1-laurent@vivier.eu> References: <20220324082016.3463521-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:Z/NlUyply1+7e9wKf2c6YVxP2JU/sJwneqMS8vQBL2bQbEIfwk6 pgUQ8zs5Hs5gdCuZT3iPrwKRuxHd5JIxHvZtkU7mOVrdO2K+xA02QA/AC2Ku2doUEWj4o8S rQijBXVyNebwx7Y7gxMVMGxnH1ritZipLKvPZhnd3VGK7QTZt0n1QHkyCbEDFElyxZNemuG WGW4T1Tj87OZNIb99BUoA== X-UI-Out-Filterresults: notjunk:1;V03:K0:d4ljv/EYbSw=:W04w696d/mx9U0qugvLbPC BhAhjaIeIC1LcKaRAgC7t+PJh0WRbAKLzibTB5UAaUD1ckGRg5EUAM9vW6JzGIGKwqa9lO404 YEh/2FZFei7BC7jWN9RGMfTgD5AZHGgyI155QzzEFg844/xp+Gg89r79eDIc8DTT9RMFwi3vM gHdKZR3oHbYA+7fMGHeKzQrVgfh8xAEg9RTeL7qWD022WnEOayWuzFDu/lGQSdsGDU71Hz7xh o8UmjFjDiZYnvtO8YFx2jMVxk0zfv9p6hl7UMLCzd7IMtlmzVuUDVrtD2DsaCZpCt7a4M3aCK eKvl+SWmhLr+5s9EamzNNyjlYrPLb7s6mHyx6XZJhgdLiwcQyL/Vka+oakHIb6tN4/BGG1NxW t073OkpcvAQWGuz30nvSrNxWT70BtuXDZFuJDNOFDguWrKbcbbq+14pmtjr+gTs7q4P55zO9O 5WEBdgGJYYGFthr3rytPU4Ckoe75JnAsHtUUa1MwadRmd6sPf2iRpdMDy/x68bl095VEdCOKb TQqrdxgzWRS1ImkGj17dprCOfRqgOJfCEUgkpr99HIAdDC+hM1Fhy1T3GKleRmiyIwfw2pSc7 5GzPRsCYh2vGa8WKEpWAf6qF86FU0NdFxE0Sh5rOLxvUpfjS3qG8tcjBcGZuy6+kvJtvttFGa xrCJ7sdrmvpiWR7ShRELhsgKx/bf6IWBasEICeuZdGyEclDtJS4iu0yjcC+92t72+Nsw= Received-SPF: pass (zohomail.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; Received-SPF: none client-ip=212.227.126.133; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1648110280282100005 Content-Type: text/plain; charset="utf-8" From: Richard Henderson This fallback syscall was stubbed out. It would only matter for emulating pre-armv6. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-Id: <20220323005839.94327-2-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/arm/cpu_loop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index 032e1ffddfbd..a0e43b261c7b 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -158,7 +158,7 @@ do_kernel_trap(CPUARMState *env) =20 switch (env->regs[15]) { case 0xffff0fa0: /* __kernel_memory_barrier */ - /* ??? No-op. Will need to do better for SMP. */ + smp_mb(); break; case 0xffff0fc0: /* __kernel_cmpxchg */ /* XXX: This only works between threads, not between processes. --=20 2.35.1 From nobody Mon Feb 9 11:44:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1648110507948279.58675949153735; Thu, 24 Mar 2022 01:28:27 -0700 (PDT) Received: from localhost ([::1]:41222 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nXIpW-0006CI-T6 for importer@patchew.org; Thu, 24 Mar 2022 04:28:26 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52248) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhp-0005yo-6I for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:29 -0400 Received: from mout.kundenserver.de ([212.227.126.133]:33031) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhn-0003Qp-DU for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:28 -0400 Received: from quad ([82.142.12.150]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MYedH-1ncZtT1JD9-00VkSn; Thu, 24 Mar 2022 09:20:24 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 09/10] linux-user/arm: Implement __kernel_cmpxchg with host atomics Date: Thu, 24 Mar 2022 09:20:15 +0100 Message-Id: <20220324082016.3463521-10-laurent@vivier.eu> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220324082016.3463521-1-laurent@vivier.eu> References: <20220324082016.3463521-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:PM1c+FKR++/Uae2Fa016VcrHdR7QtG0yRnAg9ZqGXtdGzepLS1i n8wsx7TAczq1BQXTqCbFGZWSnYxXpdOl90/+53ZhjD5eJAzX4q/LCEHYaBu7oj6BvuRK0lz Q8y4c0bAWFOBQJtGronPa1o1Tt75OETsHvsvxc6UyAyulwWhEX+5QCc13lqGhO883YgcYnB KRKKuFiiGN1zmH5HU/fjg== X-UI-Out-Filterresults: notjunk:1;V03:K0:lxw+9ObZsSc=:AWvURXGJUxCERWDAHhBQKz nI1NOWYymFxiWWVYZFrnV2Lq+6FXcdrbiEXlMroQY2KRLi2uYfit3Vp19+x+ZtzVLdee194OZ HR5WwetbKKyLNm4drU++j2DIKu9oP5yDFwQHQiGLwSaZxbCJDK1J60q/4UJxwcWLp5+spX4h6 8EmCFWm2PAfzIyzYwa8KEdqfGIeq0LdocXxfc9Ki6sMpBFykazxtpuvBU79RfEB7tgsI0Ed6N ohc043DULcgr9+HbkqaVvbIjkvfV4Qd6HVBc/TkKrZKw+q9dAAjrv6Vk5PW5NJdJSSx1ybLPz KLr73E8X9TWm2hZbEiP/UD4m+CefYqaOEqZX+R+F+SS6DtXZaLlGeHcYKQMdEkWi/4e8jFj1E XfRwUB9il431aO3fS+ObxgBXIDFDvJktZ/IFI5/YSOxegDg8c5yaXjp1NuKp9K0PQRxEVEx7x vtVWan/fn7qgZW0HM+8KemsJmq3eQf4= Received-SPF: pass (zohomail.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; Received-SPF: none client-ip=212.227.126.133; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1648110509412100005 Content-Type: text/plain; charset="utf-8" From: Richard Henderson The existing implementation using start/end_exclusive does not provide atomicity across processes. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-Id: <20220323005839.94327-3-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/arm/cpu_loop.c | 87 ++++++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 25 deletions(-) diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index a0e43b261c7b..aa2d777bf449 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -75,7 +75,67 @@ put_user_u16(__x, (gaddr)); \ }) =20 -/* Commpage handling -- there is no commpage for AArch64 */ +/* + * Similar to code in accel/tcg/user-exec.c, but outside the execution loo= p. + * Must be called with mmap_lock. + * We get the PC of the entry address - which is as good as anything, + * on a real kernel what you get depends on which mode it uses. + */ +static void *atomic_mmu_lookup(CPUArchState *env, uint32_t addr, int size) +{ + int need_flags =3D PAGE_READ | PAGE_WRITE_ORG | PAGE_VALID; + int page_flags; + + /* Enforce guest required alignment. */ + if (unlikely(addr & (size - 1))) { + force_sig_fault(TARGET_SIGBUS, TARGET_BUS_ADRALN, addr); + return NULL; + } + + page_flags =3D page_get_flags(addr); + if (unlikely((page_flags & need_flags) !=3D need_flags)) { + force_sig_fault(TARGET_SIGSEGV, + page_flags & PAGE_VALID ? + TARGET_SEGV_ACCERR : TARGET_SEGV_MAPERR, addr); + return NULL; + } + + return g2h(env_cpu(env), addr); +} + +/* + * See the Linux kernel's Documentation/arm/kernel_user_helpers.rst + * Input: + * r0 =3D oldval + * r1 =3D newval + * r2 =3D pointer to target value + * + * Output: + * r0 =3D 0 if *ptr was changed, non-0 if no exchange happened + * C set if *ptr was changed, clear if no exchange happened + */ +static void arm_kernel_cmpxchg32_helper(CPUARMState *env) +{ + uint32_t oldval, newval, val, addr, cpsr, *host_addr; + + oldval =3D env->regs[0]; + newval =3D env->regs[1]; + addr =3D env->regs[2]; + + mmap_lock(); + host_addr =3D atomic_mmu_lookup(env, addr, 4); + if (!host_addr) { + mmap_unlock(); + return; + } + + val =3D qatomic_cmpxchg__nocheck(host_addr, oldval, newval); + mmap_unlock(); + + cpsr =3D (val =3D=3D oldval) * CPSR_C; + cpsr_write(env, cpsr, CPSR_C, CPSRWriteByInstr); + env->regs[0] =3D cpsr ? 0 : -1; +} =20 /* * See the Linux kernel's Documentation/arm/kernel_user_helpers.txt @@ -153,36 +213,13 @@ static int do_kernel_trap(CPUARMState *env) { uint32_t addr; - uint32_t cpsr; - uint32_t val; =20 switch (env->regs[15]) { case 0xffff0fa0: /* __kernel_memory_barrier */ smp_mb(); break; case 0xffff0fc0: /* __kernel_cmpxchg */ - /* XXX: This only works between threads, not between processes. - It's probably possible to implement this with native host - operations. However things like ldrex/strex are much harder so - there's not much point trying. */ - start_exclusive(); - cpsr =3D cpsr_read(env); - addr =3D env->regs[2]; - /* FIXME: This should SEGV if the access fails. */ - if (get_user_u32(val, addr)) - val =3D ~env->regs[0]; - if (val =3D=3D env->regs[0]) { - val =3D env->regs[1]; - /* FIXME: Check for segfaults. */ - put_user_u32(val, addr); - env->regs[0] =3D 0; - cpsr |=3D CPSR_C; - } else { - env->regs[0] =3D -1; - cpsr &=3D ~CPSR_C; - } - cpsr_write(env, cpsr, CPSR_C, CPSRWriteByInstr); - end_exclusive(); + arm_kernel_cmpxchg32_helper(env); break; case 0xffff0fe0: /* __kernel_get_tls */ env->regs[0] =3D cpu_get_tls(env); --=20 2.35.1 From nobody Mon Feb 9 11:44:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1648110418254820.3628301516926; Thu, 24 Mar 2022 01:26:58 -0700 (PDT) Received: from localhost ([::1]:37872 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nXIo4-0003xH-Sr for importer@patchew.org; Thu, 24 Mar 2022 04:26:56 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52246) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIho-0005yJ-R7 for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:28 -0400 Received: from mout.kundenserver.de ([212.227.126.130]:34009) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nXIhm-0003QQ-Rm for qemu-devel@nongnu.org; Thu, 24 Mar 2022 04:20:28 -0400 Received: from quad ([82.142.12.150]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MirX2-1o19oa3STs-00eqz8; Thu, 24 Mar 2022 09:20:25 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PULL 10/10] linux-user/arm: Implement __kernel_cmpxchg64 with host atomics Date: Thu, 24 Mar 2022 09:20:16 +0100 Message-Id: <20220324082016.3463521-11-laurent@vivier.eu> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220324082016.3463521-1-laurent@vivier.eu> References: <20220324082016.3463521-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:ua5RvGBo8oB2zsuxbQLVWRtT+OjtQ2Pfk3/fLBQl6+aovURTHLY PSrmwUgXtdmZdW42sVoWXWy9eMOj5CCglZj3aD+4YCo+O3OLjaOmsv6n8jhv42v9oI7rMZD RD/3uopGPmnJV7TJ2o0pLg5KpZZmvrR4/yJL9jzygi6Xlx0Jnu6IE40iEwWl6tz+Gj845N9 vNqpecH7qirhwhd599xrw== X-UI-Out-Filterresults: notjunk:1;V03:K0:nD2La7kckSI=:Y1Bp7ofW8gJmNW8Cw2FF4N jWsKOrOefLCgNyymmuA654IY+PdY6Q5q5HcQnwbW/p+YckffIED1LY9lwwVDkjBrNV7/CntTi lmNad9i5qbu4g06HLEAzofrLluuvmbaK/t3qvGOWIQt6IhtdcTsNEpkw/o/3kbEStrdZFaaUU tDcoCGztxWCmAqaKqBBJ794b2PQbyt1yxDEn3gUPjaUC1zc9dWeOWCr5AOUMVLwhzoQph+Vb0 AHhUzTIQ5yL78ps6112xtxm0C0uQUkYmpbDA6Wna38FHweqUttpLe7+ymNTXjRY1C4IPPnuME ykYrabz10xXw46jRbi7LnfEFnVnbHqpgNwQmrqxni64oGgGMkzD48v0eP43zmytflGn1+hghG RGkKecD0H9EvsioCiy7Xe/NOUhfUZMbGfyc1hq6jdvB1vaNIxX7NCY475GwMchTN/8jgHfvSo BgmKvE8Qe4z1Q+AKBLo/ksDpFBM/ygKkPelq53aTAe1jE0W3/x+xFibnJrjXhzofxhro7VFNx W8yXd9w3P3937Z2VkArvrBJbsLF1qGhtWzsEWGV0jdcP4rmKDgmDbNkNj7V2QY5wMnfEolovM /VYl1TsRo9ZlpGxjWQUmVg78XJR30OVp87gYzs/pkKGoylcL6OoGdRHEYJ3/AfhoYwcrgcxlJ UE4vjcWar8WQlXmldtYUsp6kRx2Q+PXe3ZgdkAx+gKUPc9PSlRtcjB9SUW1CYvXIvVNo= Received-SPF: pass (zohomail.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; Received-SPF: none client-ip=212.227.126.130; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Richard Henderson , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1648110418994100001 Content-Type: text/plain; charset="utf-8" From: Richard Henderson If CONFIG_ATOMIC64, we can use a host cmpxchg and provide atomicity across processes; otherwise we have no choice but to continue using start/end_exclusive. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-Id: <20220323005839.94327-4-richard.henderson@linaro.org> Signed-off-by: Laurent Vivier --- linux-user/arm/cpu_loop.c | 75 +++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 39 deletions(-) diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c index aa2d777bf449..aae375d61792 100644 --- a/linux-user/arm/cpu_loop.c +++ b/linux-user/arm/cpu_loop.c @@ -138,7 +138,7 @@ static void arm_kernel_cmpxchg32_helper(CPUARMState *en= v) } =20 /* - * See the Linux kernel's Documentation/arm/kernel_user_helpers.txt + * See the Linux kernel's Documentation/arm/kernel_user_helpers.rst * Input: * r0 =3D pointer to oldval * r1 =3D pointer to newval @@ -155,57 +155,54 @@ static void arm_kernel_cmpxchg64_helper(CPUARMState *= env) { uint64_t oldval, newval, val; uint32_t addr, cpsr; + uint64_t *host_addr; =20 - /* Based on the 32 bit code in do_kernel_trap */ - - /* XXX: This only works between threads, not between processes. - It's probably possible to implement this with native host - operations. However things like ldrex/strex are much harder so - there's not much point trying. */ - start_exclusive(); - cpsr =3D cpsr_read(env); - addr =3D env->regs[2]; - - if (get_user_u64(oldval, env->regs[0])) { - env->exception.vaddress =3D env->regs[0]; + addr =3D env->regs[0]; + if (get_user_u64(oldval, addr)) { goto segv; - }; + } =20 - if (get_user_u64(newval, env->regs[1])) { - env->exception.vaddress =3D env->regs[1]; + addr =3D env->regs[1]; + if (get_user_u64(newval, addr)) { goto segv; - }; + } =20 - if (get_user_u64(val, addr)) { - env->exception.vaddress =3D addr; - goto segv; + mmap_lock(); + addr =3D env->regs[2]; + host_addr =3D atomic_mmu_lookup(env, addr, 8); + if (!host_addr) { + mmap_unlock(); + return; } =20 +#ifdef CONFIG_ATOMIC64 + val =3D qatomic_cmpxchg__nocheck(host_addr, oldval, newval); + cpsr =3D (val =3D=3D oldval) * CPSR_C; +#else + /* + * This only works between threads, not between processes, but since + * the host has no 64-bit cmpxchg, it is the best that we can do. + */ + start_exclusive(); + val =3D *host_addr; if (val =3D=3D oldval) { - val =3D newval; - - if (put_user_u64(val, addr)) { - env->exception.vaddress =3D addr; - goto segv; - }; - - env->regs[0] =3D 0; - cpsr |=3D CPSR_C; + *host_addr =3D newval; + cpsr =3D CPSR_C; } else { - env->regs[0] =3D -1; - cpsr &=3D ~CPSR_C; + cpsr =3D 0; } - cpsr_write(env, cpsr, CPSR_C, CPSRWriteByInstr); end_exclusive(); +#endif + mmap_unlock(); + + cpsr_write(env, cpsr, CPSR_C, CPSRWriteByInstr); + env->regs[0] =3D cpsr ? 0 : -1; return; =20 -segv: - end_exclusive(); - /* We get the PC of the entry address - which is as good as anything, - on a real kernel what you get depends on which mode it uses. */ - /* XXX: check env->error_code */ - force_sig_fault(TARGET_SIGSEGV, TARGET_SEGV_MAPERR, - env->exception.vaddress); + segv: + force_sig_fault(TARGET_SIGSEGV, + page_get_flags(addr) & PAGE_VALID ? + TARGET_SEGV_ACCERR : TARGET_SEGV_MAPERR, addr); } =20 /* Handle a jump to the kernel code page. */ --=20 2.35.1