Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp479881imm; Tue, 22 May 2018 23:48:22 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqcy6n3lQYpgtD3+hc9OBlGA+84+pPf+osxWvryWNHQoSRlXJZKVkFEhkNnkEXagiAWA7Ze X-Received: by 2002:a62:89db:: with SMTP id n88-v6mr1629577pfk.11.1527058102402; Tue, 22 May 2018 23:48:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527058102; cv=none; d=google.com; s=arc-20160816; b=K2h0ng40CZl5eQlnYqp+JMVjN95b+cO9xeLNN3Rki7puMAMrZtOtRTL0JEVzSELrLS f/+15IUVeSiPsKX6ODlQg6WyCTF8RxNj/QFwNcLtnEn6XtW9+Jz5v/JdZYpwK4MwaOSp znhS+FWLJx6D+WySp2A9WPJ7+NQo4GKF8ygjTfRqbwgi7MjlwwvV8KGh/p3zZlZwfsCo DGW30dVZFSC/NueY+LWDUu7+pdKKaaDrMIgf6cQMr6xTaPO/QKKhjxlsjYcg/FWK3JkY WG7Cbm0lQiAveakHlhrQ1P2w8y/tFsr3BEPOmsA04MUl++c0/NAD9pU7woyIedFVATHe 2HXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=L1JAH1xXmlraT3L5+MV4v/+hiGDijI414+KYmyB7UM8=; b=tGyJcT/m10+5ayKqElKsFMaK08m3ZOz1tbll5K/0sErrxrahjDR2U9Z7Xr5Xy8MV53 9l9UKBK7fa7YjJMU3F6tAQkCiCpG2WwiIXPGkSc1XslfLJ9RvlhWhSX1urFZ5P3Zs4zN m4q6xKb+jg+iU3SkdJmlaDfkP23WG710fTn9aivcALwKXuIolJr7/AHVTafYj+MilZCL PNyF61r07xGr0RPeSXMSUiv0x3PqyuSjPBv6NEjHydPSJjKuTUOh+f/1RGmwMd82cWQz dTtQL/8BHIkH4lSuD8AHA/jWTfUoIMdtP6R3fF1Zagz2/xUwjsHgCVVH1CbgijvJ2RTW NWvA== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v66-v6si14369708pgv.344.2018.05.22.23.48.08; Tue, 22 May 2018 23:48:22 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754293AbeEWGrw (ORCPT + 99 others); Wed, 23 May 2018 02:47:52 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:54400 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754241AbeEWGrt (ORCPT ); Wed, 23 May 2018 02:47:49 -0400 Received: by mail-wm0-f65.google.com with SMTP id f6-v6so5814414wmc.4 for ; Tue, 22 May 2018 23:47:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=L1JAH1xXmlraT3L5+MV4v/+hiGDijI414+KYmyB7UM8=; b=FDKdJge5INN0MeAjmHiwwQDd4AUe7sNIh7JclXWfyhTrvS+0hlBT1jtsilMnhagMwk NXs/zUUXABjK6dJXtUo1HHjy2V3MI8XhXr6RwheOe58ALatjHlZp/tjPskRa9mFk6FiO r5rWx5qgFQYsUA6D7162RoRT+zDXF/CmPwe4dtQvDTW2jmT3hmGsxaQlVW3BjS3u9Vrm MJpBbbpncZCGR4HwdWusXBH4WOsEdAjrRnmmWzIaTL/PAyULRB85FQOjtBZ6Kr4dYXYK u0FW6Stbzz7Tr9n/NPT7dn4e5Jvx1pbiC/sOzvUUAC5MyT79Z1wdFEHQkbeTbzBxWI9D j6cw== X-Gm-Message-State: ALKqPwfPvWTb6nRAdUAurlrE+hkv/yY4xxcWuJBASqV8Gojpxj+1i9Kj I+rK3mEVmZ3+f2j7ifTiLbkSWA== X-Received: by 2002:a1c:6503:: with SMTP id z3-v6mr2932758wmb.11.1527058068161; Tue, 22 May 2018 23:47:48 -0700 (PDT) Received: from localhost.localdomain ([151.15.207.242]) by smtp.gmail.com with ESMTPSA id o16-v6sm635685wri.67.2018.05.22.23.47.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 22 May 2018 23:47:47 -0700 (PDT) Date: Wed, 23 May 2018 08:47:45 +0200 From: Juri Lelli To: "Joel Fernandes (Google)" Cc: linux-kernel@vger.kernel.org, "Joel Fernandes (Google)" , "Rafael J . Wysocki" , Peter Zijlstra , Ingo Molnar , Patrick Bellasi , Luca Abeni , Todd Kjos , claudio@evidence.eu.com, kernel-team@android.com, linux-pm@vger.kernel.org Subject: Re: [PATCH RFC] schedutil: Address the r/w ordering race in kthread Message-ID: <20180523064745.GA30909@localhost.localdomain> References: <20180522235028.80564-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180522235028.80564-1-joel@joelfernandes.org> User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Joel, On 22/05/18 16:50, 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. s/set/reset/ > + */ > + smp_mb(); > + Also, doesn't this need a corresponding barrier (I guess in sugov_should_update_freq)? That being a wmb and this a rmb? Best, - Juri