Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp8118752imu; Tue, 4 Dec 2018 03:19:26 -0800 (PST) X-Google-Smtp-Source: AFSGD/XDFgCc3HjMXLJSiIMbp/Db9J27CwqknlGOYoBWOa69nPCtqFB7TqlNm1fCCzf+PNwjEv+b X-Received: by 2002:a17:902:7581:: with SMTP id j1mr19799812pll.308.1543922366230; Tue, 04 Dec 2018 03:19:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543922366; cv=none; d=google.com; s=arc-20160816; b=h+TZrKixOVxMcpuyPWdcwyYgf2pKqE15iit3DovmHF9zGyMWZyLjAqq+SyQ807YdC7 HkEB7+bcEi0fi9wKoGpRGmIc4Rahj5M/C6YWVDCp6Tb8KIXqBK87VxE8hEKT+Fq0vD7R QS5qNuyD7fvOZEnQhFIc6z2PJVDbwCWmCi6D7Q23gz5JULFlQbcBqq0weJMyvygIV7n6 WGbbE83khIbUH40pzLnSloAue7a7fvHaEy25/u3hGKp3j4P4K0Us5Xs7k7nSwwQBaLKT EDJvmJNdTtDkozf+S/+5EYZaKKlAUTDRavIJINaRWJRojnAGySRcaSZXfb6aacIajfv5 ZkuA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=y0PHl2o2WaLMhVszfxPNPm41TWtgvViyw71Enwtm34s=; b=sfuESxuqtzrww+W/3s/LBXFFmJP/+74uhQ78v75GsUd3IvVrtNzmyFyD1xr+z/2Sso SA/8Gxaimm28TBcpV0lblGDMdOYzr+K+xIk8Y4Ez4oK8gXjIBaxNmsSjM9i6UMqwctoj h/D5DAF2hU8gNoj6JbpFQ8egRW5Tfr9sE6Tv3XsvLzjf/4vwGnT0zXVUeg6PQdek2dBE 4xbnwRjxwfZrrpnHlPJMJSUiT5lKwWRGIaM9Kj83gIKZnTQ3n/oWROE5PlQDZ9EHH/Rv UeZSN2HDpCtRTiJmVs3D1Mo1NKttfSz2tQCb8reDvtc6n7yUuJpDsODwHV/66EQZXkTq sWHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=fg6iYCYG; 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 c3si16537259plr.178.2018.12.04.03.19.11; Tue, 04 Dec 2018 03:19:26 -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; dkim=pass header.i=@kernel.org header.s=default header.b=fg6iYCYG; 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 S1727978AbeLDLRb (ORCPT + 99 others); Tue, 4 Dec 2018 06:17:31 -0500 Received: from mail.kernel.org ([198.145.29.99]:53072 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728110AbeLDLFV (ORCPT ); Tue, 4 Dec 2018 06:05:21 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4D0FE2146D; Tue, 4 Dec 2018 11:05:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543921520; bh=SaoXWiAPKn7EKf9vrOfOU8YcDNExd1aBr6YpghV3aBA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fg6iYCYGYGMGQSl6wBiYvYvaboY43YxteqtP0EHaHYzyDjYGxsXP3v/OKvbhVqwOE ItNQ4M8EJhX77thl60zCCiS+wZMJfr/YlcTlgaSagbYC8bHQo0yGk2uV05G7eJ+d7x sjlgtcKUOeK1fxYkv6ObBywIZuSzAbRphZnFVCmw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Tejun Heo , "Peter Zijlstra (Intel)" , Linus Torvalds , Thomas Gleixner , Ingo Molnar Subject: [PATCH 4.14 068/146] sched/core: Fix cpu.max vs. cpuhotplug deadlock Date: Tue, 4 Dec 2018 11:49:14 +0100 Message-Id: <20181204103729.576480739@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181204103726.750894136@linuxfoundation.org> References: <20181204103726.750894136@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Peter Zijlstra peterz@infradead.org commit ce48c146495a1a50e48cdbfbfaba3e708be7c07c upstream Tejun reported the following cpu-hotplug lock (percpu-rwsem) read recursion: tg_set_cfs_bandwidth() get_online_cpus() cpus_read_lock() cfs_bandwidth_usage_inc() static_key_slow_inc() cpus_read_lock() Reported-by: Tejun Heo Tested-by: Tejun Heo Signed-off-by: Peter Zijlstra (Intel) Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Thomas Gleixner Link: http://lkml.kernel.org/r/20180122215328.GP3397@worktop Signed-off-by: Ingo Molnar Signed-off-by: Greg Kroah-Hartman --- include/linux/jump_label.h | 7 +++++++ kernel/jump_label.c | 12 +++++++++--- kernel/sched/fair.c | 4 ++-- 3 files changed, 18 insertions(+), 5 deletions(-) --- a/include/linux/jump_label.h +++ b/include/linux/jump_label.h @@ -160,6 +160,8 @@ extern void arch_jump_label_transform_st extern int jump_label_text_reserved(void *start, void *end); extern void static_key_slow_inc(struct static_key *key); extern void static_key_slow_dec(struct static_key *key); +extern void static_key_slow_inc_cpuslocked(struct static_key *key); +extern void static_key_slow_dec_cpuslocked(struct static_key *key); extern void jump_label_apply_nops(struct module *mod); extern int static_key_count(struct static_key *key); extern void static_key_enable(struct static_key *key); @@ -222,6 +224,9 @@ static inline void static_key_slow_dec(s atomic_dec(&key->enabled); } +#define static_key_slow_inc_cpuslocked(key) static_key_slow_inc(key) +#define static_key_slow_dec_cpuslocked(key) static_key_slow_dec(key) + static inline int jump_label_text_reserved(void *start, void *end) { return 0; @@ -416,6 +421,8 @@ extern bool ____wrong_branch_error(void) #define static_branch_inc(x) static_key_slow_inc(&(x)->key) #define static_branch_dec(x) static_key_slow_dec(&(x)->key) +#define static_branch_inc_cpuslocked(x) static_key_slow_inc_cpuslocked(&(x)->key) +#define static_branch_dec_cpuslocked(x) static_key_slow_dec_cpuslocked(&(x)->key) /* * Normal usage; boolean enable/disable. --- a/kernel/jump_label.c +++ b/kernel/jump_label.c @@ -79,7 +79,7 @@ int static_key_count(struct static_key * } EXPORT_SYMBOL_GPL(static_key_count); -static void static_key_slow_inc_cpuslocked(struct static_key *key) +void static_key_slow_inc_cpuslocked(struct static_key *key) { int v, v1; @@ -180,7 +180,7 @@ void static_key_disable(struct static_ke } EXPORT_SYMBOL_GPL(static_key_disable); -static void static_key_slow_dec_cpuslocked(struct static_key *key, +static void __static_key_slow_dec_cpuslocked(struct static_key *key, unsigned long rate_limit, struct delayed_work *work) { @@ -211,7 +211,7 @@ static void __static_key_slow_dec(struct struct delayed_work *work) { cpus_read_lock(); - static_key_slow_dec_cpuslocked(key, rate_limit, work); + __static_key_slow_dec_cpuslocked(key, rate_limit, work); cpus_read_unlock(); } @@ -229,6 +229,12 @@ void static_key_slow_dec(struct static_k } EXPORT_SYMBOL_GPL(static_key_slow_dec); +void static_key_slow_dec_cpuslocked(struct static_key *key) +{ + STATIC_KEY_CHECK_USE(); + __static_key_slow_dec_cpuslocked(key, 0, NULL); +} + void static_key_slow_dec_deferred(struct static_key_deferred *key) { STATIC_KEY_CHECK_USE(); --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4040,12 +4040,12 @@ static inline bool cfs_bandwidth_used(vo void cfs_bandwidth_usage_inc(void) { - static_key_slow_inc(&__cfs_bandwidth_used); + static_key_slow_inc_cpuslocked(&__cfs_bandwidth_used); } void cfs_bandwidth_usage_dec(void) { - static_key_slow_dec(&__cfs_bandwidth_used); + static_key_slow_dec_cpuslocked(&__cfs_bandwidth_used); } #else /* HAVE_JUMP_LABEL */ static bool cfs_bandwidth_used(void)