Received: by 2002:ac0:b08d:0:0:0:0:0 with SMTP id l13csp4541507imc; Mon, 25 Feb 2019 06:46:28 -0800 (PST) X-Google-Smtp-Source: AHgI3IY4nEDu0BdwiY0sBPFXK1YY68opRMk5TdC/TOL2AQIK/xeHDRfNjLrLpuIqcBls5J24fRgG X-Received: by 2002:a17:902:1022:: with SMTP id b31mr20693708pla.141.1551105988213; Mon, 25 Feb 2019 06:46:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551105988; cv=none; d=google.com; s=arc-20160816; b=I+voODqgWHk4ia2SCHXN2f6sAKkdXq82g7EM60x/59nRuGy27Z/anXeQefWsq35NGO HzYXknsZsK0EHBivYvKjncaaxZGqtj8mCQSDVvyHfbLx05NIoyFdqidiE875838iAA3X KcODGH8i5l5kWeYmnI4xYNTfHJn96946CDY8N4J3MJL5+m76j4UkrFaDCYYYZ2yuKH07 qs91N3U5krLpIdwPSnHNmrpQ2kATZCEKmMh9j/OKYuVRB+8JHqy9OtFj3YL0tm6QDGn5 izOUr22d4J61j04Uab3QwvgT4MYu92HWBDTWpctAoGttoys0Ztxj6CreGwQfXX8e6tNZ +j9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:date:cc:to:from:subject:message-id; bh=GqDzpiM6jZg6Pb95q2S9tgj1ovBps5AYYvzgbkvkII4=; b=FgpbrA/FdhKJTD74VjGVckdsi81x0IuL7B9QHdvlB5UdLqLV2eYAdrux7N0GuM17OO UL6RYksKwBKuw6wUJfv26utRq7f7eN7A2I8y/isMx8tsl0NP1JXrxLIaM9ARMKNdlHUw R2dzVT694Kzf2CnB9gpTT36Ipk1yOGmBPgI6fPKFpbErOG/A5ibWtZCjGFoAXL2+Z5wE Aba3qGW6e1qUwES7BuZHaVxCeWBWQdBnfHioaiYzu3gDGkVu3dCfyS4ublWEWUtIHPm6 W0XdTY/OMkddYXRY4gJy+mNb0s6KmfOJXqqrKoOq7sSwnisLwibwpkJ472Kgi6nWvhbj MEqQ== 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 a90si9688155plc.314.2019.02.25.06.46.13; Mon, 25 Feb 2019 06:46:28 -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 S1727554AbfBYOoS (ORCPT + 99 others); Mon, 25 Feb 2019 09:44:18 -0500 Received: from mout.gmx.net ([212.227.17.21]:45523 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726313AbfBYOoR (ORCPT ); Mon, 25 Feb 2019 09:44:17 -0500 Received: from homer.simpson.net ([185.221.150.179]) by mail.gmx.com (mrgmx103 [212.227.17.168]) with ESMTPSA (Nemesis) id 0LsTjw-1h922b1zzs-011wZj; Mon, 25 Feb 2019 15:43:37 +0100 Message-ID: <1551105815.6234.14.camel@gmx.de> Subject: Re: [PATCH RT 4/2] hrtimer: Don't lose state in cpu_chill() From: Mike Galbraith To: Sebastian Andrzej Siewior , linux-rt-users@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Thomas Gleixner , Steven Rostedt , Peter Zijlstra Date: Mon, 25 Feb 2019 15:43:35 +0100 In-Reply-To: <20190219160842.qxpwicoa5tzq4njo@linutronix.de> References: <20190218163107.iwdpngwmbs6xyk7x@linutronix.de> <20190218163137.cmor4ek3odus5m6j@linutronix.de> <20190219160755.fn4c65ph4lzqflw2@linutronix.de> <20190219160842.qxpwicoa5tzq4njo@linutronix.de> Content-Type: text/plain; charset="ISO-8859-15" X-Mailer: Evolution 3.26.6 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:FEX4K+lV5wynRytXPi1uu3MonnmPc7aqD+2jJXT/JqCphagJh0z ZNNk3Dw+ijcARCTADJKv/KSclqk0fQhsNxrDS110tmrkE0PUNqRKyP5BDfu+gex6kAsYkcF OkDA9bNMb6TtmCa6mD4ZVNRYKU7eaoi6XfXLl62X8f014BGx9GZZiCu4u7q6UDLwpdQn18L ZZGznjPywXTz1wbVTlc/A== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:PgQeBH52AoQ=:Squf32igUsUBXp33qqcMbB KOt9M1rnQmBlTgnwuwGIeV16CoTV6aAbbC5/3yBue2Y330DzYPv2v4Vq3N8HVY1/FEFmIbTLD KOv1ihxWb4i3kXtUnT9z+2ODHOJJclOUnSVeXL+cYWjKt9wLA7dT80VUSkUUtSdcx5GQMgWdG i3s8m9txKb0FV+6ovoxPVq2TMNfl0rkgVMwTYwL04lE+Qd7PHc20C6I4jH9D+5lEIbNhwtqbn IBQsC335n0jY8r6cdINFqzTm5r+D6QExuo4i418u+UdtyCijZ2bfIySQfcH9D/RXXm7hyjFw1 K5KTtTZkvwnpsWEsehJoWfF3PSTrwIe8fkjuw4ZBqFuL17amkWCazQbFT4+Zz4Dp0oFxzXpAQ S9fKcGX8tdhy+LUIu5BZ8eqf8NW3OyQZDPhfLSNpEyLPMK9/QpJK5W6CrqwbZB9UvbVLKb8R0 hq1ZfyPR9xfjVkAuW2XvwsUgvXrMLjXckPRvDeMR2IqL5FF9M4TyxbRhAm2NxI2pTPgu8bZg+ w+vJd0ysdUiods7byU/fIpoBSAygVSWgmwegzkUhoa/b3zk12+OFOzy559C+8SEFyi0W1rxb4 fOE9Q+QsCMheSETMIsjcdgr42R9oyg+SULy8ot+cfYoKy53b6Q2cx9j7Yv7SvHHByMh8KF4md v9TCT64UdVrUaAPlUwz3ZNIp35HKbl4mSWkEXMeziSLSxK5RonR/wsn8lmUiyjBR2oFEoYxHT 0MH3NLDxW5YgzeYlsD1T3+dnSpaOAmxgw701k0ty6MRMKXSUhfgCDmOcx+7kV88ZbE2YFylak xYdBJTixIFg50TtHWC8Gqze7r4VXgjQytRuGaSyZ67ogIqCw+JXBuXX3cHCo7EtlA8vA90Yj+ 0RkaPzgd9r5iu1fAH9mOvSTL2dvzMGH4IVT/8ABl6dBpaj5FUQu3CeBYguZegF Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Sebastian, My box claims that this patch is busted. It argues its case by IO deadlocking any kernel this patch is applied to when spinning rust is flogged, including virgin 4.19-rt14, said kernel becoming stable again when I whack the accused. On Tue, 2019-02-19 at 17:08 +0100, Sebastian Andrzej Siewior wrote: > In cpu_chill() the state is set to TASK_UNINTERRUPTIBLE and a timer is > programmed. On return the state is always TASK_RUNNING which means we > lose the state if it was something other than RUNNING. Also > set_current_state() sets ->task_state_change to within cpu_chill() which > is not expected. > > Save the task state on entry and restore it on return. Simply set the > state in order to avoid updating ->task_state_change. > > Cc: stable-rt@vger.kernel.org > Signed-off-by: Sebastian Andrzej Siewior > --- > kernel/time/hrtimer.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c > index 851b2134e77f4..6f2736ec4b8ef 100644 > --- a/kernel/time/hrtimer.c > +++ b/kernel/time/hrtimer.c > @@ -1902,15 +1902,18 @@ void cpu_chill(void) > { > ktime_t chill_time; > unsigned int freeze_flag = current->flags & PF_NOFREEZE; > + long saved_state; > > + saved_state = current->state; > chill_time = ktime_set(0, NSEC_PER_MSEC); > - set_current_state(TASK_UNINTERRUPTIBLE); > + __set_current_state_no_track(TASK_UNINTERRUPTIBLE); > 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); > } > EXPORT_SYMBOL(cpu_chill); > #endif