Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp6005821ybe; Tue, 10 Sep 2019 12:03:34 -0700 (PDT) X-Google-Smtp-Source: APXvYqxL89OL+hwVfjvNFU4z/swLy7656G/oPx9csMWPEGYWbiWW0PDeN7Z3VynIlpg47pUL5cdq X-Received: by 2002:aa7:d488:: with SMTP id b8mr27337010edr.90.1568142214760; Tue, 10 Sep 2019 12:03:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568142214; cv=none; d=google.com; s=arc-20160816; b=CYWz5aM1Rd8PImNwRx9/w/26x9vCeF4TVwqX/shaRioxVvSrTuQ/atzWUbX+Eou0Mu 9rmzRRBsLYwjkRs7rJTKB7+yZPnzgcQMPJ+caRE2WwGnx6RAet/19WMtt1WTCS/aAWF+ aD0jCc1IxLEmn9CNfM/PxBGmOdUp17i8ani1fzH1CN+fCV6dy8q4rpXHB/jpgI/7ELrU NnkFTyXr5XXn+eqXSnKejZuLFt1nGmrnPwsHNO9ClGJhzGthTykCikQwB02f/A4PploP qC4ZwSGg9Ibi5X2x6GhYToKk+wxmcoHcnoIm5XrPJb3DLDiKkZzQdJT8gMuGjMZe8PQ/ WXlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version; bh=p6zPc+01Hqtj70FYQH87POktpG3lo+D/uPeGYtLeCvc=; b=Y3FNSIyMWUSHUhh1PPyPw3G6lnjxvuCX4I1YrpXT1pr4/5aaO4DUDV7rntMfpiswlC 5JdgKczhPRi58vuPzBwYOWzWnX7c6XLaXPPrt3ANtFAZbhn1KfKXJZ716A6GQGRiWVmG Se1twff8WRFy3KVXFNV38Idisiqm9HlDZd+Ag8LebiEZ/nJIp0xawl9JTmWG1KebUG1B TtlERU2rYda+SIIpscLre0iqFbZnbXgfGl5F+z6MrmPs+KDD10cvbsOblMF3qFcXIDiC AHK3zyBPm6aYc0YJdjxtSxZlxODnRVXKRtG0V+iVXQqJbJng4x9PUugf8sGAWO3Z6lDO ExFw== 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 k19si8791748eds.71.2019.09.10.12.03.10; Tue, 10 Sep 2019 12:03:34 -0700 (PDT) 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 S1732932AbfIJNns (ORCPT + 99 others); Tue, 10 Sep 2019 09:43:48 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:34109 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729662AbfIJNnr (ORCPT ); Tue, 10 Sep 2019 09:43:47 -0400 Received: by mail-qk1-f194.google.com with SMTP id q203so17062903qke.1 for ; Tue, 10 Sep 2019 06:43:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=p6zPc+01Hqtj70FYQH87POktpG3lo+D/uPeGYtLeCvc=; b=qynhaLo1pqxhcQFzhoOgbhx9rpE0iYbUvUQqeuy+KWoVXuXBPkPyG1GW93MBlA5DGL eDy30KCgF2+K5xHl1UsiyKlon1l7V5rB6l15r1TC8pvuMSvy1KbkeI6eZVEVbAqQW+lS qSDjgD/mr05ddUjsgDzs4dkZSJaOS3//8kFcif0hYkXEKoe+e0fYJ6vpS5CdBpu88uAC wVIT9bFPj6g9qsjGFcy7OMFiL7p35Cl23KXFiwUFVJvWAemBXTtpc5VXSZaCVsYvfnrt KRzoE63GjHhS/rbJIqQQE92Xn7qT35qm9t3l4NEwRLJ6ZpSxCFeizPB2sQBrlegS3G4/ C4eQ== X-Gm-Message-State: APjAAAWbW/LNTKqAOo9SdVsnPtO8aDb5kh8S5y3DpVm5EM7/SRNTrrMR WZ09pdw0XE1uvBTEx5HnOimhmVSdDFjJ+HRmHxU= X-Received: by 2002:ae9:ee06:: with SMTP id i6mr8806139qkg.3.1568123026492; Tue, 10 Sep 2019 06:43:46 -0700 (PDT) MIME-Version: 1.0 References: <20190909202153.144970-1-arnd@arndb.de> <20190910074606.45k5m2pkztlpj4nj@willie-the-truck> <20190910132415.4j2ygxhuanihvzhx@willie-the-truck> In-Reply-To: <20190910132415.4j2ygxhuanihvzhx@willie-the-truck> From: Arnd Bergmann Date: Tue, 10 Sep 2019 15:43:29 +0200 Message-ID: Subject: Re: [PATCH] arm64: fix unreachable code issue with cmpxchg To: Will Deacon Cc: Catalin Marinas , Andrew Murray , Mark Rutland , Linux ARM , "linux-kernel@vger.kernel.org" , clang-built-linux , Masahiro Yamada , Borislav Petkov , Ingo Molnar Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Sep 10, 2019 at 3:24 PM Will Deacon wrote: > On Tue, Sep 10, 2019 at 10:04:24AM +0200, Arnd Bergmann wrote: > > On Tue, Sep 10, 2019 at 9:46 AM Will Deacon wrote: > > - In theory, CONFIG_OPTIMIZE_INLINING is the right thing to do -- the compilers > > also make some particularly bad decisions around inlining when each inline > > turns into an __always_inline, as has been the case in Linux for a long time. > > I think in most cases, we get better object code with CONFIG_OPTIMIZE_INLINING > > and in the cases where this is worse, it may be better to fix the compiler. > > The new "asm_inline" macro should also help with that. > > Sure, in theory, but it looks like there isn't a single arm64 compiler out > there which gets it right. I don't see anything architecture specific in here. When the option was made generic instead of x86 specific, I fixed a ton of bugs that showed up all over the place. If we don't want it on arm64, I'd suggest making it a per-architecture opt-in instead of an opt-out. > > > > | commit 4f81c5350b44bcc501ab6f8a089b16d064b4d2f6 > > | Author: Jeff Dike > > | Date: Mon Jul 7 13:36:56 2008 -0400 > > | > > | [UML] fix gcc ICEs and unresolved externs > > [...] > > | This patch reintroduces unit-at-a-time for gcc >= 4.0, > > bringing back the > > | possibility of Uli's crash. If that happens, we'll debug it. > > > > it's still default-off and thus opt-in. > > This appears to be fixing an ICE, whereas the issue reported recently for > arm64 gcc was silent miscompilation of atomics in some cases. Unfortunately, > I can't seem to find the thread :/ Mark, you were on that one too, right? Sorry, that reference was unclear, I meant the text for commit 3f9b5cc01856, which in turn contains a citation of the earlier 4f81c5350b44bc commit. > > - The inlining decisions of gcc and clang are already very different, and > > the bugs we are finding around that are much more common than > > the difference between CONFIG_OPTIMIZE_INLINING=y/n on a > > given compiler. > > Sorry, not sure that you're getting at here. > > Anyway, the second version of your patch looks fine, but I would still > prefer to go the extra mile and disable CONFIG_OPTIMIZE_INLINING altogether > given that I don't think it's a safe option to enable for us. The point is that function inlining frequently causes all kinds of problems when code was written in a way that is not entirely reproducible but depends on the behavior of a particular implementation. I've fixed lots of bugs based on any of these: - gcc-4.0 and higher started ignoring 'inline' without __attribute__((always_inline)), so a workaround got applied in 2.6.26, and this turned into CONFIG_OPTIMIZE_INLINING=n later - gcc -O2 makes different decisions compared to -Os and -O3, which is an endless source of "uninitialized variable" warnings and similar problems - Some configuration options like KASAN grow the code to result in less inlining - clang and gcc behave completely differently - gcc is traditionally bad at guessing the size of inline assembly to make a good decision - newer compilers tend to get better at identifying which functions benefit from inlining, which changes the balance CONFIG_OPTIMIZE_INLINING clearly adds to that mess, but it's not the worst part. The only real solution tends to be to write portable and correct code rather than making assumptions about compiler behavior. Arnd