Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1675688ybt; Thu, 2 Jul 2020 11:00:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx0TDEmkuEtM5aznLrrO3nun6RmgTf4nk1uAA3UpWHIT8QScIeT5qQ1dedVu+nGxejr6e44 X-Received: by 2002:a05:6402:796:: with SMTP id d22mr37997158edy.78.1593712817799; Thu, 02 Jul 2020 11:00:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593712817; cv=none; d=google.com; s=arc-20160816; b=yKWZXqBBdYg8mlXd9e1G79TG2+PEK0iXbdLBWZ4l2bJJ932itspbzXyl1PUE+6dABb diPFY4zYabH1RaE4izUh8FvjC0AqCFFhuNOZM4QvuKhVYtLcOSzRQDMxdgXWarA12a01 zfMG7+YQmNHpFIOCFVYVNPCJaY1qJqTGQEh0FgH0e9DAV7PGihqlEjfxwTNl1UGe9lgs bOzLVUWWbyM4F0bt1V4oMI1LFQ7XVWorGKhQr+7qr90el1qFC9IJIvZsaqqvUfputKHG qNRU5+PvsEgfyNrdkCrq+7PxfqBjNukn/ZDCLhZechbMD0vD5sVcbZGfuyLwUhJQhcI2 6eOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:reply-to:message-id :subject:cc:to:from:date:dkim-signature; bh=LIrAkIuvn2bZaDAYjO4om/CRSI6yCnBbSDBFLUUYERM=; b=OhBbEhuOMswAijhDCA+aLdifUKqLusqiIDiEYDrVWYFuhmis+ELzlJqqjbbszPkgzw ag0JwuZrsr5aRkCPnpKDQUk+SQy76c7YE0Gf0U85aesLVBfgRvW/lC4ZRG6ai9MblGyS Li/pZgj5XYZZF8YExvK9KdXayYQAKurGcqZ+uj82ZV2fciS/2nmQuTfWkB4cLopj2ZwZ yJ2W3LKRZ51B3iDmaDRm2ieg1kflXj+DNQRaq4IQFdKK8FoY0O1irB9H12OTRmduh04g IqNMV0fxZviCkppWRClkHbUxhBErLLfDnu7c5L7l/z0LFS1kkFhxH7qiYzKLSuzH2Pxp hJiw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=YSECcQsG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h16si6243797edr.390.2020.07.02.10.59.54; Thu, 02 Jul 2020 11:00:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=YSECcQsG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727968AbgGBR7u (ORCPT + 99 others); Thu, 2 Jul 2020 13:59:50 -0400 Received: from mail.kernel.org ([198.145.29.99]:52286 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726349AbgGBR7t (ORCPT ); Thu, 2 Jul 2020 13:59:49 -0400 Received: from paulmck-ThinkPad-P72.home (50-39-105-78.bvtn.or.frontiernet.net [50.39.105.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 69C4F20737; Thu, 2 Jul 2020 17:59:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593712788; bh=vG1vBm6vstM6zzH+k1vdCUTH1v0SmoEIDUIITtr1D/0=; h=Date:From:To:Cc:Subject:Reply-To:References:In-Reply-To:From; b=YSECcQsGgN0Kb258rQalKoY0GD0gMkQKjSrIAw4B93WGNrTMgWQ/6hr+oWDw+SXRG xKlKIQ4BaG/mRIGsMf9Tu1kJIwAlxOy0d4WAWr1fTaubryYquozE9wywm8Z/2siJrf mogkDnM5b8tk2Qmi8jhn2YzWtbDFbssSH7swTEv0= Received: by paulmck-ThinkPad-P72.home (Postfix, from userid 1000) id 52653352334B; Thu, 2 Jul 2020 10:59:48 -0700 (PDT) Date: Thu, 2 Jul 2020 10:59:48 -0700 From: "Paul E. McKenney" To: Peter Zijlstra Cc: Marco Elver , Nick Desaulniers , Sami Tolvanen , Masahiro Yamada , Will Deacon , Greg Kroah-Hartman , Kees Cook , clang-built-linux , Kernel Hardening , linux-arch , Linux ARM , Linux Kbuild mailing list , LKML , linux-pci@vger.kernel.org, "maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)" Subject: Re: [PATCH 00/22] add support for Clang LTO Message-ID: <20200702175948.GV9247@paulmck-ThinkPad-P72> Reply-To: paulmck@kernel.org References: <20200625085745.GD117543@hirez.programming.kicks-ass.net> <20200630191931.GA884155@elver.google.com> <20200630201243.GD4817@hirez.programming.kicks-ass.net> <20200630203016.GI9247@paulmck-ThinkPad-P72> <20200701114027.GO4800@hirez.programming.kicks-ass.net> <20200701140654.GL9247@paulmck-ThinkPad-P72> <20200701150512.GH4817@hirez.programming.kicks-ass.net> <20200701160338.GN9247@paulmck-ThinkPad-P72> <20200702082040.GB4781@hirez.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200702082040.GB4781@hirez.programming.kicks-ass.net> User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jul 02, 2020 at 10:20:40AM +0200, Peter Zijlstra wrote: > On Wed, Jul 01, 2020 at 09:03:38AM -0700, Paul E. McKenney wrote: > > > But it looks like we are going to have to tell the compiler. > > What does the current proposal look like? I can certainly annotate the > seqcount latch users, but who knows what other code is out there.... For pointers, yes, within the Linux kernel it is hopeless, thus the thought of a -fall-dependent-ptr or some such that makes the compiler pretend that each and every pointer is marked with the _Dependent_ptr qualifier. New non-Linux-kernel code might want to use his qualifier explicitly, perhaps something like the following: _Dependent_ptr struct foo *p; // Or maybe after the "*"? rcu_read_lock(); p = rcu_dereference(gp); // And so on... If a function is to take a dependent pointer as a function argument, then the corresponding parameter need the _Dependent_ptr marking. Ditto for return values. The proposal did not cover integers due to concerns about the number of optimization passes that would need to be reviewed to make that work. Nevertheless, using a marked integer would be safer than using an unmarked one, and if the review can be carried out, why not? Maybe something like this: _Dependent_ptr int idx; rcu_read_lock(); idx = READ_ONCE(gidx); d = rcuarray[idx]; rcu_read_unlock(); do_something_with(d); So use of this qualifier is quite reasonable. The prototype for GCC is here: https://github.com/AKG001/gcc/ Thanx, Paul