Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp9589585rwr; Thu, 11 May 2023 18:03:07 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6h6YzvHA58unT/fBp2UghrqpA3Lf4qW/QOTpVOPOwNWWjKyorZsrNXaN7xquNkc5GXptP6 X-Received: by 2002:a05:6a00:188f:b0:63b:8eeb:77b8 with SMTP id x15-20020a056a00188f00b0063b8eeb77b8mr33332128pfh.13.1683853386710; Thu, 11 May 2023 18:03:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683853386; cv=none; d=google.com; s=arc-20160816; b=lCknTcA+C4crZ7d4mSoY3/Wpx0gATLdil6ENLmvrPJcDfB/UsyEc/pZ8CDdVyA0S4o wVYytsll2ez4ajfzD8V3K47tSDxWvs9B0t1JlQlsR8dfJhfgp3IvbDqgCdGNmg2il9fW +TvfTK4FfkseZ60+BToCE10UwSzorE4TlcEbrpdZPtoK7CHgw+dYKoDD7YuLHvP8hs63 cGtQWjYfJrZ1yidJ0j4K84EiMgDmXfQNDxt/gJcfCJbfFj7sWKHmmxGNI9RtR38IqDDQ Tv7iz7HedKNlkJidanlu20nWbVRQNNpD6asCflWzqvMGvRGXlYBoN6eVIwi2e7jvn/DV mj0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=cGt7XvztPoU2+SAzWDZV94SrMYmoPfEkg7iGBCsgMsY=; b=SYotmxhM3yNNc1fbTgsSiBvQBUz6zbZfWVe3yzHema1rOsK1/benCQWiPGmxlP5zDp GkfzQBNejvWwtM+BtTnvhoxBowvSv1mdGg0s8adPEaCaGg0Na6ZCCSU+KJ7fgXv14aUK zSlV2jxMOOfOiq4Wamja/E6SwffJes68j2XyFnlmdLE6b69w+Xvt5/i2+KZJfluIQ4P+ 7Hs6kpJCZHMKXwGIQGQVlDjnaYAPsRCwfcjG2svwruH8LmkjavwB4C/XUzma6e8sVh0u f2xC7R88pKQ+Ya7ErZ45YNdOCeJQBDL2Q1rr+O7G2VKUfmCYzP9BNE7PmwaAUVYrfynX voFg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=58DjcIqQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r71-20020a632b4a000000b0051f6974b6f9si8694845pgr.789.2023.05.11.18.02.51; Thu, 11 May 2023 18:03:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=58DjcIqQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S239624AbjELAwj (ORCPT + 99 others); Thu, 11 May 2023 20:52:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50822 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229654AbjELAwi (ORCPT ); Thu, 11 May 2023 20:52:38 -0400 Received: from mail-qt1-x834.google.com (mail-qt1-x834.google.com [IPv6:2607:f8b0:4864:20::834]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3EED54C3E for ; Thu, 11 May 2023 17:52:37 -0700 (PDT) Received: by mail-qt1-x834.google.com with SMTP id d75a77b69052e-3ef34c49cb9so894371cf.1 for ; Thu, 11 May 2023 17:52:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1683852756; x=1686444756; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=cGt7XvztPoU2+SAzWDZV94SrMYmoPfEkg7iGBCsgMsY=; b=58DjcIqQzx/Nx80LHlV1KPOL+NOIHHX3EzYogrDcdcbU+7w24gJ7cOADnZILgOHr0q IMr6s/jyki/uxFyihR29fQbATNKJE9mYIR2qhmd2U2V94pT8w1VINvpPt++G5TSEqxUD xeAP7DtKt7REtodiKPK7LqsTztJSeLptzPahVQOfTGJ3T5h7m+Ffl7NioJeYnETCnmCV +oGFFWw6ILxzCSROGFVWcFIHERpXKdwdEjBQJ/InlWzkR0ELIA5+2WPQ9zoviBtYwISS G3lPqlSFEf+OqgVwi815/WXF0M+CttNuyHxJHqoM5/v/Y8E6xoQLRErT00DZP/Qc0z7Z sryw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683852756; x=1686444756; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cGt7XvztPoU2+SAzWDZV94SrMYmoPfEkg7iGBCsgMsY=; b=D3tIAvu7wTpHk6/WI8ctlN0/4bX6wVmqW0UxkztPHbic/q8IhIGjiN1KzCD4YgSEQ8 CDBvNaGycmdMSkVEBS1EzyLTYjaHCOJmi1OH7xIbSg0GovULUasyg5iXmYNKuZHG93YJ Ld/KyXr8NqyHH28uBb20/XbgAgmNdUT9GW6sq2AK87a5xZwTwAiomEMdY92jqFzKRwrV s3OAiCQwkPlwiSOMs+ZAWL+pXlskpqfZcUJBhD8TtUEt+WHNX51lXeaMDZC7tPnde8k7 P7PrWBne9Sgu7czORD2IJEeXQIY8J/3Ci1AKeQnMhF8AdaNwsIf97/jfUe6J6t/Wu4Ya tl6w== X-Gm-Message-State: AC+VfDx0zKBj5waYP07wM5a8YVE8OvwMAazKON89s45pCiGXKMzo8utx jct0jXV0vcgUkOLJIKxdK1UUA7mkmjbrl7SvBwhw X-Received: by 2002:ac8:5dd1:0:b0:3ef:3083:a437 with SMTP id e17-20020ac85dd1000000b003ef3083a437mr207476qtx.18.1683852756301; Thu, 11 May 2023 17:52:36 -0700 (PDT) MIME-Version: 1.0 References: <20230406194053.876844-1-arve@android.com> <20230511214144.1924757-1-jstultz@google.com> <20230511223124.GJ2296992@hirez.programming.kicks-ass.net> In-Reply-To: <20230511223124.GJ2296992@hirez.programming.kicks-ass.net> From: John Stultz Date: Thu, 11 May 2023 17:52:24 -0700 Message-ID: Subject: Re: [PATCH] sched/wait: Fix a kthread_park race with wait_woken() To: Peter Zijlstra Cc: LKML , =?UTF-8?B?QXJ2ZSBIasO4bm5ldsOlZw==?= , Ingo Molnar , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Daniel Bristot de Oliveira , Valentin Schneider Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 11, 2023 at 3:31=E2=80=AFPM Peter Zijlstra wrote: > > On Thu, May 11, 2023 at 09:41:30PM +0000, John Stultz wrote: > > From: Arve Hj=C3=B8nnev=C3=A5g > > > > kthread_park and wait_woken have a similar race that kthread_stop and > > wait_woken used to have before it was fixed in > > cb6538e740d7543cd989128625cf8cac4b471e0a. Extend that fix to also cover > > cb6538e740d7 ("sched/wait: Fix a kthread race with wait_woken()") > > > kthread_park. > > > > Cc: Ingo Molnar > > Cc: Peter Zijlstra > > Cc: Juri Lelli > > Cc: Vincent Guittot > > Cc: Dietmar Eggemann > > Cc: Steven Rostedt > > Cc: Ben Segall > > Cc: Mel Gorman > > Cc: Daniel Bristot de Oliveira > > Cc: Valentin Schneider > > Signed-off-by: Arve Hj=C3=B8nnev=C3=A5g > > Signed-off-by: John Stultz > > --- > > This seemingly slipped by, so I wanted to resend it > > for review. > > --- > > kernel/sched/wait.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c > > index 133b74730738..a9cf49da884b 100644 > > --- a/kernel/sched/wait.c > > +++ b/kernel/sched/wait.c > > @@ -425,9 +425,9 @@ int autoremove_wake_function(struct wait_queue_entr= y *wq_entry, unsigned mode, i > > } > > EXPORT_SYMBOL(autoremove_wake_function); > > > > -static inline bool is_kthread_should_stop(void) > > +static inline bool is_kthread_should_stop_or_park(void) > > { > > - return (current->flags & PF_KTHREAD) && kthread_should_stop(); > > + return (current->flags & PF_KTHREAD) && (kthread_should_stop() ||= kthread_should_park()); > > } > > > > /* > > That's a bit sad; that two function calls for checking two consecutive > bits in the same word :-( > > If we move this to kthread.c and write it like: > > kthread =3D __to_kthread(current); > if (!kthread) > return false; > > return test_bit(KTHREAD_SHOULD_STOP, &kthread->flags) || > test_bit(KTHREAD_SHOULD_PARK, &kthread->flags); > > Then the compiler should be able to merge the two bits in a single load > and test due to constant_test_bit() -- do check though. Hrm. Apologies, as it's been awhile since I've looked at disassembled asm, so I may be wrong, but I don't think that's happening here. With the logic above I'm seeing it build as: 0000000000000a50 : a50: 65 48 8b 14 25 00 00 mov %gs:0x0,%rdx a57: 00 00 a59: 48 8b 8a 78 0a 00 00 mov 0xa78(%rdx),%rcx a60: 31 c0 xor %eax,%eax a62: 48 85 c9 test %rcx,%rcx a65: 74 11 je a78 a67: f6 42 2e 20 testb $0x20,0x2e(%rdx) a6b: 74 0b je a78 a6d: 48 8b 01 mov (%rcx),%rax a70: 48 d1 e8 shr %rax a73: 83 e0 01 and $0x1,%eax a76: 74 05 je a7d a78: e9 00 00 00 00 jmp a7d a7d: 48 8b 01 mov (%rcx),%rax a80: 48 c1 e8 02 shr $0x2,%rax a84: 83 e0 01 and $0x1,%eax a87: e9 00 00 00 00 jmp a8c a8c: 0f 1f 40 00 nopl 0x0(%rax) Where as if I drop the second test_bit() to see if it was similar, I see: 0000000000000a50 : a50: 65 48 8b 14 25 00 00 mov %gs:0x0,%rdx a57: 00 00 a59: 48 8b 8a 78 0a 00 00 mov 0xa78(%rdx),%rcx a60: 31 c0 xor %eax,%eax a62: 48 85 c9 test %rcx,%rcx a65: 74 14 je a7b a67: f6 42 2e 20 testb $0x20,0x2e(%rdx) a6b: 74 0e je a7b a6d: 48 8b 01 mov (%rcx),%rax a70: 48 d1 e8 shr %rax a73: 83 e0 01 and $0x1,%eax a76: e9 00 00 00 00 jmp a7b a7b: e9 00 00 00 00 jmp a80 <__pfx_kthread_freezable_should_stop> Despite that, should I still re-submit the change this way? thanks -john