Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp1374769rwb; Fri, 23 Sep 2022 11:43:10 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6lI+hn8tZV+bdxzCkS/DcURegV3Y6BTvZUBZuC3F5oY5S5ZY9ocHvLufENh4/rqgcVkQQ+ X-Received: by 2002:a17:902:e84f:b0:177:82b6:e6e0 with SMTP id t15-20020a170902e84f00b0017782b6e6e0mr9911139plg.43.1663958590327; Fri, 23 Sep 2022 11:43:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663958590; cv=none; d=google.com; s=arc-20160816; b=A6FZvUrYoWQHCJn8L0+KRwE7ppuh/hyIjuBUnyy196Hhd9gxlWZ5i8oDy/ZP9zbaBR 3U7kXOflq9kE3nARDk2iPexKaEbKmxyocy+/B5N+4FxxA1MdBAsfOW7eljQGgBv7bl6A 3sCG6XJBgrq1ceONvmzGSsa3AKrC5zb1Ok6+uAI7lhIecVZSg9LCZWKHHKoE5P/kdytK w/v6RbC4Y6mV53OPdK7LZCxU+rgi7+Tx4gL6y5b3ju4mPjROR8TfsknMdQP8sPNh3oHs RFjRXnAw5AH+ojAKUZ4y208TZWndbjc38CCuHJKc7Ia7UiK5aHzKA3L2m8DtK+NcynyR dQEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:robot-unsubscribe :robot-id:message-id:mime-version:references:in-reply-to:cc:subject :to:reply-to:sender:from:dkim-signature:dkim-signature:date; bh=0Te0qtIdI3W0ICk/OBQHzFhDBkKsDg5PMEOT/JijiAE=; b=UhQj3hkn8iDiduGKq8XZWwHZyYR3YVSRDWht4T9jy6rsaw3AEU+wXMyPU5FjI8tUsF gCqYrayXqxrNEIDx6KImyDOI/ueeBIVvrJXXaCfKgjLnVR0w5LYjgHmevGlPUJd/64kc 8O6QDgzvWATa7lKOgfSooe22ia3MRNwnxdmp+hIjxOT/44i/wX9FKWNRWm4TzlUhHEo8 eL0oph9EtxRZ8sfw4piKWkoFzTsWtPz8HXKVdnGst3nXHw/+o3+2yExrUCaI0JTXINpR xEUC9PWsDoLOBGGwMDY9jpsCv3znIpdKCgV2v7qy8CM4KiwDI300zo3qhKluaYL/ldnm XeFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=20NWmrK9; dkim=neutral (no key) header.i=@linutronix.de header.b=MYJSwlLX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d9-20020a655889000000b0043a6caebacesi9904639pgu.52.2022.09.23.11.42.58; Fri, 23 Sep 2022 11:43:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=20NWmrK9; dkim=neutral (no key) header.i=@linutronix.de header.b=MYJSwlLX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232660AbiIWSDX (ORCPT + 99 others); Fri, 23 Sep 2022 14:03:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232587AbiIWSCh (ORCPT ); Fri, 23 Sep 2022 14:02:37 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C86D513EE95; Fri, 23 Sep 2022 11:01:59 -0700 (PDT) Date: Fri, 23 Sep 2022 18:01:56 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1663956118; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0Te0qtIdI3W0ICk/OBQHzFhDBkKsDg5PMEOT/JijiAE=; b=20NWmrK9mjXqb0JQO9C/mi1uiOiaGT1cEDe3vMNurNJgEwn2X3q+5hC80yE7bcZcx0RxCc s+MdviIyM+eQzNkJOSNCARIYziQW/yQBCj6gi4rkASVNm5BvUUw9gq6JDbpLGXwyzXwGZa n+8cyjx3Dk4ZrdG0NZPCV0tmTab39+wEM90s+O8Z3qwLnfpDbiw4dbjlnl5z8DRbbSlhB5 jriR7eiJJV9q/91QfFP2KxAqoTi/YP9vbBKSAwiHf2EbtVcjtPp5UnyuVlyWDSRgca9rlL 2qqGJ3z1onW5wIfu9myOZ+wYkJmPCbXGQI91V/NLjDFUo6TEJRj0GrTyWNTqaw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1663956118; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0Te0qtIdI3W0ICk/OBQHzFhDBkKsDg5PMEOT/JijiAE=; b=MYJSwlLXDGLz06b4tHHoJPgt4aAbSN5uVLaU1SyxpBmORtxRZIT13zaI1Eet0l1NzWAOtf 59NdI5aB5y8diOCQ== From: "tip-bot2 for James Morse" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: x86/cache] x86/resctrl: Add domain offline callback for resctrl work Cc: James Morse , Borislav Petkov , Jamie Iles , Shaopeng Tan , Reinette Chatre , Xin Hao , Cristian Marussi , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20220902154829.30399-6-james.morse@arm.com> References: <20220902154829.30399-6-james.morse@arm.com> MIME-Version: 1.0 Message-ID: <166395611688.401.1902343437727291224.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the x86/cache branch of tip: Commit-ID: 798fd4b9ac37fec571f55fb8592497b0dd5f7a73 Gitweb: https://git.kernel.org/tip/798fd4b9ac37fec571f55fb8592497b0dd5f7a73 Author: James Morse AuthorDate: Fri, 02 Sep 2022 15:48:13 Committer: Borislav Petkov CommitterDate: Thu, 22 Sep 2022 15:42:40 +02:00 x86/resctrl: Add domain offline callback for resctrl work Because domains are exposed to user-space via resctrl, the filesystem must update its state when CPU hotplug callbacks are triggered. Some of this work is common to any architecture that would support resctrl, but the work is tied up with the architecture code to free the memory. Move the monitor subdir removal and the cancelling of the mbm/limbo works into a new resctrl_offline_domain() call. These bits are not specific to the architecture. Grouping them in one function allows that code to be moved to /fs/ and re-used by another architecture. Signed-off-by: James Morse Signed-off-by: Borislav Petkov Reviewed-by: Jamie Iles Reviewed-by: Shaopeng Tan Reviewed-by: Reinette Chatre Tested-by: Xin Hao Tested-by: Shaopeng Tan Tested-by: Cristian Marussi Link: https://lore.kernel.org/r/20220902154829.30399-6-james.morse@arm.com --- arch/x86/kernel/cpu/resctrl/core.c | 26 +------------- arch/x86/kernel/cpu/resctrl/internal.h | 2 +- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 45 ++++++++++++++++++++++--- include/linux/resctrl.h | 1 +- 4 files changed, 44 insertions(+), 30 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c index e37889f..f691829 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -523,27 +523,8 @@ static void domain_remove_cpu(int cpu, struct rdt_resource *r) cpumask_clear_cpu(cpu, &d->cpu_mask); if (cpumask_empty(&d->cpu_mask)) { - /* - * If resctrl is mounted, remove all the - * per domain monitor data directories. - */ - if (static_branch_unlikely(&rdt_mon_enable_key)) - rmdir_mondata_subdir_allrdtgrp(r, d->id); + resctrl_offline_domain(r, d); list_del(&d->list); - if (r->mon_capable && is_mbm_enabled()) - cancel_delayed_work(&d->mbm_over); - if (is_llc_occupancy_enabled() && has_busy_rmid(r, d)) { - /* - * When a package is going down, forcefully - * decrement rmid->ebusy. There is no way to know - * that the L3 was flushed and hence may lead to - * incorrect counts in rare scenarios, but leaving - * the RMID as busy creates RMID leaks if the - * package never comes back. - */ - __check_limbo(d, true); - cancel_delayed_work(&d->cqm_limbo); - } /* * rdt_domain "d" is going to be freed below, so clear @@ -551,11 +532,8 @@ static void domain_remove_cpu(int cpu, struct rdt_resource *r) */ if (d->plr) d->plr->d = NULL; - - bitmap_free(d->rmid_busy_llc); - kfree(d->mbm_total); - kfree(d->mbm_local); domain_free(hw_dom); + return; } diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h index be48a68..e12b55f 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -522,8 +522,6 @@ void free_rmid(u32 rmid); int rdt_get_mon_l3_config(struct rdt_resource *r); void mon_event_count(void *info); int rdtgroup_mondata_show(struct seq_file *m, void *arg); -void rmdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, - unsigned int dom_id); void mon_event_read(struct rmid_read *rr, struct rdt_resource *r, struct rdt_domain *d, struct rdtgroup *rdtgrp, int evtid, int first); diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c index 030a703..5830905 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -2499,14 +2499,12 @@ static int mon_addfile(struct kernfs_node *parent_kn, const char *name, * Remove all subdirectories of mon_data of ctrl_mon groups * and monitor groups with given domain id. */ -void rmdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, unsigned int dom_id) +static void rmdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, + unsigned int dom_id) { struct rdtgroup *prgrp, *crgrp; char name[32]; - if (!r->mon_capable) - return; - list_for_each_entry(prgrp, &rdt_all_groups, rdtgroup_list) { sprintf(name, "mon_%s_%02d", r->name, dom_id); kernfs_remove_by_name(prgrp->mon.mon_data_kn, name); @@ -3233,6 +3231,45 @@ out: return ret; } +static void domain_destroy_mon_state(struct rdt_domain *d) +{ + bitmap_free(d->rmid_busy_llc); + kfree(d->mbm_total); + kfree(d->mbm_local); +} + +void resctrl_offline_domain(struct rdt_resource *r, struct rdt_domain *d) +{ + lockdep_assert_held(&rdtgroup_mutex); + + if (!r->mon_capable) + return; + + /* + * If resctrl is mounted, remove all the + * per domain monitor data directories. + */ + if (static_branch_unlikely(&rdt_mon_enable_key)) + rmdir_mondata_subdir_allrdtgrp(r, d->id); + + if (is_mbm_enabled()) + cancel_delayed_work(&d->mbm_over); + if (is_llc_occupancy_enabled() && has_busy_rmid(r, d)) { + /* + * When a package is going down, forcefully + * decrement rmid->ebusy. There is no way to know + * that the L3 was flushed and hence may lead to + * incorrect counts in rare scenarios, but leaving + * the RMID as busy creates RMID leaks if the + * package never comes back. + */ + __check_limbo(d, true); + cancel_delayed_work(&d->cqm_limbo); + } + + domain_destroy_mon_state(d); +} + static int domain_setup_mon_state(struct rdt_resource *r, struct rdt_domain *d) { size_t tsize; diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index d512455..5d283bd 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -193,5 +193,6 @@ int resctrl_arch_update_domains(struct rdt_resource *r, u32 closid); u32 resctrl_arch_get_config(struct rdt_resource *r, struct rdt_domain *d, u32 closid, enum resctrl_conf_type type); int resctrl_online_domain(struct rdt_resource *r, struct rdt_domain *d); +void resctrl_offline_domain(struct rdt_resource *r, struct rdt_domain *d); #endif /* _RESCTRL_H */