Received: by 2002:ac0:8845:0:0:0:0:0 with SMTP id g63csp487886img; Tue, 26 Feb 2019 03:40:34 -0800 (PST) X-Google-Smtp-Source: AHgI3IZ3Ovz7q2moVnDOJ6Vm8txc3K3uGbaFaRVbUzmn+bYdtDjCevLR99qW3JfobSfVvw9B312e X-Received: by 2002:a17:902:6b47:: with SMTP id g7mr26349685plt.100.1551181233999; Tue, 26 Feb 2019 03:40:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551181233; cv=none; d=google.com; s=arc-20160816; b=1LfRIuYnwUNifoSY4SMPOihpUmtn0pVYgNWltqZ44lbqUH4JaqmUzYgkfEJb4yBrR3 9lUWIhc6Nxj1YowC6IwinrCcsUIDNAya2LmbZwDFTjrkXaT7+MPHNXonxiLrF1pmCcBO G1URrODdcjBBDprODSXvjU4XDE46eNvFbP2kzsq801lSV511D6V/QWuvNmflvfY/flNl N9G+IlgmlqfWcSYRN6k6RV4Qz7C9DKziXUgp+V3y7dfsbRe1ZmwPEAeUmuUXSjLeeg/f NE2R1ZcI1AiQpTPUa5jnTuaUVkyqrRGI0Qyr61Zvi3ONwUgzj4V+kpSO15QvdM0nomcy ulcw== 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; bh=cjAUIabje7hWNQ7BhzoBdb5WtvlE7b9NBhQ729PYl2U=; b=HmCYRtqb1SWHxI+X+ZH2+yx/BqCguQ+i/maLDzQenbETAQMDfNt2nmGXRIFQZcIP32 lmBwPMkQCTctDr7lWlTgx+XLxxSWLd/+OxnNu7I7a4D6mxQew0dqsPZcTMAeGcCs7dON 5S74NB6Y7KiYJ73bwNLpYC5q2R9H21kx3pl28dNyXZqkCafDATHjhhQ4u/nOnnnGgciD yo3mZJRq8fWfD4c4dfqF2DgK79S3iGY267VLxm0tKEFsY+CM9NbOp7CpS+1CM/6yFfEu At8a/DFw/W4M2jfURMdutURgG4nqBda8k/S2bUoPX8ObiuKxMfyzFMm57y1cURvzAtRM Ao1g== 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 b38si8747219plb.249.2019.02.26.03.40.19; Tue, 26 Feb 2019 03:40:33 -0800 (PST) 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 S1726576AbfBZLia (ORCPT + 99 others); Tue, 26 Feb 2019 06:38:30 -0500 Received: from Galois.linutronix.de ([146.0.238.70]:44234 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726004AbfBZLia (ORCPT ); Tue, 26 Feb 2019 06:38:30 -0500 Received: from bigeasy by Galois.linutronix.de with local (Exim 4.80) (envelope-from ) id 1gyb45-0005V6-Rt; Tue, 26 Feb 2019 12:38:25 +0100 Date: Tue, 26 Feb 2019 12:38:25 +0100 From: Sebastian Andrzej Siewior To: Mike Galbraith Cc: linux-rt-users@vger.kernel.org, linux-kernel@vger.kernel.org, Thomas Gleixner , Steven Rostedt , Peter Zijlstra Subject: Re: [PATCH RT 4/2] hrtimer: Don't lose state in cpu_chill() Message-ID: <20190226113825.cusw372nwlbju4hh@linutronix.de> References: <20190218163107.iwdpngwmbs6xyk7x@linutronix.de> <20190218163137.cmor4ek3odus5m6j@linutronix.de> <20190219160755.fn4c65ph4lzqflw2@linutronix.de> <20190219160842.qxpwicoa5tzq4njo@linutronix.de> <1551105815.6234.14.camel@gmx.de> <20190225163440.ptw2ohijokhumn7i@linutronix.de> <1551116436.5281.5.camel@gmx.de> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <1551116436.5281.5.camel@gmx.de> User-Agent: NeoMutt/20180716 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2019-02-25 18:40:36 [+0100], Mike Galbraith wrote: > Ah. Yup, box says you're right. Thank you. Added: Subject: [PATCH] hrtimer: cpu_chill(): save task state in ->saved_state() In the previous change I saved the current task state on stack. This was bad because while the task is scheduled-out it might receive a wake-up. The wake up changes the task state and we must not destroy it. Save the task-state in ->saved_state under a PI-lock to unsure that state changes during are not missed while the task temporary scheduled out. Reported-by: Mike Galbraith Tested-by: Mike Galbraith Signed-off-by: Sebastian Andrzej Siewior --- kernel/time/hrtimer.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index 6f2736ec4b8ef..e1040b80362c9 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -1900,20 +1900,28 @@ COMPAT_SYSCALL_DEFINE2(nanosleep, struct compat_timespec __user *, rqtp, */ void cpu_chill(void) { - ktime_t chill_time; unsigned int freeze_flag = current->flags & PF_NOFREEZE; - long saved_state; + struct task_struct *self = current; + ktime_t chill_time; - saved_state = current->state; - chill_time = ktime_set(0, NSEC_PER_MSEC); + raw_spin_lock_irq(&self->pi_lock); + self->saved_state = self->state; __set_current_state_no_track(TASK_UNINTERRUPTIBLE); + raw_spin_unlock_irq(&self->pi_lock); + + chill_time = ktime_set(0, NSEC_PER_MSEC); + current->flags |= PF_NOFREEZE; sleeping_lock_inc(); schedule_hrtimeout(&chill_time, HRTIMER_MODE_REL_HARD); sleeping_lock_dec(); if (!freeze_flag) current->flags &= ~PF_NOFREEZE; - __set_current_state_no_track(saved_state); + + raw_spin_lock_irq(&self->pi_lock); + __set_current_state_no_track(self->saved_state); + self->saved_state = TASK_RUNNING; + raw_spin_unlock_irq(&self->pi_lock); } EXPORT_SYMBOL(cpu_chill); #endif -- 2.20.1 Sebastian