From: "tip-bot2 for James Morse" <tip-bot2@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: James Morse <james.morse@arm.com>, Borislav Petkov <bp@suse.de>,
Jamie Iles <quic_jiles@quicinc.com>,
Shaopeng Tan <tan.shaopeng@fujitsu.com>,
Reinette Chatre <reinette.chatre@intel.com>,
Xin Hao <xhao@linux.alibaba.com>,
Cristian Marussi <cristian.marussi@arm.com>,
x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: x86/cache] x86/resctrl: Add domain online callback for resctrl work
Date: Fri, 23 Sep 2022 18:01:58 -0000 [thread overview]
Message-ID: <166395611895.401.13347771402133648689.tip-bot2@tip-bot2> (raw)
In-Reply-To: <20220902154829.30399-4-james.morse@arm.com>
The following commit has been merged into the x86/cache branch of tip:
Commit-ID: 3a7232cdf19e39e7f24c493117b373788b348af2
Gitweb: https://git.kernel.org/tip/3a7232cdf19e39e7f24c493117b373788b348af2
Author: James Morse <james.morse@arm.com>
AuthorDate: Fri, 02 Sep 2022 15:48:11
Committer: Borislav Petkov <bp@suse.de>
CommitterDate: Thu, 22 Sep 2022 15:13:27 +02:00
x86/resctrl: Add domain online 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
allocate the memory.
Move domain_setup_mon_state(), the monitor subdir creation call and the
mbm/limbo workers into a new resctrl_online_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 <james.morse@arm.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Jamie Iles <quic_jiles@quicinc.com>
Reviewed-by: Shaopeng Tan <tan.shaopeng@fujitsu.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Tested-by: Xin Hao <xhao@linux.alibaba.com>
Tested-by: Shaopeng Tan <tan.shaopeng@fujitsu.com>
Tested-by: Cristian Marussi <cristian.marussi@arm.com>
Link: https://lore.kernel.org/r/20220902154829.30399-4-james.morse@arm.com
---
arch/x86/kernel/cpu/resctrl/core.c | 53 ++------------------
arch/x86/kernel/cpu/resctrl/internal.h | 2 +-
arch/x86/kernel/cpu/resctrl/rdtgroup.c | 65 +++++++++++++++++++++++--
include/linux/resctrl.h | 1 +-
4 files changed, 67 insertions(+), 54 deletions(-)
diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
index 2f87177..25f3014 100644
--- a/arch/x86/kernel/cpu/resctrl/core.c
+++ b/arch/x86/kernel/cpu/resctrl/core.c
@@ -443,42 +443,6 @@ static int domain_setup_ctrlval(struct rdt_resource *r, struct rdt_domain *d)
return 0;
}
-static int domain_setup_mon_state(struct rdt_resource *r, struct rdt_domain *d)
-{
- size_t tsize;
-
- if (is_llc_occupancy_enabled()) {
- d->rmid_busy_llc = bitmap_zalloc(r->num_rmid, GFP_KERNEL);
- if (!d->rmid_busy_llc)
- return -ENOMEM;
- INIT_DELAYED_WORK(&d->cqm_limbo, cqm_handle_limbo);
- }
- if (is_mbm_total_enabled()) {
- tsize = sizeof(*d->mbm_total);
- d->mbm_total = kcalloc(r->num_rmid, tsize, GFP_KERNEL);
- if (!d->mbm_total) {
- bitmap_free(d->rmid_busy_llc);
- return -ENOMEM;
- }
- }
- if (is_mbm_local_enabled()) {
- tsize = sizeof(*d->mbm_local);
- d->mbm_local = kcalloc(r->num_rmid, tsize, GFP_KERNEL);
- if (!d->mbm_local) {
- bitmap_free(d->rmid_busy_llc);
- kfree(d->mbm_total);
- return -ENOMEM;
- }
- }
-
- if (is_mbm_enabled()) {
- INIT_DELAYED_WORK(&d->mbm_over, mbm_handle_overflow);
- mbm_setup_overflow_handler(d, MBM_OVERFLOW_INTERVAL);
- }
-
- return 0;
-}
-
/*
* domain_add_cpu - Add a cpu to a resource's domain list.
*
@@ -498,6 +462,7 @@ static void domain_add_cpu(int cpu, struct rdt_resource *r)
struct list_head *add_pos = NULL;
struct rdt_hw_domain *hw_dom;
struct rdt_domain *d;
+ int err;
d = rdt_find_domain(r, id, &add_pos);
if (IS_ERR(d)) {
@@ -527,21 +492,15 @@ static void domain_add_cpu(int cpu, struct rdt_resource *r)
return;
}
- if (r->mon_capable && domain_setup_mon_state(r, d)) {
+ list_add_tail(&d->list, add_pos);
+
+ err = resctrl_online_domain(r, d);
+ if (err) {
+ list_del(&d->list);
kfree(hw_dom->ctrl_val);
kfree(hw_dom->mbps_val);
kfree(hw_dom);
- return;
}
-
- list_add_tail(&d->list, add_pos);
-
- /*
- * If resctrl is mounted, add
- * per domain monitor data directories.
- */
- if (static_branch_unlikely(&rdt_mon_enable_key))
- mkdir_mondata_subdir_allrdtgrp(r, d);
}
static void domain_remove_cpu(int cpu, struct rdt_resource *r)
diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
index 8828b5c..be48a68 100644
--- a/arch/x86/kernel/cpu/resctrl/internal.h
+++ b/arch/x86/kernel/cpu/resctrl/internal.h
@@ -524,8 +524,6 @@ 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 mkdir_mondata_subdir_allrdtgrp(struct rdt_resource *r,
- struct rdt_domain *d);
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 def7c66..030a703 100644
--- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
@@ -2565,16 +2565,13 @@ out_destroy:
* Add all subdirectories of mon_data for "ctrl_mon" groups
* and "monitor" groups with given domain id.
*/
-void mkdir_mondata_subdir_allrdtgrp(struct rdt_resource *r,
- struct rdt_domain *d)
+static void mkdir_mondata_subdir_allrdtgrp(struct rdt_resource *r,
+ struct rdt_domain *d)
{
struct kernfs_node *parent_kn;
struct rdtgroup *prgrp, *crgrp;
struct list_head *head;
- if (!r->mon_capable)
- return;
-
list_for_each_entry(prgrp, &rdt_all_groups, rdtgroup_list) {
parent_kn = prgrp->mon.mon_data_kn;
mkdir_mondata_subdir(parent_kn, d, r, prgrp);
@@ -3236,6 +3233,64 @@ out:
return ret;
}
+static int domain_setup_mon_state(struct rdt_resource *r, struct rdt_domain *d)
+{
+ size_t tsize;
+
+ if (is_llc_occupancy_enabled()) {
+ d->rmid_busy_llc = bitmap_zalloc(r->num_rmid, GFP_KERNEL);
+ if (!d->rmid_busy_llc)
+ return -ENOMEM;
+ }
+ if (is_mbm_total_enabled()) {
+ tsize = sizeof(*d->mbm_total);
+ d->mbm_total = kcalloc(r->num_rmid, tsize, GFP_KERNEL);
+ if (!d->mbm_total) {
+ bitmap_free(d->rmid_busy_llc);
+ return -ENOMEM;
+ }
+ }
+ if (is_mbm_local_enabled()) {
+ tsize = sizeof(*d->mbm_local);
+ d->mbm_local = kcalloc(r->num_rmid, tsize, GFP_KERNEL);
+ if (!d->mbm_local) {
+ bitmap_free(d->rmid_busy_llc);
+ kfree(d->mbm_total);
+ return -ENOMEM;
+ }
+ }
+
+ return 0;
+}
+
+int resctrl_online_domain(struct rdt_resource *r, struct rdt_domain *d)
+{
+ int err;
+
+ lockdep_assert_held(&rdtgroup_mutex);
+
+ if (!r->mon_capable)
+ return 0;
+
+ err = domain_setup_mon_state(r, d);
+ if (err)
+ return err;
+
+ if (is_mbm_enabled()) {
+ INIT_DELAYED_WORK(&d->mbm_over, mbm_handle_overflow);
+ mbm_setup_overflow_handler(d, MBM_OVERFLOW_INTERVAL);
+ }
+
+ if (is_llc_occupancy_enabled())
+ INIT_DELAYED_WORK(&d->cqm_limbo, cqm_handle_limbo);
+
+ /* If resctrl is mounted, add per domain monitor data directories. */
+ if (static_branch_unlikely(&rdt_mon_enable_key))
+ mkdir_mondata_subdir_allrdtgrp(r, d);
+
+ return 0;
+}
+
/*
* rdtgroup_init - rdtgroup initialization
*
diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
index 8180c53..d512455 100644
--- a/include/linux/resctrl.h
+++ b/include/linux/resctrl.h
@@ -192,5 +192,6 @@ u32 resctrl_arch_get_num_closid(struct rdt_resource *r);
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);
#endif /* _RESCTRL_H */
next prev parent reply other threads:[~2022-09-23 18:03 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-02 15:48 [PATCH v6 00/21] x86/resctrl: Make resctrl_arch_rmid_read() return values in bytes James Morse
2022-09-02 15:48 ` [PATCH v6 01/21] x86/resctrl: Kill off alloc_enabled James Morse
2022-09-23 18:02 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 02/21] x86/resctrl: Merge mon_capable and mon_enabled James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 03/21] x86/resctrl: Add domain online callback for resctrl work James Morse
2022-09-23 18:01 ` tip-bot2 for James Morse [this message]
2022-09-02 15:48 ` [PATCH v6 04/21] x86/resctrl: Group struct rdt_hw_domain cleanup James Morse
2022-09-07 6:28 ` haoxin
2022-09-08 17:01 ` James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 05/21] x86/resctrl: Add domain offline callback for resctrl work James Morse
2022-09-07 6:29 ` haoxin
2022-09-08 17:00 ` James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 06/21] x86/resctrl: Remove set_mba_sc()s control array re-initialisation James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 07/21] x86/resctrl: Abstract and use supports_mba_mbps() James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 08/21] x86/resctrl: Create mba_sc configuration in the rdt_domain James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 09/21] x86/resctrl: Switch over to the resctrl mbps_val list James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 10/21] x86/resctrl: Remove architecture copy of mbps_val James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 11/21] x86/resctrl: Allow update_mba_bw() to update controls directly James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 12/21] x86/resctrl: Calculate bandwidth from the previous __mon_event_count() chunks James Morse
2022-09-07 6:47 ` haoxin
2022-09-08 17:00 ` James Morse
2022-09-08 21:13 ` Reinette Chatre
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 13/21] x86/resctrl: Add per-rmid arch private storage for overflow and chunks James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 14/21] x86/resctrl: Allow per-rmid arch private storage to be reset James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 15/21] x86/resctrl: Abstract __rmid_read() James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 16/21] x86/resctrl: Pass the required parameters into resctrl_arch_rmid_read() James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 17/21] x86/resctrl: Move mbm_overflow_count() " James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 18/21] x86/resctrl: Move get_corrected_mbm_count() " James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 19/21] x86/resctrl: Rename and change the units of resctrl_cqm_threshold James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 20/21] x86/resctrl: Add resctrl_rmid_realloc_limit to abstract x86's boot_cpu_data James Morse
2022-09-07 6:26 ` haoxin
2022-09-08 17:01 ` James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-02 15:48 ` [PATCH v6 21/21] x86/resctrl: Make resctrl_arch_rmid_read() return values in bytes James Morse
2022-09-23 18:01 ` [tip: x86/cache] " tip-bot2 for James Morse
2022-09-13 1:00 ` [PATCH v6 00/21] " tan.shaopeng
2022-09-22 9:40 ` James Morse
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=166395611895.401.13347771402133648689.tip-bot2@tip-bot2 \
--to=tip-bot2@linutronix.de \
--cc=bp@suse.de \
--cc=cristian.marussi@arm.com \
--cc=james.morse@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=quic_jiles@quicinc.com \
--cc=reinette.chatre@intel.com \
--cc=tan.shaopeng@fujitsu.com \
--cc=x86@kernel.org \
--cc=xhao@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®