From: Dave Martin <Dave.Martin@arm.com>
To: x86@kernel.org, linux-kernel@vger.kernel.org
Cc: James Morse <james.morse@arm.com>,
Fenghua Yu <fenghua.yu@intel.com>,
Reinette Chatre <reinette.chatre@intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
H Peter Anvin <hpa@zytor.com>, Babu Moger <Babu.Moger@amd.com>,
shameerali.kolothum.thodi@huawei.com,
D Scott Phillips OS <scott@os.amperecomputing.com>,
carl@os.amperecomputing.com, lcherian@marvell.com,
bobo.shaobowang@huawei.com,
"Shaopeng Tan (Fujitsu)" <tan.shaopeng@fujitsu.com>,
baolin.wang@linux.alibaba.com,
Jamie Iles <quic_jiles@quicinc.com>,
Xin Hao <xhao@linux.alibaba.com>,
Peter Newman <peternewman@google.com>,
dfustini@baylibre.com, amitsinght@marvell.com,
David Hildenbrand <david@redhat.com>,
Rex Nie <rex.nie@jaguarmicro.com>
Subject: [PATCH v2 18/35] x86/resctrl: Allow resctrl_arch_mon_event_config_write() to return an error
Date: Fri, 26 Apr 2024 16:08:47 +0100 [thread overview]
Message-ID: <20240426150904.8854-18-Dave.Martin@arm.com> (raw)
In-Reply-To: <20240426150904.8854-1-Dave.Martin@arm.com>
From: James Morse <james.morse@arm.com>
resctrl_arch_mon_event_config_write() writes a bitmap of events provided
by user-space into the configuration register for the monitors.
This assumes that all architectures support all the features each bit
corresponds to.
MPAM can filter monitors based on read, write, or both, but there are
many more options in the existing bitmap. To allow this interface to
work for machines with MPAM, allow the architecture helper to return
an error if an incompatible bitmap is set.
When valid values are provided, there is no change in behaviour. If
an invalid value is provided, currently it is silently ignored, but
last_cmd_status is updated. After this change, the parser will stop
at the first invalid value and return an error to user-space. This
matches the way changes to the schemata file are made.
Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Dave Martin <Dave.Martin@arm.com>
---
FYI: James Morse (et al.):
* Can this patch be dropped?
It looks like the core code will handling checking cfg values
gracefully if the arch backend initialises rdt_resource::
mbm_cfg_mask to something suitable?
Is there any reason why we can't detect bad values globally before
cross-calling?
Changes in v2:
* [Whitespace only] Re-tabbed resctrl_mon_config_info::err field
declaration in <linux/resctrl.h> to match the prevailing style.
No functional change.
---
arch/x86/kernel/cpu/resctrl/rdtgroup.c | 20 ++++++++++++++++----
include/linux/resctrl.h | 1 +
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
index ef9c30a2eace..38436e4c1741 100644
--- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
@@ -1683,13 +1683,16 @@ void resctrl_arch_mon_event_config_write(void *info)
index = mon_event_config_index_get(mon_info->evtid);
if (index == INVALID_CONFIG_INDEX) {
pr_warn_once("Invalid event id %d\n", mon_info->evtid);
+ mon_info->err = -EINVAL;
return;
}
wrmsr(MSR_IA32_EVT_CFG_BASE + index, mon_info->mon_config, 0);
+
+ mon_info->err = 0;
}
-static void mbm_config_write_domain(struct rdt_resource *r,
- struct rdt_domain *d, u32 evtid, u32 val)
+static int mbm_config_write_domain(struct rdt_resource *r,
+ struct rdt_domain *d, u32 evtid, u32 val)
{
struct resctrl_mon_config_info mon_info = {0};
@@ -1702,7 +1705,7 @@ static void mbm_config_write_domain(struct rdt_resource *r,
mon_info.evtid = evtid;
mondata_config_read(&mon_info);
if (mon_info.mon_config == val)
- return;
+ return 0;
mon_info.mon_config = val;
@@ -1714,6 +1717,10 @@ static void mbm_config_write_domain(struct rdt_resource *r,
*/
smp_call_function_any(&d->cpu_mask, resctrl_arch_mon_event_config_write,
&mon_info, 1);
+ if (mon_info.err) {
+ rdt_last_cmd_puts("Invalid event configuration\n");
+ return mon_info.err;
+ }
/*
* When an Event Configuration is changed, the bandwidth counters
@@ -1725,6 +1732,8 @@ static void mbm_config_write_domain(struct rdt_resource *r,
* mbm_local and mbm_total counts for all the RMIDs.
*/
resctrl_arch_reset_rmid_all(r, d);
+
+ return 0;
}
static int mon_config_write(struct rdt_resource *r, char *tok, u32 evtid)
@@ -1732,6 +1741,7 @@ static int mon_config_write(struct rdt_resource *r, char *tok, u32 evtid)
char *dom_str = NULL, *id_str;
unsigned long dom_id, val;
struct rdt_domain *d;
+ int err;
/* Walking r->domains, ensure it can't race with cpuhp */
lockdep_assert_cpus_held();
@@ -1763,7 +1773,9 @@ static int mon_config_write(struct rdt_resource *r, char *tok, u32 evtid)
list_for_each_entry(d, &r->domains, list) {
if (d->id == dom_id) {
- mbm_config_write_domain(r, d, evtid, val);
+ err = mbm_config_write_domain(r, d, evtid, val);
+ if (err)
+ return err;
goto next;
}
}
diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
index 2f71ae690640..63d377e8cb87 100644
--- a/include/linux/resctrl.h
+++ b/include/linux/resctrl.h
@@ -200,6 +200,7 @@ struct resctrl_mon_config_info {
struct rdt_domain *d;
u32 evtid;
u32 mon_config;
+ int err;
};
/**
--
2.34.1
next prev parent reply other threads:[~2024-04-26 15:10 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-26 15:05 [PATCH v2 00/35] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl Dave Martin
2024-04-26 15:08 ` [PATCH v2 01/35] x86/resctrl: Fix allocation of cleanest CLOSID on platforms with no monitors Dave Martin
2024-04-26 15:08 ` [PATCH v2 02/35] x86/resctrl: Add a helper to avoid reaching into the arch code resource list Dave Martin
2024-04-26 15:08 ` [PATCH v2 03/35] x86/resctrl: Move ctrlval string parsing policy away from the arch code Dave Martin
2024-04-26 15:08 ` [PATCH v2 04/35] x86/resctrl: Add helper for setting CPU default properties Dave Martin
2024-04-26 15:08 ` [PATCH v2 05/35] x86/resctrl: Remove rdtgroup from update_cpu_closid_rmid() Dave Martin
2024-04-26 15:08 ` [PATCH v2 06/35] x86/resctrl: Export resctrl fs's init function Dave Martin
2024-05-23 0:48 ` Shaopeng Tan (Fujitsu)
2024-04-26 15:08 ` [PATCH v2 07/35] x86/resctrl: Wrap resctrl_arch_find_domain() around rdt_find_domain() Dave Martin
2024-04-26 15:08 ` [PATCH v2 08/35] x86/resctrl: Move resctrl types to a separate header Dave Martin
2024-04-26 15:08 ` [PATCH v2 09/35] x86/resctrl: Add a resctrl helper to reset all the resources Dave Martin
2024-04-26 15:08 ` [PATCH v2 10/35] x86/resctrl: Move monitor init work to a resctrl init call Dave Martin
2024-04-26 15:08 ` [PATCH v2 11/35] x86/resctrl: Move monitor exit work to a resctrl exit call Dave Martin
2024-04-26 15:08 ` [PATCH v2 12/35] x86/resctrl: Move max_{name,data}_width into resctrl code Dave Martin
2024-04-26 15:08 ` [PATCH v2 13/35] x86/resctrl: Stop using the for_each_*_rdt_resource() walkers Dave Martin
2024-04-26 15:08 ` [PATCH v2 14/35] x86/resctrl: Export the is_mbm_*_enabled() helpers to asm/resctrl.h Dave Martin
2024-04-26 15:08 ` [PATCH v2 15/35] x86/resctrl: Add resctrl_arch_is_evt_configurable() to abstract BMEC Dave Martin
2024-04-26 15:08 ` [PATCH v2 16/35] x86/resctrl: Change mon_event_config_{read,write}() to be arch helpers Dave Martin
2024-04-26 15:08 ` [PATCH v2 17/35] x86/resctrl: Move mbm_cfg_mask to struct rdt_resource Dave Martin
2024-06-14 13:57 ` James Morse
2024-04-26 15:08 ` Dave Martin [this message]
2024-04-26 15:08 ` [PATCH v2 19/35] x86/resctrl: Add resctrl_arch_ prefix to pseudo lock functions Dave Martin
2024-04-26 15:08 ` [PATCH v2 20/35] x86/resctrl: Allow an architecture to disable pseudo lock Dave Martin
2024-04-26 15:08 ` [PATCH v2 21/35] x86/resctrl: Make prefetch_disable_bits belong to the arch code Dave Martin
2024-04-26 15:08 ` [PATCH v2 22/35] x86/resctrl: Make resctrl_arch_pseudo_lock_fn() take a plr Dave Martin
2024-06-14 13:58 ` James Morse
2024-04-26 15:08 ` [PATCH v2 23/35] x86/resctrl: Move thread_throttle_mode_init() to be managed by resctrl Dave Martin
2024-04-26 15:08 ` [PATCH v2 24/35] x86/resctrl: Move get_config_index() to a header Dave Martin
2024-04-26 15:08 ` [PATCH v2 25/35] x86/resctrl: Claim get_domain_from_cpu() for resctrl Dave Martin
2024-04-26 15:08 ` [PATCH v2 26/35] x86/resctrl: Describe resctrl's bitmap size assumptions Dave Martin
2024-04-26 15:08 ` [PATCH v2 27/35] x86/resctrl: Rename resctrl_sched_in() to begin with "resctrl_arch_" Dave Martin
2024-04-26 15:08 ` [PATCH v2 28/35] x86/resctrl: Drop __init/__exit on assorted symbols Dave Martin
2024-04-26 15:08 ` [PATCH v2 29/35] fs/resctrl: Add boiler plate for external resctrl code Dave Martin
2024-06-14 13:59 ` James Morse
2024-04-26 15:08 ` [PATCH v2 30/35] x86/resctrl: Squelch whitespace anomalies in resctrl core code Dave Martin
2024-04-26 15:09 ` [PATCH v2 31/35] x86/resctrl: Prefer alloc(sizeof(*foo)) idiom in rdt_init_fs_context() Dave Martin
2024-04-26 15:09 ` [PATCH v2 32/35] x86/resctrl: Relax some asm #includes Dave Martin
2024-04-26 15:09 ` [PATCH v2 33/35] x86/resctrl: Move the filesystem bits to headers visible to fs/resctrl Dave Martin
2024-04-26 15:09 ` [PATCH v2 34/35] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl Dave Martin
2024-04-26 15:09 ` [PATCH v2 35/35] [SQUASHME] " Dave Martin
2024-04-29 23:34 ` [PATCH v2 00/35] " Peter Newman
2024-04-30 16:29 ` Dave Martin
2024-05-08 15:41 ` Reinette Chatre
2024-05-14 15:17 ` Dave Martin
2024-05-14 15:56 ` Reinette Chatre
2024-05-23 15:01 ` Dave Martin
2024-05-23 15:07 ` David Hildenbrand
2024-05-23 15:18 ` Dave Martin
2024-05-23 0:39 ` Shaopeng Tan (Fujitsu)
2024-06-14 13:59 ` 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=20240426150904.8854-18-Dave.Martin@arm.com \
--to=dave.martin@arm.com \
--cc=Babu.Moger@amd.com \
--cc=amitsinght@marvell.com \
--cc=baolin.wang@linux.alibaba.com \
--cc=bobo.shaobowang@huawei.com \
--cc=bp@alien8.de \
--cc=carl@os.amperecomputing.com \
--cc=david@redhat.com \
--cc=dfustini@baylibre.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=lcherian@marvell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peternewman@google.com \
--cc=quic_jiles@quicinc.com \
--cc=reinette.chatre@intel.com \
--cc=rex.nie@jaguarmicro.com \
--cc=scott@os.amperecomputing.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=tan.shaopeng@fujitsu.com \
--cc=tglx@linutronix.de \
--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