From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Zijlstra Subject: Re: [PATCH 6/6] sched: Change task_struct::state Date: Wed, 2 Jun 2021 16:20:28 +0200 Message-ID: References: <20210602131225.336600299@infradead.org> <20210602133040.587042016@infradead.org> <896642516.5866.1622642818225.JavaMail.zimbra@efficios.com> Mime-Version: 1.0 Return-path: DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=jwYPkOxp8bIiCCDES8Qxb1QGLyBu3SVZdBROZyNFfA0=; b=mmUA1Je16oWX5CdXJuvtR6xs1N wW3tTPUR68zcqTjjDSPB93BEhwqAUqHvLU5H+MFPkTIN2UpdIfa+9ZN7d2074KYDkuFl+cHoz57Fp O5LZB385l+07/5YpxDwddQU+q4TD+Py4LnPih7JBxujXQzl5rJNsp48vSRqitn4DkerTeXs1LdVkj HUFXQTgRf46a3y3W9InIcHbOVfNmxrq0eLVlvopde2wRVXV/1aOq+Oz4H6SMV2zlNqu9LF32FSRYG 60clDhnQeg1eugNBFWGwKkKQMZEBWMRyPA5yrD+y7FK77e88bMNsFG1gtJEySxqSudKctsQlwdsPk w42Sd/TQ==; Content-Disposition: inline In-Reply-To: <896642516.5866.1622642818225.JavaMail.zimbra@efficios.com> List-ID: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Mathieu Desnoyers Cc: Thomas Gleixner , Ingo Molnar , Juri Lelli , Vincent Guittot , Dietmar Eggemann , rostedt , Ben Segall , Mel Gorman , bristot , Borislav Petkov , x86 , "H. Peter Anvin" , Jens Axboe , Alasdair Kergon , Mike Snitzer , dm-devel , "David S. Miller" , Jakub Kicinski , Felipe Balbi , Greg Kroah-Hartman , Alexander Viro , Tejun Heo On Wed, Jun 02, 2021 at 10:06:58AM -0400, Mathieu Desnoyers wrote: > ----- On Jun 2, 2021, at 9:12 AM, Peter Zijlstra peterz@infradead.org wrote: > > @@ -134,14 +134,14 @@ struct task_group; > > do { \ > > WARN_ON_ONCE(is_special_task_state(state_value));\ > > current->task_state_change = _THIS_IP_; \ > > - current->state = (state_value); \ > > + WRITE_ONCE(current->__state, (state_value)); \ > > } while (0) > > Why not introduce set_task_state(p) and get_task_state(p) rather than sprinkle > READ_ONCE() and WRITE_ONCE() all over the kernel ? set_task_state() is fundamentally unsound, there's very few sites that _set_ state on anything other than current, and those sites are super tricky, eg. ptrace. Having get_task_state() would seem to suggest it's actually a sane thing to do, it's not really. Inspecting remote state is full of races, and some of that really wants cleaning up, but that's for another day.