Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp555526imm; Wed, 23 May 2018 01:26:06 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrQYjF2Mzz18u5niFvYtdevtJklcEeZ3dVpIUdWuqHcmgNo21uJoJu/YBMfCyCgDt1WyVgQ X-Received: by 2002:a17:902:bb07:: with SMTP id l7-v6mr2020619pls.128.1527063966711; Wed, 23 May 2018 01:26:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527063966; cv=none; d=google.com; s=arc-20160816; b=MoTDqx0pEvYD42HYgEnPOfVrtdsi1+2cWZlYswn9vH06LrWjg3uo6W4eZberJChapg AK0LQGlEiO9TPSl4pxWXhoRZ0+0yHF5q3H+LnOq5fz4X4+ykxFz+uQxv+4edFcWOTpq0 gKCSe0sapFyQcGozri/RMvEESZV0tjc1nWFgO1EG8bS4teIMMGry2iWZEt9N3jGsog9z DBxhviZF+HQoiwgSiLLsA1pJ4YRF/QiYY/YQTNaxWeEp5YOFBcls9s2GaIuK5isIcEvf 7hN8KGyx0eUlGVpno3NiVO6azSPXYJP5v7LsAtWp7eZ2KIpnDH9O1taABNYMkbo7ezQW c83Q== 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 :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=uCExT8BsD5Rl9zAAx+2iYpGbzOSl3TOgOjMgAcfWpjY=; b=fxPOKh+EkJuA9UfuzlT/IcyiBafjV0KzuPQgVbHbunzQ1IA6STs7CUxE4p+ljia/Eb /SSYyN/XFPE9+LqjksXiRMLK4wgXZHECMSHoElv+8JWIzAP4+llC3Vqijq7r8xEv4eor iTWkhMHV7XRjByDbXYa2QSI6BQ2wG+fe99A/ibhYP/zkdn/lRaUyQYvnCHr1kceCROi3 OhCkBrJqLM53lsiNc5EXImfvd66OeZdqly33KXKrd6jbxRTvD2OK94jLzYI8b5FX3OUk fWNpFFrb6p723c0SEFEP7dJXy80mpOHDQRQgFe3vA4ph1wPeVkPhwX/JJ7UyIIx3vf5S hioA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=IrQOPvR7; 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=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r134-v6si14394683pgr.491.2018.05.23.01.25.51; Wed, 23 May 2018 01:26:06 -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; dkim=fail header.i=@gmail.com header.s=20161025 header.b=IrQOPvR7; 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=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932135AbeEWIX7 (ORCPT + 99 others); Wed, 23 May 2018 04:23:59 -0400 Received: from mail-oi0-f68.google.com ([209.85.218.68]:41205 "EHLO mail-oi0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932117AbeEWIX5 (ORCPT ); Wed, 23 May 2018 04:23:57 -0400 Received: by mail-oi0-f68.google.com with SMTP id 11-v6so18730459ois.8; Wed, 23 May 2018 01:23:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=uCExT8BsD5Rl9zAAx+2iYpGbzOSl3TOgOjMgAcfWpjY=; b=IrQOPvR70taTzZJTo7bjGpoQgXFWelCxOX8rTko4ooEBMYsccFy6/odsqi2lyn/C2E a7RQ/R09Pful+77PD8gBC70T/StbpyATvJ5OSKkcALsssqwxZq3GaeoAwgcbv3bJsx85 kxGxyjwflcjaNWhzioOCLghHvhRbxDKs5Xizot3KzasnrV8Ma+GDW5gJVH2DQI7YDqKk eVmnnF8zh6sgk6XQL9+cIzwSHuJHx8AQ6Ap5suWl8iXhfVMxn4egO9e1UNOBipkn+s7h +ZssbhuepcZ0fgtsOUTIAqFpOf6OM1ll0Qzgn90yi9Fvua0oY02G8m2hrZZNP90Y5GjL Xn5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=uCExT8BsD5Rl9zAAx+2iYpGbzOSl3TOgOjMgAcfWpjY=; b=X1qNJC2/fnU7cufRML0nFTIAjITukD1y0j2W99BWpkQzHhTiDIuZiqYnGy+M4jsfJT LOB7nG38BBbk9wubOGFpuk6ZHI8JifnNlrZ40n10FzLarS24/rWvJubD5ftwoImoc6Qn ju95cwJwXHyueLZzaqKSTmuUgbCjkS3Ar9S+u0wtT0fMtwRMNF8MJbqhNmgL0Jr5ZlSL j/ab4AluSBcsgWQ0NgSYhLGjKQmXQDL1p+gMStFrfj28g7f8Zt4Gt6UiFuUoY5u9tUjT GGo4iLelT13v7GAJUz9uged8z+zpQnCGgRKYrCgdw8dbh3NRZdkLkeXCvLgukSkyT9V/ migQ== X-Gm-Message-State: ALKqPwdLH8UKCU1Q0kMA0mMb/IHrhGwOGhpmuzThGwIebElL8WzsO2hQ 6AUXNk1F/0jvLexsLrH9NoFGDLBH1S4IA4UXluc= X-Received: by 2002:aca:1107:: with SMTP id 7-v6mr518718oir.116.1527063836947; Wed, 23 May 2018 01:23:56 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a9d:1468:0:0:0:0:0 with HTTP; Wed, 23 May 2018 01:23:56 -0700 (PDT) In-Reply-To: <20180522235028.80564-1-joel@joelfernandes.org> References: <20180522235028.80564-1-joel@joelfernandes.org> From: "Rafael J. Wysocki" Date: Wed, 23 May 2018 10:23:56 +0200 X-Google-Sender-Auth: AQL0W9ghiQitNYBYvbivT5T6Mok Message-ID: Subject: Re: [PATCH RFC] schedutil: Address the r/w ordering race in kthread To: "Joel Fernandes (Google)" Cc: Linux Kernel Mailing List , "Joel Fernandes (Google)" , "Rafael J . Wysocki" , Peter Zijlstra , Ingo Molnar , Patrick Bellasi , Juri Lelli , Luca Abeni , Todd Kjos , Claudio Scordino , kernel-team@android.com, Linux PM 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 Wed, May 23, 2018 at 1:50 AM, Joel Fernandes (Google) wrote: > Currently there is a race in schedutil code for slow-switch single-CPU > systems. Fix it by enforcing ordering the write to work_in_progress to > happen before the read of next_freq. > > Kthread Sched update > > sugov_work() sugov_update_single() > > lock(); > // The CPU is free to rearrange below > // two in any order, so it may clear > // the flag first and then read next > // freq. Lets assume it does. > work_in_progress = false > > if (work_in_progress) > return; > > sg_policy->next_freq = 0; > freq = sg_policy->next_freq; > sg_policy->next_freq = real-freq; > unlock(); > > Reported-by: Viresh Kumar > CC: Rafael J. Wysocki > CC: Peter Zijlstra > CC: Ingo Molnar > CC: Patrick Bellasi > CC: Juri Lelli > Cc: Luca Abeni > CC: Todd Kjos > CC: claudio@evidence.eu.com > CC: kernel-team@android.com > CC: linux-pm@vger.kernel.org > Signed-off-by: Joel Fernandes (Google) > --- > I split this into separate patch, because this race can also happen in > mainline. > > kernel/sched/cpufreq_schedutil.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c > index 5c482ec38610..ce7749da7a44 100644 > --- a/kernel/sched/cpufreq_schedutil.c > +++ b/kernel/sched/cpufreq_schedutil.c > @@ -401,6 +401,13 @@ static void sugov_work(struct kthread_work *work) > */ > raw_spin_lock_irqsave(&sg_policy->update_lock, flags); > freq = sg_policy->next_freq; > + > + /* > + * sugov_update_single can access work_in_progress without update_lock, > + * make sure next_freq is read before work_in_progress is set. > + */ > + smp_mb(); > + This requires a corresponding barrier somewhere else. > sg_policy->work_in_progress = false; > raw_spin_unlock_irqrestore(&sg_policy->update_lock, flags); > > -- Also, as I said I actually would prefer to use the spinlock in the one-CPU case when the kthread is used. I'll have a patch for that shortly.