Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755659AbbBFPRl (ORCPT ); Fri, 6 Feb 2015 10:17:41 -0500 Received: from mail-qc0-f169.google.com ([209.85.216.169]:62198 "EHLO mail-qc0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753442AbbBFPRj (ORCPT ); Fri, 6 Feb 2015 10:17:39 -0500 Message-ID: <54D4DB11.6000306@hurleysoftware.com> Date: Fri, 06 Feb 2015 10:17:37 -0500 From: Peter Hurley User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: Mathieu Desnoyers , Pranith Kumar CC: Huang Ying , LKML , Paul McKenney , David Howells , Greg Kroah-Hartman Subject: Re: [PATCH] llist: Fix missing memory barrier References: <1423192017-16735-1-git-send-email-mathieu.desnoyers@efficios.com> <625236311.87350.1423231952716.JavaMail.zimbra@efficios.com> In-Reply-To: <625236311.87350.1423231952716.JavaMail.zimbra@efficios.com> 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 Content-Length: 3625 Lines: 110 On 02/06/2015 09:12 AM, Mathieu Desnoyers wrote: > ----- Original Message ----- >> From: "Pranith Kumar" >> To: "Mathieu Desnoyers" >> Cc: "Huang Ying" , "LKML" , "Paul McKenney" >> , "David Howells" >> Sent: Thursday, February 5, 2015 10:44:07 PM >> Subject: Re: [PATCH] llist: Fix missing memory barrier >> >> Hi Mathieu, >> >> On Thu, Feb 5, 2015 at 10:06 PM, Mathieu Desnoyers >> wrote: >>> A smp_read_barrier_depends() appears to be missing in llist_del_first(). >>> It should only matter for Alpha in practice. Adding it after the check >>> of entry against NULL allows skipping the barrier in a common case. >> >> We recently decided on using lockless_dereference() instead of >> hard-coding smp_read_barrier_depends()[1]. The advantage is that >> lockless_dereference() clearly shows what loads are being ordered. >> Could you resend the patch using that API? > > Since llist.h has been introduced prior to 3.18, I'm wondering if > it would be worthwhile to submit 2 patches for the purpose of > backporting to stable branches: > > 1) Fix introducing smp_read_barrier_depends() (for master and > stable branches) > 2) Move master from smp_read_barrier_depends() to > lockless_dereference(), > > Thoughts ? Other way around. The first patch should use lockless_dereference() for mainline. Then once that's been picked up and has a SHA, then a backport patch for stable using smp_read_barrier_depends() instead before lockless_dereference() was introduced. Regards, Peter Hurley > Thanks! > > Mathieu > > >> >> Thanks! >> >> [1] http://lkml.iu.edu/hypermail/linux/kernel/1410.3/04561.html >> >>> >>> Signed-off-by: Mathieu Desnoyers >>> CC: Huang Ying >>> CC: Paul McKenney >>> CC: David Howells >>> --- >>> lib/llist.c | 7 +++++++ >>> 1 file changed, 7 insertions(+) >>> >>> diff --git a/lib/llist.c b/lib/llist.c >>> index f76196d..72861f3 100644 >>> --- a/lib/llist.c >>> +++ b/lib/llist.c >>> @@ -26,6 +26,7 @@ >>> #include >>> #include >>> #include >>> +#include >>> >>> >>> /** >>> @@ -72,6 +73,12 @@ struct llist_node *llist_del_first(struct llist_head >>> *head) >>> if (entry == NULL) >>> return NULL; >>> old_entry = entry; >>> + /* >>> + * Load entry before entry->next. Matches the implicit >>> + * memory barrier before the cmpxchg in llist_add_batch(), >>> + * which ensures entry->next is stored before entry. >>> + */ >>> + smp_read_barrier_depends(); >>> next = entry->next; >>> entry = cmpxchg(&head->first, old_entry, next); >>> if (entry == old_entry) >>> -- >>> 2.1.4 >>> >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >>> the body of a message to majordomo@vger.kernel.org >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>> Please read the FAQ at http://www.tux.org/lkml/ >> >> >> >> -- >> Pranith >> > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/