summaryrefslogtreecommitdiff
path: root/drivers/resctrl/mpam_devices.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/resctrl/mpam_devices.c')
-rw-r--r--drivers/resctrl/mpam_devices.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
index c0f51d41e7fe..31f4826ab399 100644
--- a/drivers/resctrl/mpam_devices.c
+++ b/drivers/resctrl/mpam_devices.c
@@ -3040,7 +3040,7 @@ static void mpam_enable_once(void)
mpam_partid_max + 1, mpam_pmg_max + 1);
}
-static void mpam_reset_component_locked(struct mpam_component *comp)
+static int mpam_reset_component_locked(struct mpam_component *comp)
{
struct mpam_vmsc *vmsc;
@@ -3054,26 +3054,38 @@ static void mpam_reset_component_locked(struct mpam_component *comp)
srcu_read_lock_held(&mpam_srcu)) {
struct mpam_msc *msc = vmsc->msc;
struct mpam_msc_ris *ris;
+ int ret;
list_for_each_entry_srcu(ris, &vmsc->ris, vmsc_list,
srcu_read_lock_held(&mpam_srcu)) {
- if (!ris->in_reset_state)
- mpam_touch_msc(msc, mpam_reset_ris, ris);
+ if (!ris->in_reset_state) {
+ ret = mpam_touch_msc(msc, mpam_reset_ris, ris);
+ if (ret)
+ return ret;
+ }
ris->in_reset_state = true;
}
}
+
+ return 0;
}
-void mpam_reset_class_locked(struct mpam_class *class)
+int mpam_reset_class_locked(struct mpam_class *class)
{
struct mpam_component *comp;
+ int ret;
lockdep_assert_cpus_held();
guard(srcu)(&mpam_srcu);
list_for_each_entry_srcu(comp, &class->components, class_list,
- srcu_read_lock_held(&mpam_srcu))
- mpam_reset_component_locked(comp);
+ srcu_read_lock_held(&mpam_srcu)) {
+ ret = mpam_reset_component_locked(comp);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
}
static void mpam_reset_class(struct mpam_class *class)