From patchwork Thu Mar 7 09:14:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 159808 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp7203017jad; Thu, 7 Mar 2019 01:16:03 -0800 (PST) X-Google-Smtp-Source: APXvYqwPna6nJS29D0OGgR+tVFTpxqF+PhHZ3WjFTcmpyQR0YJP+mo7n8yY0QUQsJpG7TNF4x8Z5 X-Received: by 2002:a17:902:205:: with SMTP id 5mr7700704plc.336.1551950163652; Thu, 07 Mar 2019 01:16:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551950163; cv=none; d=google.com; s=arc-20160816; b=f83wTW+NdrJxo0/wSoP3OkemOBQFiwzDqwQDEWKryPkw7br5aMFpWVfTMmZE37+DhL AqDk03XNpmfg3NpTyX/CTKyVhJDdykNzBjXapc8zu/Zu+gthc6y+KgO4Mkd/oXTj3MZV TOPzQ1fgo4Qpkt7/evOCxM4jZHTckaWLBlh+QRELkG9utULQ5QDkPfpJbCms4q1cYBuq gDANEiXjmqWQ9U7g5F5l16dY0AolEerGXYy3HfwemaRXjSU3ESGowpBA9zkTeCKIlQQn L3EQbgIyh5RQqsCc5quOEXt0GJ1kZd8Etsk6dq2D+7s1r28R+GXVUzgxLq71jqJMOsPa 2XvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=35K8Y/PW+dIMIZlbA7u/UGDpPv9L8pXV0dtNKp8YuIQ=; b=lJl4kVrxlg5jatSLS5WdJkunDsVVRkDno1AQMvd3gmz1Qwz6qldYQuqWoi94nNkvO5 ADHpS6F0yYNv/dt6kLWI20DdIKzFrfTeRJqKvWkbNMO3zVox73FcQ7oqLk2P2wKOrcD0 Kw+sLJE7S+c1jll316asDO5N749o+z7lzxqeTptOQuqHlxTEoKCOdh1MTnPmzF+5DSFd 8qKa3i5kR42ChMoF/AT/ur80X0odR33r6+W+VSsoYKjKQBmoZislZKLwduf0S/bbyc7h WlgceMVSYDkIgQBCSl50RNCmfOMDelcw0vdhvGgyBaVID8fjClEsR+qA4agRG7KV57yF 8EVw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i21si3446535pgh.123.2019.03.07.01.16.02; Thu, 07 Mar 2019 01:16:03 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726336AbfCGJQB (ORCPT + 31 others); Thu, 7 Mar 2019 04:16:01 -0500 Received: from mout.kundenserver.de ([212.227.126.131]:58063 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726120AbfCGJQA (ORCPT ); Thu, 7 Mar 2019 04:16:00 -0500 Received: from wuerfel.lan ([109.192.41.194]) by mrelayeu.kundenserver.de (mreue012 [212.227.15.129]) with ESMTPA (Nemesis) id 1MavF5-1gVWVq1TCt-00cUMs; Thu, 07 Mar 2019 10:15:33 +0100 From: Arnd Bergmann To: Russell King , Thomas Gleixner , Ingo Molnar , Peter Zijlstra , Darren Hart Cc: Nick Desaulniers , Arnd Bergmann , Mikael Pettersson , Mikael Pettersson , Dave Martin , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] ARM: futex: make futex_detect_cmpxchg more reliable Date: Thu, 7 Mar 2019 10:14:49 +0100 Message-Id: <20190307091514.2489338-2-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20190307091514.2489338-1-arnd@arndb.de> References: <20190307091514.2489338-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:d8KGsnS5I5jJ69letBdYqJMsef6CKlINAH4fRowUoENhI3Wj5Oz XQzXp+l7Zv0gYInCjyd3uARXmT6Dz0ERe80AM40RF0ipFK4jBAF+/1bOH+W/X9myqZpdQ3t ovCX5yOkGgDRJJXGWQPdIFbRGyzhBmeHqo4vm0J8gnT8G9QvNHxUlwgrQOtlqkJBtVijf+G nQisNIXf/OnQwkH/rnp4Q== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:zcJO1LULneg=:37AzrR9WoMpjoMCrxyWa08 zJKL7raTOs/Vaht+hOTaY87qL5QvUbW9tib1GjK8WfUAo76qh5rrvvS6/yDoqF8JBNIeXUUgv MBmIyq2oNNJN8oBI7iy7ExGk+PLZy+NDs7BQFMbkKMJp/lTulMXKMfhOhuzkjiuiRCI6kAFHF SGUZQyeAkzf/Ql2sif15cIsEBSRDo9rX1CiS3G9fsPLgpymnBkMrNkrBeT45OTH8eD04sVLmT LNFfYhveQ+9mSpptIn+knDxhK7MDzdmBX7bOV4mOzazZOoOZthl3YWz2MU/SodJdLxpkl716I Fo/fPIFQWWYRu8Qn/NJfi7qHG8c7ecavvyqtiErHv5bz/y5Mkmy/WILVFlf2y4ljFwXCD2cFV 2QX3ZZlG8MZLcnGzahakZildLgjRlfWpRTj6V00nN7p7f6dxZEd0NHffpZ8DUAkUHncuUblWT 92YtibFG6rX3hiDUpiNln0cllH9z3Q4ydka5d3jSPSgfNyJZyAnEHXzT/jNWhTmxaU4gtxt19 wOj5NWEnb0/q5NdVpA7LYh7M67v9bZdGrbAqli8bEvoqhSIeuVyzd6DOmRp9U7QHn+Url8jIL 47asrP6AHLijJor9S59D/l+5nRlmMa7ngCCtb0flx4p8SSjzj6hj7QPRkvH3WjqM62efDNkzY 5bspvKYd3rE7Z0Q6ZyyzHoEs37bXqZbQ2bdSzIr74RwwYwO7PuCyUQXspmqwFxv3tnVko9Cfn dqFQgE0nNcLniH3o3yaRXtVqcwz9Ehlsk84RpA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Passing registers containing zero as both the address (NULL pointer) and data into cmpxchg_futex_value_locked() leads clang to assign the same register for both inputs on ARM, which triggers a warning explaining that this instruction has unpredictable behavior on ARMv5. /tmp/futex-7e740e.s: Assembler messages: /tmp/futex-7e740e.s:12713: Warning: source register same as write-back base This patch was suggested by Mikael Pettersson back in 2011 (!) with gcc-4.4, as Mikael wrote: "One way of fixing this is to make uaddr an input/output register, since "that prevents it from overlapping any other input or output." but then withdrawn as the warning was determined to be harmless, and it apparently never showed up again with later gcc versions. Now the same problem is back when compiling with clang, and we are trying to get clang to build the kernel without warnings, as gcc normally does. Cc: Mikael Pettersson Cc: Mikael Pettersson Cc: Dave Martin Link: https://lore.kernel.org/linux-arm-kernel/20009.45690.158286.161591@pilspetsen.it.uu.se/ Signed-off-by: Arnd Bergmann --- arch/arm/include/asm/futex.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) -- 2.20.0 Reviewed-by: Nick Desaulniers diff --git a/arch/arm/include/asm/futex.h b/arch/arm/include/asm/futex.h index 0a46676b4245..79790912974e 100644 --- a/arch/arm/include/asm/futex.h +++ b/arch/arm/include/asm/futex.h @@ -110,13 +110,13 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, preempt_disable(); __ua_flags = uaccess_save_and_enable(); __asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n" - "1: " TUSER(ldr) " %1, [%4]\n" - " teq %1, %2\n" + "1: " TUSER(ldr) " %1, [%2]\n" + " teq %1, %3\n" " it eq @ explicit IT needed for the 2b label\n" - "2: " TUSER(streq) " %3, [%4]\n" + "2: " TUSER(streq) " %4, [%2]\n" __futex_atomic_ex_table("%5") - : "+r" (ret), "=&r" (val) - : "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT) + : "+&r" (ret), "=&r" (val), "+&r" (uaddr) + : "r" (oldval), "r" (newval), "Ir" (-EFAULT) : "cc", "memory"); uaccess_restore(__ua_flags);