Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp2016585ybh; Fri, 24 Jul 2020 02:13:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzclxqEYuJ6V1PSCYi7fpnx1l4vm/mC6MiS8t94eC2I0DOu+DqgLd7AGZ2r0dZ0l6s17Wms X-Received: by 2002:a17:906:d78f:: with SMTP id pj15mr8632272ejb.283.1595582011819; Fri, 24 Jul 2020 02:13:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595582011; cv=none; d=google.com; s=arc-20160816; b=uS5AHdhRbVq/wluMzUTYf9zHOEabqUnD4vMv2QcPJJf6DwMUQkHJQQi4IpHuXQX5Qi f8O+eRp22Z6h4P2fpqgcx5rq3N++ZkmFuXjQ14iueNxhT/tPZYilFDwZUCjWKG1dVeUd Xr7p3QE/fQTC1TcfY4lCM8WITYuHPgdrvzFT381QrJNOwDTTf3BtRat9fDdH25ZapEWG sN84PXodo7Odl13OPMNWC0NxcYNtk6elUwrhfmUAp0MEkWIQn9Wn2kdSrIctyiO3veqc W+bzcFIM/62gadJ9ZLaQasKlKnN1rOEV1F2WfK+h+VK82QZfESANggie8BiKKQfk9bZg OVYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=LA2le4RbbpTcfXb2KkOId+3V/JxOvXwhrnbrA+H+QzQ=; b=O2XRLp8gAepM9T9anCWmXEAEGHbeAFiuOgdob5eAiPKGVtPFjHHiYm/sDICrXOdH6P C3Vkimm5iXrEe4ebC0hw7OeuTtyICuouSQ7u5araLpsqFh8i5AdgFJrY2zjrJDHfTyKn uK1Xbv/Llj0WQto66d9nRGb4kOriBAlU5CGSEMhCdgiVGtLW5urfEo5J5ImdgtH7MqHG Pn35ofTvaTS2ChUldh5L2IPvJMwZvrRdQB6AeYWtayLyiK26WKnYFgKisHyGCGVE2AtN PwGBWfBF9EkLdn1EWTqdQSPX6kj9b1puTXBaE3RiHdr7o0Osrf4W7oQF+CU9zuJoUvIQ xhvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=merlin.20170209 header.b=qlpbg4mt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v20si213375eja.474.2020.07.24.02.13.09; Fri, 24 Jul 2020 02:13:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@infradead.org header.s=merlin.20170209 header.b=qlpbg4mt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726945AbgGXJM6 (ORCPT + 99 others); Fri, 24 Jul 2020 05:12:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54012 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726572AbgGXJM5 (ORCPT ); Fri, 24 Jul 2020 05:12:57 -0400 Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 96DC0C0619D3 for ; Fri, 24 Jul 2020 02:12:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=merlin.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=LA2le4RbbpTcfXb2KkOId+3V/JxOvXwhrnbrA+H+QzQ=; b=qlpbg4mtS95i3Bn9W84++t7PF9 3H5X8Pc5LC7q7UpGpslr2u05AmeXWew8lUsPFXVOz9pnTJwtlhtHJruFc+hkvRoIkUtV0q/XAG+Ez a/u3BZkfF9W2MVN+cCN3gz14RGUv7IhZ7474rgOJNG+/4ughpwSlfBKAYR2QOV/Rv9Z2E7hGQg0kw JKmQiJUtLoEXdO1js/hqqOrxRMV3Z+TCpIMQ1aF3kZn4NOaXGIJm4fO7BojDsyZ5Sv6gb8PtcnZ9E Abdxyt4X95aekJzTNQQQxHVnhsqgG0s0ZsOZMAmWn5X+d0p/9GVyem2rufcMIJvKlEYu103urexO7 Gm0Fkg8Q==; Received: from j217100.upc-j.chello.nl ([24.132.217.100] helo=noisy.programming.kicks-ass.net) by merlin.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1jytl0-0007PZ-0c; Fri, 24 Jul 2020 09:12:46 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id 76BAF301A7A; Fri, 24 Jul 2020 11:12:44 +0200 (CEST) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 1000) id 3D136236FC58B; Fri, 24 Jul 2020 11:12:44 +0200 (CEST) Date: Fri, 24 Jul 2020 11:12:44 +0200 From: Peter Zijlstra To: Qais Yousef Cc: Ingo Molnar , Doug Anderson , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Patrick Bellasi , Chris Redpath , Lukasz Luba , linux-kernel@vger.kernel.org Subject: Re: [PATCH v7 3/3] sched/uclamp: Fix a deadlock when enabling uclamp static key Message-ID: <20200724091244.GX10769@hirez.programming.kicks-ass.net> References: <20200716110347.19553-1-qais.yousef@arm.com> <20200716110347.19553-4-qais.yousef@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200716110347.19553-4-qais.yousef@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jul 16, 2020 at 12:03:47PM +0100, Qais Yousef wrote: I've trimmed the Changelog to read like: --- Subject: sched/uclamp: Fix a deadlock when enabling uclamp static key From: Qais Yousef Date: Thu, 16 Jul 2020 12:03:47 +0100 From: Qais Yousef The following splat was caught when setting uclamp value of a task: BUG: sleeping function called from invalid context at ./include/linux/percpu-rwsem.h:49 cpus_read_lock+0x68/0x130 static_key_enable+0x1c/0x38 __sched_setscheduler+0x900/0xad8 Fix by ensuring we enable the key outside of the critical section in __sched_setscheduler() Fixes: 46609ce22703 ("sched/uclamp: Protect uclamp fast path code with static key") Signed-off-by: Qais Yousef Signed-off-by: Peter Zijlstra (Intel) Link: https://lkml.kernel.org/r/20200716110347.19553-4-qais.yousef@arm.com --- And placed this patch first in the series That said; don't we have a slight problem with enabling the key late like this? It means the uclamp will not actually take effect immediately and we'll have to wait for the next context switch ... whenever that might be. Should we not have enabled the key early, instead of late? something like so perhaps? --- diff --git a/kernel/sched/core.c b/kernel/sched/core.c index a2a244af9a53..c6499b2696f5 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1282,8 +1282,6 @@ static void __setscheduler_uclamp(struct task_struct *p, if (likely(!(attr->sched_flags & SCHED_FLAG_UTIL_CLAMP))) return; - static_branch_enable(&sched_uclamp_used); - if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP_MIN) { uclamp_se_set(&p->uclamp_req[UCLAMP_MIN], attr->sched_util_min, true); @@ -5074,6 +5072,7 @@ static int __sched_setscheduler(struct task_struct *p, retval = uclamp_validate(p, attr); if (retval) return retval; + static_branch_enable(&sched_uclamp_used); } if (pi)