Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp850925ybh; Tue, 10 Mar 2020 09:24:15 -0700 (PDT) X-Google-Smtp-Source: ADFU+vts4z7R5We+cSyH5aA5Z1eISftn8CRZw7DVAsqp89DodVYPUqXlFQPtgjNvPyXDzdYAAIRd X-Received: by 2002:a9d:23a1:: with SMTP id t30mr2184010otb.253.1583857454886; Tue, 10 Mar 2020 09:24:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583857454; cv=none; d=google.com; s=arc-20160816; b=Qj93VejNecWYRZxX5KU9QrQycs0XROEK6pGAeEgo+r3M07PIySRZTzy+tDjWAi2MzJ WJpekgJcsG5/jN3wqbsUaFaSnY7nFluyZkZMV8Y9yDO8PHZ2CjnsbQslDOPCuQVv2MPD 3xVrDP9YJhXhl2PFXA8qHLDrbR61pZYpK4DURu8c6GqABxDlcm35f7Q5OUREvPhpm7u9 Tjij1YO7ODbvPemx74ICpRV4wV2G13rV6CP/rkjMflcQ+M3zNUYw8LkbVhrRcLXm5zJ2 +wix/eO3Z+YvXwuTK6snvEZOEwkSdG5Lq1VXKoen7LRiLaZC1rd4y4qhY9BjHfNYE1Ka Lnfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=fOJxmssU3M+2uFfYCVZVfEn7Hxc5nvEt32/Yw64A9fo=; b=CUGW7knZcT3llbD2+hECYcTLabipYe9uajAMiTWhBcLc5mfXlcjA6HWNKDA59mr/n7 dCPhi/c8QDWjtrlPS+poX44Lx09uOM1PElQua573ig9MfRDgA6vRCYAVIHR6v7VD5EUh nEv4T8ZTksud2AXO3sxeZ+uY+p3+2M/ZjOm9NiRAyUFFbMP9keI49UHXyLMqXnPfzL5S 8wTyuR5Em6ate25HR01jL9ZDdfbZKbikAwSCi/HkfdzClG54yianNuNIu/kv+J3U8EBB FJ9B59IlWgEocliCVeVv6PhiFvKgNjP5X+ILmeljNIMzMVpLjYMIFMMhy9f/FVGDoVIP 350g== 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 l9si8377084otr.27.2020.03.10.09.24.02; Tue, 10 Mar 2020 09:24:14 -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 S1726859AbgCJQXg (ORCPT + 99 others); Tue, 10 Mar 2020 12:23:36 -0400 Received: from mail.fireflyinternet.com ([109.228.58.192]:50224 "EHLO fireflyinternet.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726488AbgCJQXg (ORCPT ); Tue, 10 Mar 2020 12:23:36 -0400 X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from build.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 20512003-1500050 for multiple; Tue, 10 Mar 2020 16:23:20 +0000 From: Chris Wilson To: linux-kernel@vger.kernel.org Cc: Chris Wilson , Tejun Heo , Lai Jiangshan Subject: [PATCH] workqueue: Mark up unlocked access to wq->first_flusher Date: Tue, 10 Mar 2020 16:23:19 +0000 Message-Id: <20200310162319.10138-1-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ 7329.671518] BUG: KCSAN: data-race in flush_workqueue / flush_workqueue [ 7329.671549] [ 7329.671572] write to 0xffff8881f65fb250 of 8 bytes by task 37173 on cpu 2: [ 7329.671607] flush_workqueue+0x3bc/0x9b0 (kernel/workqueue.c:2844) [ 7329.672527] [ 7329.672540] read to 0xffff8881f65fb250 of 8 bytes by task 37175 on cpu 0: [ 7329.672571] flush_workqueue+0x28d/0x9b0 (kernel/workqueue.c:2835) Signed-off-by: Chris Wilson Cc: Tejun Heo Cc: Lai Jiangshan --- kernel/workqueue.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 301db4406bc3..2dbf94c873d7 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -2832,7 +2832,7 @@ void flush_workqueue(struct workqueue_struct *wq) * First flushers are responsible for cascading flushes and * handling overflow. Non-first flushers can simply return. */ - if (wq->first_flusher != &this_flusher) + if (READ_ONCE(wq->first_flusher) != &this_flusher) return; mutex_lock(&wq->mutex); @@ -2841,7 +2841,7 @@ void flush_workqueue(struct workqueue_struct *wq) if (wq->first_flusher != &this_flusher) goto out_unlock; - wq->first_flusher = NULL; + WRITE_ONCE(wq->first_flusher, NULL); WARN_ON_ONCE(!list_empty(&this_flusher.list)); WARN_ON_ONCE(wq->flush_color != this_flusher.flush_color); -- 2.20.1