From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pranith Kumar Subject: [PATCH v2 0/9] Replace smp_read_barrier_depends() with lockless_derefrence() Date: Fri, 21 Nov 2014 10:05:54 -0500 Message-ID: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> To: Herbert Xu , "David S. Miller" , Cristian Stoica , Horia Geanta , Ruchika Gupta , Michael Neuling , Wolfram Sang , linux-crypto@vger.kernel.org (open list:CRYPTO API), linux-kernel@vger.kernel.org (open list), Vinod Koul , Dan Williams , Bartlomiej Zolnierkiewicz , Kyungmin Park , =?UTF-8?q?Manuel=20Sch=C3=B6lling?= , Dave Jiang , Rashika , dmaengine@vger.kernel.org (open list:DMA GENERIC OFFLO...), "K. Y. Srinivasan" , Haiyang Zhang , devel@linuxdriverproject.org (open list:Hyp Return-path: Sender: owner-linux-mm@kvack.org List-Id: linux-crypto.vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). http://lkml.iu.edu/hypermail/linux/kernel/1410.3/04561.html The following series tries to do this. There are still some hard-coded locations which I was not sure how to replace with. I will send in separate patches/questions regarding them. Pranith Kumar (9): doc: memory-barriers.txt: Document use of lockless_dereference() drivers: dma: Replace smp_read_barrier_depends() with lockless_dereference() dcache: Replace smp_read_barrier_depends() with lockless_dereference() hyperv: Replace smp_read_barrier_depends() with lockless_dereference() percpu: Replace smp_read_barrier_depends() with lockless_dereference() perf: Replace smp_read_barrier_depends() with lockless_dereference() seccomp: Replace smp_read_barrier_depends() with lockless_dereference() task_work: Replace smp_read_barrier_depends() with lockless_dereference() netfilter: Replace smp_read_barrier_depends() with lockless_dereference() Documentation/memory-barriers.txt | 4 ++-- drivers/dma/ioat/dma_v2.c | 3 +-- drivers/dma/ioat/dma_v3.c | 3 +-- fs/dcache.c | 7 ++----- include/linux/hyperv.h | 9 ++++----- include/linux/percpu-refcount.h | 4 +--- kernel/events/core.c | 3 +-- kernel/events/uprobes.c | 8 ++++---- kernel/seccomp.c | 7 +++---- kernel/task_work.c | 3 +-- net/ipv4/netfilter/arp_tables.c | 3 +-- net/ipv4/netfilter/ip_tables.c | 3 +-- net/ipv6/netfilter/ip6_tables.c | 3 +-- 13 files changed, 23 insertions(+), 37 deletions(-) -- 1.9.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pranith Kumar Subject: [PATCH v2 9/9] netfilter: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 10:06:03 -0500 Message-ID: <1416582363-20661-10-git-send-email-bobby.prani@gmail.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> To: Pablo Neira Ayuso , Patrick McHardy , Jozsef Kadlecsik , "David S. Miller" , Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , netfilter-devel@vger.kernel.org, coreteam@netfilter.org, netdev@vger.kernel.org (open list:NETWORKING [IPv4/...), linux-kernel@vger.kernel.org (open list) Return-path: In-Reply-To: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: netfilter-devel.vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). The following PATCH makes the change. Signed-off-by: Pranith Kumar --- net/ipv4/netfilter/arp_tables.c | 3 +-- net/ipv4/netfilter/ip_tables.c | 3 +-- net/ipv6/netfilter/ip6_tables.c | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c index f95b6f9..fc7533d 100644 --- a/net/ipv4/netfilter/arp_tables.c +++ b/net/ipv4/netfilter/arp_tables.c @@ -270,12 +270,11 @@ unsigned int arpt_do_table(struct sk_buff *skb, local_bh_disable(); addend = xt_write_recseq_begin(); - private = table->private; /* * Ensure we load private-> members after we've fetched the base * pointer. */ - smp_read_barrier_depends(); + private = lockless_dereference(table->private); table_base = private->entries[smp_processor_id()]; e = get_entry(table_base, private->hook_entry[hook]); diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c index 99e810f..e0fd044 100644 --- a/net/ipv4/netfilter/ip_tables.c +++ b/net/ipv4/netfilter/ip_tables.c @@ -325,13 +325,12 @@ ipt_do_table(struct sk_buff *skb, IP_NF_ASSERT(table->valid_hooks & (1 << hook)); local_bh_disable(); addend = xt_write_recseq_begin(); - private = table->private; cpu = smp_processor_id(); /* * Ensure we load private-> members after we've fetched the base * pointer. */ - smp_read_barrier_depends(); + private = lockless_dereference(table->private); table_base = private->entries[cpu]; jumpstack = (struct ipt_entry **)private->jumpstack[cpu]; stackptr = per_cpu_ptr(private->stackptr, cpu); diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c index e080fbb..0459d6a 100644 --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c @@ -348,12 +348,11 @@ ip6t_do_table(struct sk_buff *skb, local_bh_disable(); addend = xt_write_recseq_begin(); - private = table->private; /* * Ensure we load private-> members after we've fetched the base * pointer. */ - smp_read_barrier_depends(); + private = lockless_dereference(table->private); cpu = smp_processor_id(); table_base = private->entries[cpu]; jumpstack = (struct ip6t_entry **)private->jumpstack[cpu]; -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: Re: [PATCH v2 9/9] netfilter: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 08:12:44 -0800 Message-ID: <1416586364.8629.104.camel@edumazet-glaptop2.roam.corp.google.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> <1416582363-20661-10-git-send-email-bobby.prani@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: Pablo Neira Ayuso , Patrick McHardy , Jozsef Kadlecsik , "David S. Miller" , Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , netfilter-devel@vger.kernel.org, coreteam@netfilter.org, "open list:NETWORKING [IPv4/..." , open list To: Pranith Kumar Return-path: Received: from mail-ig0-f179.google.com ([209.85.213.179]:61332 "EHLO mail-ig0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932155AbaKUQMs (ORCPT ); Fri, 21 Nov 2014 11:12:48 -0500 In-Reply-To: <1416582363-20661-10-git-send-email-bobby.prani@gmail.com> Sender: netfilter-devel-owner@vger.kernel.org List-ID: On Fri, 2014-11-21 at 10:06 -0500, Pranith Kumar wrote: > Recently lockless_dereference() was added which can be used in place of > hard-coding smp_read_barrier_depends(). The following PATCH makes the change. > > Signed-off-by: Pranith Kumar > --- > net/ipv4/netfilter/arp_tables.c | 3 +-- > net/ipv4/netfilter/ip_tables.c | 3 +-- > net/ipv6/netfilter/ip6_tables.c | 3 +-- > 3 files changed, 3 insertions(+), 6 deletions(-) > > diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c > index f95b6f9..fc7533d 100644 > --- a/net/ipv4/netfilter/arp_tables.c > +++ b/net/ipv4/netfilter/arp_tables.c > @@ -270,12 +270,11 @@ unsigned int arpt_do_table(struct sk_buff *skb, > > local_bh_disable(); > addend = xt_write_recseq_begin(); > - private = table->private; > /* > * Ensure we load private-> members after we've fetched the base > * pointer. > */ > - smp_read_barrier_depends(); > + private = lockless_dereference(table->private); > table_base = private->entries[smp_processor_id()]; > Please carefully read the code, before and after your change, then you'll see this change broke the code. Problem is that a bug like that can be really hard to diagnose and fix later, so really you have to be very careful doing these mechanical changes. IMO, current code+comment is better than with this lockless_dereference() which in this particular case obfuscates the code. more than anything. In this case we do have a lock (sort of), so lockless_dereference() is quite misleading. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pranith Kumar Subject: Re: [PATCH v2 9/9] netfilter: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 16:57:00 -0500 Message-ID: References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> <1416582363-20661-10-git-send-email-bobby.prani@gmail.com> <1416586364.8629.104.camel@edumazet-glaptop2.roam.corp.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Cc: Pablo Neira Ayuso , Patrick McHardy , Jozsef Kadlecsik , "David S. Miller" , Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , netfilter-devel@vger.kernel.org, coreteam@netfilter.org, "open list:NETWORKING [IPv4/..." , open list To: Eric Dumazet Return-path: Received: from mail-vc0-f170.google.com ([209.85.220.170]:33030 "EHLO mail-vc0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750948AbaKUV5b (ORCPT ); Fri, 21 Nov 2014 16:57:31 -0500 In-Reply-To: <1416586364.8629.104.camel@edumazet-glaptop2.roam.corp.google.com> Sender: netfilter-devel-owner@vger.kernel.org List-ID: On Fri, Nov 21, 2014 at 11:12 AM, Eric Dumazet wrote: > On Fri, 2014-11-21 at 10:06 -0500, Pranith Kumar wrote: >> Recently lockless_dereference() was added which can be used in place of >> hard-coding smp_read_barrier_depends(). The following PATCH makes the change. >> >> Signed-off-by: Pranith Kumar >> --- >> net/ipv4/netfilter/arp_tables.c | 3 +-- >> net/ipv4/netfilter/ip_tables.c | 3 +-- >> net/ipv6/netfilter/ip6_tables.c | 3 +-- >> 3 files changed, 3 insertions(+), 6 deletions(-) >> >> diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c >> index f95b6f9..fc7533d 100644 >> --- a/net/ipv4/netfilter/arp_tables.c >> +++ b/net/ipv4/netfilter/arp_tables.c >> @@ -270,12 +270,11 @@ unsigned int arpt_do_table(struct sk_buff *skb, >> >> local_bh_disable(); >> addend = xt_write_recseq_begin(); >> - private = table->private; >> /* >> * Ensure we load private-> members after we've fetched the base >> * pointer. >> */ >> - smp_read_barrier_depends(); >> + private = lockless_dereference(table->private); >> table_base = private->entries[smp_processor_id()]; >> > > > Please carefully read the code, before and after your change, then > you'll see this change broke the code. > > Problem is that a bug like that can be really hard to diagnose and fix > later, so really you have to be very careful doing these mechanical > changes. > > IMO, current code+comment is better than with this > lockless_dereference() which in this particular case obfuscates the > code. more than anything. > > In this case we do have a lock (sort of), so lockless_dereference() is > quite misleading. > Hi Eric, Thanks for looking at this patch. I've been scratching my head since morning trying to find out what was so obviously wrong with this patch. Alas, I don't see what you do. Could you point it out and show me how incompetent I am, please? Thanks! -- Pranith From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: Re: [PATCH v2 9/9] netfilter: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 16:05:03 -0800 Message-ID: <1416614703.20938.0.camel@edumazet-glaptop2.roam.corp.google.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> <1416582363-20661-10-git-send-email-bobby.prani@gmail.com> <1416586364.8629.104.camel@edumazet-glaptop2.roam.corp.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: Pablo Neira Ayuso , Patrick McHardy , Jozsef Kadlecsik , "David S. Miller" , Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , netfilter-devel@vger.kernel.org, coreteam@netfilter.org, "open list:NETWORKING [IPv4/..." , open list To: Pranith Kumar Return-path: Received: from mail-ig0-f175.google.com ([209.85.213.175]:47943 "EHLO mail-ig0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752467AbaKVAFG (ORCPT ); Fri, 21 Nov 2014 19:05:06 -0500 In-Reply-To: Sender: netfilter-devel-owner@vger.kernel.org List-ID: On Fri, 2014-11-21 at 16:57 -0500, Pranith Kumar wrote: > Hi Eric, > > Thanks for looking at this patch. > > I've been scratching my head since morning trying to find out what was > so obviously wrong with this patch. Alas, I don't see what you do. > > Could you point it out and show me how incompetent I am, please? > > Thanks! Well, even it the code is _not_ broken, I don't see any value with this patch. If I use git blame on current code, line containing smp_read_barrier_depends() exactly points to the relevant commit [1] After your change, it will point to some cleanup, which makes little sense to me, considering you did not change the smp_wmb() in xt_replace_table(). I, as a netfilter contributor would like to keep current code as is, because it is how I feel safe with it. We have a proliferation of interfaces, but this does not help to understand the issues and code maintenance. smp_read_barrier_depends() better documents the read barrier than lockless_dereference(). The point of having a lock or not is irrelevant here. [1] http://git.kernel.org/cgit/linux/kernel/git/davem/net.git/commit/?id=b416c144f46af1a30ddfa4e4319a8f077381ad63 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Freund Subject: Re: [PATCH v2 9/9] netfilter: Replace smp_read_barrier_depends() with lockless_dereference() Date: Sat, 22 Nov 2014 01:24:45 +0100 Message-ID: <20141122002445.GA4704@alap3.anarazel.de> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> <1416582363-20661-10-git-send-email-bobby.prani@gmail.com> <1416586364.8629.104.camel@edumazet-glaptop2.roam.corp.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Eric Dumazet , Pablo Neira Ayuso , Patrick McHardy , Jozsef Kadlecsik , "David S. Miller" , Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , netfilter-devel@vger.kernel.org, coreteam@netfilter.org, "open list:NETWORKING [IPv4/..." , open list To: Pranith Kumar Return-path: Content-Disposition: inline In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-Id: netfilter-devel.vger.kernel.org Hi, On 2014-11-21 16:57:00 -0500, Pranith Kumar wrote: > On Fri, Nov 21, 2014 at 11:12 AM, Eric Dumazet wrote: > > On Fri, 2014-11-21 at 10:06 -0500, Pranith Kumar wrote: > >> Recently lockless_dereference() was added which can be used in place of > >> hard-coding smp_read_barrier_depends(). The following PATCH makes the change. > >> > >> Signed-off-by: Pranith Kumar > >> --- > >> net/ipv4/netfilter/arp_tables.c | 3 +-- > >> net/ipv4/netfilter/ip_tables.c | 3 +-- > >> net/ipv6/netfilter/ip6_tables.c | 3 +-- > >> 3 files changed, 3 insertions(+), 6 deletions(-) > >> > >> diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c > >> index f95b6f9..fc7533d 100644 > >> --- a/net/ipv4/netfilter/arp_tables.c > >> +++ b/net/ipv4/netfilter/arp_tables.c > >> @@ -270,12 +270,11 @@ unsigned int arpt_do_table(struct sk_buff *skb, > >> > >> local_bh_disable(); > >> addend = xt_write_recseq_begin(); > >> - private = table->private; > >> /* > >> * Ensure we load private-> members after we've fetched the base > >> * pointer. > >> */ > >> - smp_read_barrier_depends(); > >> + private = lockless_dereference(table->private); > >> table_base = private->entries[smp_processor_id()]; > >> > > > > > > Please carefully read the code, before and after your change, then > > you'll see this change broke the code. > > > > Problem is that a bug like that can be really hard to diagnose and fix > > later, so really you have to be very careful doing these mechanical > > changes. > > > > IMO, current code+comment is better than with this > > lockless_dereference() which in this particular case obfuscates the > > code. more than anything. > > > > In this case we do have a lock (sort of), so lockless_dereference() is > > quite misleading. > > > > Hi Eric, > > Thanks for looking at this patch. > > I've been scratching my head since morning trying to find out what was > so obviously wrong with this patch. Alas, I don't see what you do. Afaics the read_barrier_depends protected the load from private->entries[x] earlier, not the load of table->private itself. Greetings, Andres Freund From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pranith Kumar Subject: Re: [PATCH v2 9/9] netfilter: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 20:23:11 -0500 Message-ID: References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> <1416582363-20661-10-git-send-email-bobby.prani@gmail.com> <1416586364.8629.104.camel@edumazet-glaptop2.roam.corp.google.com> <1416614703.20938.0.camel@edumazet-glaptop2.roam.corp.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Cc: Pablo Neira Ayuso , Patrick McHardy , Jozsef Kadlecsik , "David S. Miller" , Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , netfilter-devel@vger.kernel.org, coreteam@netfilter.org, "open list:NETWORKING [IPv4/..." , open list , Paul McKenney To: Eric Dumazet Return-path: Received: from mail-vc0-f177.google.com ([209.85.220.177]:62239 "EHLO mail-vc0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751748AbaKVBXm (ORCPT ); Fri, 21 Nov 2014 20:23:42 -0500 In-Reply-To: <1416614703.20938.0.camel@edumazet-glaptop2.roam.corp.google.com> Sender: netfilter-devel-owner@vger.kernel.org List-ID: On Fri, Nov 21, 2014 at 7:05 PM, Eric Dumazet wrote: > > On Fri, 2014-11-21 at 16:57 -0500, Pranith Kumar wrote: > >> Hi Eric, >> >> Thanks for looking at this patch. >> >> I've been scratching my head since morning trying to find out what was >> so obviously wrong with this patch. Alas, I don't see what you do. >> >> Could you point it out and show me how incompetent I am, please? >> >> Thanks! > > Well, even it the code is _not_ broken, I don't see any value with this > patch. Phew. Not being broken itself is a win :) > > If I use git blame on current code, line containing > smp_read_barrier_depends() exactly points to the relevant commit [1] And that is an opinion I will respect. I don't want to muck the git history where it is significant. This effort is to eventually replace the uses of smp_read_barrier_depends() and to use either rcu or lockless_dereference() as documented in memory-barriers.txt. > > After your change, it will point to some cleanup, which makes little > sense to me, considering you did not change the smp_wmb() in > xt_replace_table(). That does not need to change as it is fine as it is. It still pairs with the smp_read_barrier_depends() in lockless_dereference(). > > I, as a netfilter contributor would like to keep current code as is, > because it is how I feel safe with it. > > We have a proliferation of interfaces, but this does not help to > understand the issues and code maintenance. > > smp_read_barrier_depends() better documents the read barrier than > lockless_dereference(). I think this is a matter of opinion. But in the current effort I've seen cases where it is not clear what the barrier is actually guaranteeing. I am glad that the current code is not one of those and it has reasonable comments. lockless_dereference() on the other hand makes the dependency explicit. > > The point of having a lock or not is irrelevant here. > > [1] > http://git.kernel.org/cgit/linux/kernel/git/davem/net.git/commit/?id=b416c144f46af1a30ddfa4e4319a8f077381ad63 > > > > Thanks! -- Pranith From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pranith Kumar Subject: [PATCH v2 3/9] dcache: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 10:05:57 -0500 Message-ID: <1416582363-20661-4-git-send-email-bobby.prani@gmail.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> To: Alexander Viro , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org (open list) Return-path: In-Reply-To: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). The following PATCH makes the change. Signed-off-by: Pranith Kumar --- fs/dcache.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/fs/dcache.c b/fs/dcache.c index a6c5d7e..27b8b5b 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -230,8 +230,7 @@ static inline int dentry_cmp(const struct dentry *dentry, const unsigned char *c * early because the data cannot match (there can * be no NUL in the ct/tcount data) */ - cs = ACCESS_ONCE(dentry->d_name.name); - smp_read_barrier_depends(); + cs = lockless_dereference(dentry->d_name.name); return dentry_string_cmp(cs, ct, tcount); } @@ -2714,10 +2713,8 @@ static int prepend(char **buffer, int *buflen, const char *str, int namelen) static int prepend_name(char **buffer, int *buflen, struct qstr *name) { const char *dname = ACCESS_ONCE(name->name); - u32 dlen = ACCESS_ONCE(name->len); char *p; - - smp_read_barrier_depends(); + u32 dlen = lockless_dereference(name->len); *buflen -= dlen + 1; if (*buflen < 0) -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ie0-f182.google.com (mail-ie0-f182.google.com [209.85.223.182]) by kanga.kvack.org (Postfix) with ESMTP id A2D42900015 for ; Fri, 21 Nov 2014 10:06:50 -0500 (EST) Received: by mail-ie0-f182.google.com with SMTP id x19so5080179ier.27 for ; Fri, 21 Nov 2014 07:06:50 -0800 (PST) Received: from mail-ie0-x22d.google.com (mail-ie0-x22d.google.com. [2607:f8b0:4001:c03::22d]) by mx.google.com with ESMTPS id 84si4106531iom.75.2014.11.21.07.06.49 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 21 Nov 2014 07:06:49 -0800 (PST) Received: by mail-ie0-f173.google.com with SMTP id y20so5077541ier.32 for ; Fri, 21 Nov 2014 07:06:49 -0800 (PST) From: Pranith Kumar Subject: [PATCH v2 0/9] Replace smp_read_barrier_depends() with lockless_derefrence() Date: Fri, 21 Nov 2014 10:05:54 -0500 Message-Id: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> Sender: owner-linux-mm@kvack.org List-ID: To: Herbert Xu , "David S. Miller" , Cristian Stoica , Horia Geanta , Ruchika Gupta , Michael Neuling , Wolfram Sang , "open list:CRYPTO API" , open list , Vinod Koul , Dan Williams , Bartlomiej Zolnierkiewicz , Kyungmin Park , =?UTF-8?q?Manuel=20Sch=C3=B6lling?= , Dave Jiang , Rashika , "open list:DMA GENERIC OFFLO..." , "K. Y. Srinivasan" , Haiyang Zhang , "open list:Hyper-V CORE AND..." , Josh Triplett , Steven Rostedt , Mathieu Desnoyers , Lai Jiangshan , Tejun Heo , Christoph Lameter , Peter Zijlstra , Paul Mackerras , Ingo Molnar , Arnaldo Carvalho de Melo , Kees Cook , Andy Lutomirski , Will Drewry , Andrew Morton , Joonsoo Kim , Naoya Horiguchi , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , "Kirill A. Shutemov" , Hugh Dickins , NeilBrown , Joerg Roedel , Sasha Levin , Paul McQuade , "open list:MEMORY MANAGEMENT" , netfilter-devel@vger.kernel.org, coreteam@netfilter.org, "open list:NETWORKING [IPv4/..." Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). http://lkml.iu.edu/hypermail/linux/kernel/1410.3/04561.html The following series tries to do this. There are still some hard-coded locations which I was not sure how to replace with. I will send in separate patches/questions regarding them. Pranith Kumar (9): doc: memory-barriers.txt: Document use of lockless_dereference() drivers: dma: Replace smp_read_barrier_depends() with lockless_dereference() dcache: Replace smp_read_barrier_depends() with lockless_dereference() hyperv: Replace smp_read_barrier_depends() with lockless_dereference() percpu: Replace smp_read_barrier_depends() with lockless_dereference() perf: Replace smp_read_barrier_depends() with lockless_dereference() seccomp: Replace smp_read_barrier_depends() with lockless_dereference() task_work: Replace smp_read_barrier_depends() with lockless_dereference() netfilter: Replace smp_read_barrier_depends() with lockless_dereference() Documentation/memory-barriers.txt | 4 ++-- drivers/dma/ioat/dma_v2.c | 3 +-- drivers/dma/ioat/dma_v3.c | 3 +-- fs/dcache.c | 7 ++----- include/linux/hyperv.h | 9 ++++----- include/linux/percpu-refcount.h | 4 +--- kernel/events/core.c | 3 +-- kernel/events/uprobes.c | 8 ++++---- kernel/seccomp.c | 7 +++---- kernel/task_work.c | 3 +-- net/ipv4/netfilter/arp_tables.c | 3 +-- net/ipv4/netfilter/ip_tables.c | 3 +-- net/ipv6/netfilter/ip6_tables.c | 3 +-- 13 files changed, 23 insertions(+), 37 deletions(-) -- 1.9.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758547AbaKUPGy (ORCPT ); Fri, 21 Nov 2014 10:06:54 -0500 Received: from mail-ie0-f180.google.com ([209.85.223.180]:62565 "EHLO mail-ie0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758325AbaKUPGu (ORCPT ); Fri, 21 Nov 2014 10:06:50 -0500 From: Pranith Kumar To: Jonathan Corbet , linux-doc@vger.kernel.org (open list:DOCUMENTATION), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 1/9] doc: memory-barriers.txt: Document use of lockless_dereference() Date: Fri, 21 Nov 2014 10:05:55 -0500 Message-Id: <1416582363-20661-2-git-send-email-bobby.prani@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). The following PATCH makes the change. Signed-off-by: Pranith Kumar --- Documentation/memory-barriers.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/memory-barriers.txt b/Documentation/memory-barriers.txt index 7ee2ae6..d33aab3 100644 --- a/Documentation/memory-barriers.txt +++ b/Documentation/memory-barriers.txt @@ -203,8 +203,8 @@ There are some minimal guarantees that may be expected of a CPU: and always in that order. On most systems, smp_read_barrier_depends() does nothing, but it is required for DEC Alpha. The ACCESS_ONCE() is required to prevent compiler mischief. Please note that you - should normally use something like rcu_dereference() instead of - open-coding smp_read_barrier_depends(). + should normally use something like rcu_dereference() or + lockless_dereference() instead of open-coding smp_read_barrier_depends(). (*) Overlapping loads and stores within a particular CPU will appear to be ordered within that CPU. This means that for: -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758605AbaKUPG7 (ORCPT ); Fri, 21 Nov 2014 10:06:59 -0500 Received: from mail-ie0-f172.google.com ([209.85.223.172]:61321 "EHLO mail-ie0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758358AbaKUPGz (ORCPT ); Fri, 21 Nov 2014 10:06:55 -0500 From: Pranith Kumar To: Vinod Koul , Dan Williams , Thomas Gleixner , "David S. Miller" , =?UTF-8?q?Manuel=20Sch=C3=B6lling?= , Josh Triplett , Rashika , dmaengine@vger.kernel.org (open list:DMA GENERIC OFFLO...), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 2/9] drivers: dma: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 10:05:56 -0500 Message-Id: <1416582363-20661-3-git-send-email-bobby.prani@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). The following PATCH makes the change. Signed-off-by: Pranith Kumar --- drivers/dma/ioat/dma_v2.c | 3 +-- drivers/dma/ioat/dma_v3.c | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/dma/ioat/dma_v2.c b/drivers/dma/ioat/dma_v2.c index 695483e..0f94d72 100644 --- a/drivers/dma/ioat/dma_v2.c +++ b/drivers/dma/ioat/dma_v2.c @@ -142,10 +142,9 @@ static void __cleanup(struct ioat2_dma_chan *ioat, dma_addr_t phys_complete) active = ioat2_ring_active(ioat); for (i = 0; i < active && !seen_current; i++) { - smp_read_barrier_depends(); prefetch(ioat2_get_ring_ent(ioat, idx + i + 1)); desc = ioat2_get_ring_ent(ioat, idx + i); - tx = &desc->txd; + tx = &lockless_dereference(desc)->txd; dump_desc_dbg(ioat, desc); if (tx->cookie) { dma_descriptor_unmap(tx); diff --git a/drivers/dma/ioat/dma_v3.c b/drivers/dma/ioat/dma_v3.c index 895f869..cbd0537 100644 --- a/drivers/dma/ioat/dma_v3.c +++ b/drivers/dma/ioat/dma_v3.c @@ -389,7 +389,6 @@ static void __cleanup(struct ioat2_dma_chan *ioat, dma_addr_t phys_complete) for (i = 0; i < active && !seen_current; i++) { struct dma_async_tx_descriptor *tx; - smp_read_barrier_depends(); prefetch(ioat2_get_ring_ent(ioat, idx + i + 1)); desc = ioat2_get_ring_ent(ioat, idx + i); dump_desc_dbg(ioat, desc); @@ -398,7 +397,7 @@ static void __cleanup(struct ioat2_dma_chan *ioat, dma_addr_t phys_complete) if (device->cap & IOAT_CAP_DWBES) desc_get_errstat(ioat, desc); - tx = &desc->txd; + tx = &lockless_dereference(desc)->txd; if (tx->cookie) { dma_cookie_complete(tx); dma_descriptor_unmap(tx); -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758716AbaKUPH3 (ORCPT ); Fri, 21 Nov 2014 10:07:29 -0500 Received: from mail-ie0-f179.google.com ([209.85.223.179]:49183 "EHLO mail-ie0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758358AbaKUPH0 (ORCPT ); Fri, 21 Nov 2014 10:07:26 -0500 From: Pranith Kumar To: Kees Cook , Andy Lutomirski , Will Drewry , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 7/9] seccomp: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 10:06:01 -0500 Message-Id: <1416582363-20661-8-git-send-email-bobby.prani@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). The following PATCH makes the change. Signed-off-by: Pranith Kumar --- kernel/seccomp.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/kernel/seccomp.c b/kernel/seccomp.c index 4ef9687..3729b06 100644 --- a/kernel/seccomp.c +++ b/kernel/seccomp.c @@ -175,17 +175,16 @@ static int seccomp_check_filter(struct sock_filter *filter, unsigned int flen) */ static u32 seccomp_run_filters(struct seccomp_data *sd) { - struct seccomp_filter *f = ACCESS_ONCE(current->seccomp.filter); struct seccomp_data sd_local; u32 ret = SECCOMP_RET_ALLOW; + /* Make sure cross-thread synced filter points somewhere sane. */ + struct seccomp_filter *f = + lockless_dereference(current->seccomp.filter); /* Ensure unexpected behavior doesn't result in failing open. */ if (unlikely(WARN_ON(f == NULL))) return SECCOMP_RET_KILL; - /* Make sure cross-thread synced filter points somewhere sane. */ - smp_read_barrier_depends(); - if (!sd) { populate_seccomp_data(&sd_local); sd = &sd_local; -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758685AbaKUPHP (ORCPT ); Fri, 21 Nov 2014 10:07:15 -0500 Received: from mail-ig0-f181.google.com ([209.85.213.181]:42286 "EHLO mail-ig0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758510AbaKUPHI (ORCPT ); Fri, 21 Nov 2014 10:07:08 -0500 From: Pranith Kumar To: "K. Y. Srinivasan" , Haiyang Zhang , devel@linuxdriverproject.org (open list:Hyper-V CORE AND...), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 4/9] hyperv: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 10:05:58 -0500 Message-Id: <1416582363-20661-5-git-send-email-bobby.prani@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). The following PATCH makes the change. Signed-off-by: Pranith Kumar --- include/linux/hyperv.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h index 08cfaff..06418b1 100644 --- a/include/linux/hyperv.h +++ b/include/linux/hyperv.h @@ -127,13 +127,12 @@ hv_get_ringbuffer_availbytes(struct hv_ring_buffer_info *rbi, u32 *read, u32 *write) { u32 read_loc, write_loc, dsize; - - smp_read_barrier_depends(); + struct hv_ring_buffer_info *rbi_p = lockless_dereference(rbi); /* Capture the read/write indices before they changed */ - read_loc = rbi->ring_buffer->read_index; - write_loc = rbi->ring_buffer->write_index; - dsize = rbi->ring_datasize; + read_loc = rbi_p->ring_buffer->read_index; + write_loc = rbi_p->ring_buffer->write_index; + dsize = rbi_p->ring_datasize; *write = write_loc >= read_loc ? dsize - (write_loc - read_loc) : read_loc - write_loc; -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758745AbaKUPIa (ORCPT ); Fri, 21 Nov 2014 10:08:30 -0500 Received: from mail-ie0-f171.google.com ([209.85.223.171]:53616 "EHLO mail-ie0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758676AbaKUPHP (ORCPT ); Fri, 21 Nov 2014 10:07:15 -0500 From: Pranith Kumar To: linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 8/9] task_work: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 10:06:02 -0500 Message-Id: <1416582363-20661-9-git-send-email-bobby.prani@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). The following PATCH makes the change. Signed-off-by: Pranith Kumar --- kernel/task_work.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kernel/task_work.c b/kernel/task_work.c index 8727032..b5599ce 100644 --- a/kernel/task_work.c +++ b/kernel/task_work.c @@ -62,8 +62,7 @@ task_work_cancel(struct task_struct *task, task_work_func_t func) * we raced with task_work_run(), *pprev == NULL/exited. */ raw_spin_lock_irqsave(&task->pi_lock, flags); - while ((work = ACCESS_ONCE(*pprev))) { - smp_read_barrier_depends(); + while ((work = lockless_dereference(*pprev))) { if (work->func != func) pprev = &work->next; else if (cmpxchg(pprev, work, work->next) == work) -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758662AbaKUPHM (ORCPT ); Fri, 21 Nov 2014 10:07:12 -0500 Received: from mail-ig0-f181.google.com ([209.85.213.181]:53706 "EHLO mail-ig0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758554AbaKUPHJ (ORCPT ); Fri, 21 Nov 2014 10:07:09 -0500 From: Pranith Kumar To: Tejun Heo , Christoph Lameter , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2 5/9] percpu: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 10:05:59 -0500 Message-Id: <1416582363-20661-6-git-send-email-bobby.prani@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). The following PATCH makes the change. Signed-off-by: Pranith Kumar --- include/linux/percpu-refcount.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/include/linux/percpu-refcount.h b/include/linux/percpu-refcount.h index 494ab05..3cf6759 100644 --- a/include/linux/percpu-refcount.h +++ b/include/linux/percpu-refcount.h @@ -128,10 +128,8 @@ static inline void percpu_ref_kill(struct percpu_ref *ref) static inline bool __ref_is_percpu(struct percpu_ref *ref, unsigned long __percpu **percpu_countp) { - unsigned long percpu_ptr = ACCESS_ONCE(ref->percpu_count_ptr); - /* paired with smp_store_release() in percpu_ref_reinit() */ - smp_read_barrier_depends(); + unsigned long percpu_ptr = lockless_dereference(ref->percpu_count_ptr); if (unlikely(percpu_ptr & __PERCPU_REF_ATOMIC)) return false; -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758774AbaKUPJg (ORCPT ); Fri, 21 Nov 2014 10:09:36 -0500 Received: from mail-ie0-f174.google.com ([209.85.223.174]:56730 "EHLO mail-ie0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758614AbaKUPHL (ORCPT ); Fri, 21 Nov 2014 10:07:11 -0500 From: Pranith Kumar To: Peter Zijlstra , Paul Mackerras , Ingo Molnar , Arnaldo Carvalho de Melo , linux-kernel@vger.kernel.org (open list:PERFORMANCE EVENT...) Subject: [PATCH v2 6/9] perf: Replace smp_read_barrier_depends() with lockless_dereference() Date: Fri, 21 Nov 2014 10:06:00 -0500 Message-Id: <1416582363-20661-7-git-send-email-bobby.prani@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). The following PATCH makes the change. Signed-off-by: Pranith Kumar --- kernel/events/core.c | 3 +-- kernel/events/uprobes.c | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/kernel/events/core.c b/kernel/events/core.c index d59fdc0..9dd5920 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -3400,14 +3400,13 @@ static void perf_remove_from_owner(struct perf_event *event) struct task_struct *owner; rcu_read_lock(); - owner = ACCESS_ONCE(event->owner); /* * Matches the smp_wmb() in perf_event_exit_task(). If we observe * !owner it means the list deletion is complete and we can indeed * free this event, otherwise we need to serialize on * owner->perf_event_mutex. */ - smp_read_barrier_depends(); + owner = lockless_dereference(event->owner); if (owner) { /* * Since delayed_put_task_struct() also drops the last diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c index 6158a64b..c070949 100644 --- a/kernel/events/uprobes.c +++ b/kernel/events/uprobes.c @@ -1212,8 +1212,8 @@ static struct xol_area *get_xol_area(void) if (!mm->uprobes_state.xol_area) __create_xol_area(0); - area = mm->uprobes_state.xol_area; - smp_read_barrier_depends(); /* pairs with wmb in xol_add_vma() */ + /* pairs with wmb in xol_add_vma() */ + area = lockless_dereference(mm->uprobes_state.xol_area); return area; } @@ -1507,8 +1507,8 @@ static unsigned long get_trampoline_vaddr(void) struct xol_area *area; unsigned long trampoline_vaddr = -1; - area = current->mm->uprobes_state.xol_area; - smp_read_barrier_depends(); + area = lockless_dereference(current->mm->uprobes_state.xol_area); + if (area) trampoline_vaddr = area->vaddr; -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758495AbaKUPGx (ORCPT ); Fri, 21 Nov 2014 10:06:53 -0500 Received: from mail-ie0-f178.google.com ([209.85.223.178]:46535 "EHLO mail-ie0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754269AbaKUPGt (ORCPT ); Fri, 21 Nov 2014 10:06:49 -0500 From: Pranith Kumar To: Herbert Xu , "David S. Miller" , Cristian Stoica , Horia Geanta , Ruchika Gupta , Michael Neuling , Wolfram Sang , linux-crypto@vger.kernel.org (open list:CRYPTO API), linux-kernel@vger.kernel.org (open list), Vinod Koul , Dan Williams , Bartlomiej Zolnierkiewicz , Kyungmin Park , =?UTF-8?q?Manuel=20Sch=C3=B6lling?= , Dave Jiang , Rashika , dmaengine@vger.kernel.org (open list:DMA GENERIC OFFLO...), "K. Y. Srinivasan" , Haiyang Zhang , devel@linuxdriverproject.org (open list:Hyper-V CORE AND...), Josh Triplett , Steven Rostedt , Mathieu Desnoyers , Lai Jiangshan , Tejun Heo , Christoph Lameter , Peter Zijlstra , Paul Mackerras , Ingo Molnar , Arnaldo Carvalho de Melo , Kees Cook , Andy Lutomirski , Will Drewry , Andrew Morton , Joonsoo Kim , Naoya Horiguchi , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , "Kirill A. Shutemov" , Hugh Dickins , NeilBrown , Joerg Roedel , Sasha Levin , Paul McQuade , linux-mm@kvack.org (open list:MEMORY MANAGEMENT), netfilter-devel@vger.kernel.org, coreteam@netfilter.org, netdev@vger.kernel.org (open list:NETWORKING [IPv4/...) Subject: [PATCH v2 0/9] Replace smp_read_barrier_depends() with lockless_derefrence() Date: Fri, 21 Nov 2014 10:05:54 -0500 Message-Id: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Recently lockless_dereference() was added which can be used in place of hard-coding smp_read_barrier_depends(). http://lkml.iu.edu/hypermail/linux/kernel/1410.3/04561.html The following series tries to do this. There are still some hard-coded locations which I was not sure how to replace with. I will send in separate patches/questions regarding them. Pranith Kumar (9): doc: memory-barriers.txt: Document use of lockless_dereference() drivers: dma: Replace smp_read_barrier_depends() with lockless_dereference() dcache: Replace smp_read_barrier_depends() with lockless_dereference() hyperv: Replace smp_read_barrier_depends() with lockless_dereference() percpu: Replace smp_read_barrier_depends() with lockless_dereference() perf: Replace smp_read_barrier_depends() with lockless_dereference() seccomp: Replace smp_read_barrier_depends() with lockless_dereference() task_work: Replace smp_read_barrier_depends() with lockless_dereference() netfilter: Replace smp_read_barrier_depends() with lockless_dereference() Documentation/memory-barriers.txt | 4 ++-- drivers/dma/ioat/dma_v2.c | 3 +-- drivers/dma/ioat/dma_v3.c | 3 +-- fs/dcache.c | 7 ++----- include/linux/hyperv.h | 9 ++++----- include/linux/percpu-refcount.h | 4 +--- kernel/events/core.c | 3 +-- kernel/events/uprobes.c | 8 ++++---- kernel/seccomp.c | 7 +++---- kernel/task_work.c | 3 +-- net/ipv4/netfilter/arp_tables.c | 3 +-- net/ipv4/netfilter/ip_tables.c | 3 +-- net/ipv6/netfilter/ip6_tables.c | 3 +-- 13 files changed, 23 insertions(+), 37 deletions(-) -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758844AbaKUQdn (ORCPT ); Fri, 21 Nov 2014 11:33:43 -0500 Received: from mail-oi0-f41.google.com ([209.85.218.41]:37479 "EHLO mail-oi0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755084AbaKUQdl (ORCPT ); Fri, 21 Nov 2014 11:33:41 -0500 MIME-Version: 1.0 In-Reply-To: <1416582363-20661-8-git-send-email-bobby.prani@gmail.com> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> <1416582363-20661-8-git-send-email-bobby.prani@gmail.com> Date: Fri, 21 Nov 2014 08:33:40 -0800 X-Google-Sender-Auth: m39MLKCdpBSCly49mO_Z6HoBAZQ Message-ID: Subject: Re: [PATCH v2 7/9] seccomp: Replace smp_read_barrier_depends() with lockless_dereference() From: Kees Cook To: Pranith Kumar Cc: Andy Lutomirski , Will Drewry , open list Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Nov 21, 2014 at 7:06 AM, Pranith Kumar wrote: > Recently lockless_dereference() was added which can be used in place of > hard-coding smp_read_barrier_depends(). The following PATCH makes the change. > > Signed-off-by: Pranith Kumar > --- > kernel/seccomp.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) Thanks! Acked-by: Kees Cook Do you need me to carry this patch in the seccomp tree, or will someone else be taking your entire series? -Kees > > diff --git a/kernel/seccomp.c b/kernel/seccomp.c > index 4ef9687..3729b06 100644 > --- a/kernel/seccomp.c > +++ b/kernel/seccomp.c > @@ -175,17 +175,16 @@ static int seccomp_check_filter(struct sock_filter *filter, unsigned int flen) > */ > static u32 seccomp_run_filters(struct seccomp_data *sd) > { > - struct seccomp_filter *f = ACCESS_ONCE(current->seccomp.filter); > struct seccomp_data sd_local; > u32 ret = SECCOMP_RET_ALLOW; > + /* Make sure cross-thread synced filter points somewhere sane. */ > + struct seccomp_filter *f = > + lockless_dereference(current->seccomp.filter); > > /* Ensure unexpected behavior doesn't result in failing open. */ > if (unlikely(WARN_ON(f == NULL))) > return SECCOMP_RET_KILL; > > - /* Make sure cross-thread synced filter points somewhere sane. */ > - smp_read_barrier_depends(); > - > if (!sd) { > populate_seccomp_data(&sd_local); > sd = &sd_local; > -- > 1.9.1 > -- Kees Cook Chrome OS Security From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758906AbaKUQgW (ORCPT ); Fri, 21 Nov 2014 11:36:22 -0500 Received: from mail-qc0-f172.google.com ([209.85.216.172]:42593 "EHLO mail-qc0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755442AbaKUQgV (ORCPT ); Fri, 21 Nov 2014 11:36:21 -0500 Message-ID: <546F6A05.9080600@gmail.com> Date: Fri, 21 Nov 2014 11:36:21 -0500 From: Pranith Kumar User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: Kees Cook CC: Andy Lutomirski , Will Drewry , open list Subject: Re: [PATCH v2 7/9] seccomp: Replace smp_read_barrier_depends() with lockless_dereference() References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> <1416582363-20661-8-git-send-email-bobby.prani@gmail.com> In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/21/2014 11:33 AM, Kees Cook wrote: > On Fri, Nov 21, 2014 at 7:06 AM, Pranith Kumar wrote: >> Recently lockless_dereference() was added which can be used in place of >> hard-coding smp_read_barrier_depends(). The following PATCH makes the change. >> >> Signed-off-by: Pranith Kumar >> --- >> kernel/seccomp.c | 7 +++---- >> 1 file changed, 3 insertions(+), 4 deletions(-) > Thanks! > > Acked-by: Kees Cook > > Do you need me to carry this patch in the seccomp tree, or will > someone else be taking your entire series? > > -Kees Please take this patch individually into your tree. There are discussions about the other patches and I will drop the accepted patches and iterate for the next version. Thanks! >> diff --git a/kernel/seccomp.c b/kernel/seccomp.c >> index 4ef9687..3729b06 100644 >> --- a/kernel/seccomp.c >> +++ b/kernel/seccomp.c >> @@ -175,17 +175,16 @@ static int seccomp_check_filter(struct sock_filter *filter, unsigned int flen) >> */ >> static u32 seccomp_run_filters(struct seccomp_data *sd) >> { >> - struct seccomp_filter *f = ACCESS_ONCE(current->seccomp.filter); >> struct seccomp_data sd_local; >> u32 ret = SECCOMP_RET_ALLOW; >> + /* Make sure cross-thread synced filter points somewhere sane. */ >> + struct seccomp_filter *f = >> + lockless_dereference(current->seccomp.filter); >> >> /* Ensure unexpected behavior doesn't result in failing open. */ >> if (unlikely(WARN_ON(f == NULL))) >> return SECCOMP_RET_KILL; >> >> - /* Make sure cross-thread synced filter points somewhere sane. */ >> - smp_read_barrier_depends(); >> - >> if (!sd) { >> populate_seccomp_data(&sd_local); >> sd = &sd_local; >> -- >> 1.9.1 >> > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751982AbaKVOhW (ORCPT ); Sat, 22 Nov 2014 09:37:22 -0500 Received: from mail-qa0-f41.google.com ([209.85.216.41]:42387 "EHLO mail-qa0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750814AbaKVOhU (ORCPT ); Sat, 22 Nov 2014 09:37:20 -0500 Date: Sat, 22 Nov 2014 09:37:17 -0500 From: Tejun Heo To: Pranith Kumar Cc: Christoph Lameter , open list Subject: Re: [PATCH v2 5/9] percpu: Replace smp_read_barrier_depends() with lockless_dereference() Message-ID: <20141122143717.GD26007@htj.dyndns.org> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> <1416582363-20661-6-git-send-email-bobby.prani@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1416582363-20661-6-git-send-email-bobby.prani@gmail.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Nov 21, 2014 at 10:05:59AM -0500, Pranith Kumar wrote: > Recently lockless_dereference() was added which can be used in place of > hard-coding smp_read_barrier_depends(). The following PATCH makes the change. > > Signed-off-by: Pranith Kumar Applied to percpu/for-3.19. Thanks. -- tejun From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754366AbaLBSEY (ORCPT ); Tue, 2 Dec 2014 13:04:24 -0500 Received: from mail-qc0-f182.google.com ([209.85.216.182]:62306 "EHLO mail-qc0-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754135AbaLBSEJ (ORCPT ); Tue, 2 Dec 2014 13:04:09 -0500 Date: Tue, 2 Dec 2014 13:04:06 -0500 From: Tejun Heo To: Pranith Kumar Cc: Christoph Lameter , open list Subject: Re: [PATCH v2 5/9] percpu: Replace smp_read_barrier_depends() with lockless_dereference() Message-ID: <20141202180406.GH10918@htj.dyndns.org> References: <1416582363-20661-1-git-send-email-bobby.prani@gmail.com> <1416582363-20661-6-git-send-email-bobby.prani@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1416582363-20661-6-git-send-email-bobby.prani@gmail.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Nov 21, 2014 at 10:05:59AM -0500, Pranith Kumar wrote: > Recently lockless_dereference() was added which can be used in place of > hard-coding smp_read_barrier_depends(). The following PATCH makes the change. > > Signed-off-by: Pranith Kumar Applied to percpu/for-3.19. Thanks. -- tejun