Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp943822ybl; Fri, 31 Jan 2020 10:50:05 -0800 (PST) X-Google-Smtp-Source: APXvYqy67UhPaUmZSC4HRJrItVXz1nFUGj5/TJapouOJxNIDE9TTyuExrGATmxJ7VFmtCf1zy1dW X-Received: by 2002:a54:408f:: with SMTP id i15mr7039780oii.64.1580496605417; Fri, 31 Jan 2020 10:50:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580496605; cv=none; d=google.com; s=arc-20160816; b=B7NxVZQ1QsVGQErw8MdT5K3ntIT+1BBSgUXxdcripENpwWCYDX7O35YSYKR6tu6ZEU XTbKbs4eDDCgiAG41Iu21Dz6yqeKnu/uzsmaNEQeciyb/M7qwnwsyK29nrXNWGYI+NEW dV2KRqHu3OPwz79/z6J6Fc8vQQIAqEXKpb5iJ5Ew9I00RDTw0cfPO0nl2xFS4JEKVPbM 7/ueHnHtYqPpWUrZAfIrHbJReJ2qpSMHTLLTp9J/V0AonKnP+EzBCiUJnpMbYhd3gr1s dDYsTlVGkguRc7NSGHYbAHiiWrEJK1COQHu2wUKmOl/4gZjZtqG+Ha42Hv06nHQcJQWl rBvw== 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:dkim-signature; bh=WHbT6Ac2Utt1izmtrGIgoXBCRv+tY8YJ9GCZjdZfzQo=; b=zRiPuA/tfF97oX54G+COia28fUDxg0uqvtBq5BFh/z9UTgBZ6A4yq2ljfsk9L7XzHK eofngxFq0YIDt1/Y01Xol69JtqoN64xfm1GvBsODzjz5lDw+G5Zpivl7r6Py4fYKPfLb 7LrrYg2qA8PMJnHnecni6cljuP6I/n7jXRaTYN4KPTX2DWiu8K/nm+it5HazRJBHutGL ewZOXtipPGiWY1x+bULk1WIjkBw3GbrV5yiMBBveuBiEiu4zS9E6/HisCInQcNyg17gD QkkzlcOJXTn2ei3fQzCL30Y/UDEI9QeBPEfwJyEBRYDhpSSVHM4ytI0L0KcmYc5DV/pU FUbw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=mc157TVX; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l20si4929760otd.292.2020.01.31.10.49.52; Fri, 31 Jan 2020 10:50:05 -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; dkim=pass header.i=@google.com header.s=20161025 header.b=mc157TVX; 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; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726186AbgAaSsg (ORCPT + 99 others); Fri, 31 Jan 2020 13:48:36 -0500 Received: from mail-yw1-f65.google.com ([209.85.161.65]:46158 "EHLO mail-yw1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725939AbgAaSsg (ORCPT ); Fri, 31 Jan 2020 13:48:36 -0500 Received: by mail-yw1-f65.google.com with SMTP id z141so5218174ywd.13 for ; Fri, 31 Jan 2020 10:48:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=WHbT6Ac2Utt1izmtrGIgoXBCRv+tY8YJ9GCZjdZfzQo=; b=mc157TVXVtIe6dTeKX8LhWZSj5dMOIA0rjVjZHdgcrgnCAfxLlqP47EwwosUL0PNal COnniRVCIBHM1euzHZzBAZ2v1ccekc/L1D30FxLXJGcZw2WdSU9wh5L6iJYjqyygQ2p0 5eXBbAChHMmqjloHAt3j4hL+UoRmbsg4yGI0iUGWCvQK+WhLMW8hKguIuSzt/0SB1suf Nt2GaQ3VlYJvYBKuY70w6bQhQ6uDtgCmbeXNH+/7RLujzHJqB5yX8saYQG/7IaDVfTQ+ XdVfuBxOqKwVDIhU5bARRzVtL19R3uUqTa4/4DGMsDO+9tmkKDfxrlnJLGfEtWbal/bh 5vIw== 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=WHbT6Ac2Utt1izmtrGIgoXBCRv+tY8YJ9GCZjdZfzQo=; b=ZFHgW2G2ID2QXD+GYz3fTPMIpUfyTBgDaO7juva8KUOB3t6v7dj5SSSsqfY6IRiWDM B7lrB3MEw96sGuvyFDzUhplxY2FDS9/YCAmR+jY4p+OGVMvaJJGwQS9n4inEKmarMchH TTWupNCpECv+XzYj81RE7iyiBO2tgWociMsgwvInmsK67UKjYBF1oV/vTRZxbrp4liVf 4O1CXdrKWLK4MfLelj32AYl5MmlvIZGhpMBikay1LNNhXrbNM+iAmMh8oAGqLQoGzN04 synbpf4Y900iMLaW/5g4TFRzIuCzdnKVPer9frGoI022iFv4MjpTSJ/bgJjjPl27O3ro jnlQ== X-Gm-Message-State: APjAAAV167ue4BAvyvIBGIIz/zV3lFsp5fGwoFD0VNdAXC/sWE/rIrBk Gin9Nw6rnVAiDrEazFuWfzgre3i9xZ0E8zUTPFNhbg== X-Received: by 2002:a81:3a06:: with SMTP id h6mr8801695ywa.170.1580496513329; Fri, 31 Jan 2020 10:48:33 -0800 (PST) MIME-Version: 1.0 References: <20200131164308.GA5175@willie-the-truck> <20200131184322.GA11457@worktop.programming.kicks-ass.net> In-Reply-To: <20200131184322.GA11457@worktop.programming.kicks-ass.net> From: Eric Dumazet Date: Fri, 31 Jan 2020 10:48:21 -0800 Message-ID: Subject: Re: Confused about hlist_unhashed_lockless() To: Peter Zijlstra Cc: Will Deacon , Thomas Gleixner , "Paul E. McKenney" , "the arch/x86 maintainers" , LKML , Marco Elver 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 Fri, Jan 31, 2020 at 10:43 AM Peter Zijlstra wrote: > > On Fri, Jan 31, 2020 at 08:48:05AM -0800, Eric Dumazet wrote: > > BUG: KCSAN: data-race in del_timer / detach_if_pending > > > diff --git a/include/linux/timer.h b/include/linux/timer.h > > index 1e6650ed066d5d28251b0bd385fc37ef94c96532..0dc19a8c39c9e49a7cde3d34bfa4be8871cbc1c2 > > 100644 > > --- a/include/linux/timer.h > > +++ b/include/linux/timer.h > > @@ -164,7 +164,7 @@ static inline void destroy_timer_on_stack(struct > > timer_list *timer) { } > > */ > > static inline int timer_pending(const struct timer_list * timer) > > { > > - return timer->entry.pprev != NULL; > > + return !hlist_unhashed_lockless(&timer->entry); > > } > > That's just completely wrong. > > Aside from any memory barrier issues that might or might not be there > (I'm waaaay to tired atm to tell), the above code is perfectly fine. > > In fact, this is a KCSAN compiler infrastructure 'bug'. > > Any load that is only compared to zero is immune to load-tearing issues. > > The correct thing to do here is something like: > > static inline int timer_pending(const struct timer_list *timer) > { > /* > * KCSAN compiler infrastructure is insuffiently clever to > * realize that a 'load compared to zero' is immune to > * load-tearing. > */ > return data_race(timer->entry.pprev != NULL); > } This is nice, now with have data_race() Remember these patches were sent 2 months ago, at a time we were trying to sort out things. data_race() was merged a few days ago.