2024-02-06 19:02:48

by Marcelo Tosatti

[permalink] [raw]
Subject: [patch 08/12] arm64 kernel/topology: use smp_call_function_single_fail

Convert cpu_read_constcnt from smp_call_function_single
to smp_call_func_single_fail, which will fail in case
the target CPU is tagged as block interference CPU.

Signed-off-by: Marcelo Tosatti <[email protected]>

Index: linux-isolation/arch/arm64/kernel/topology.c
===================================================================
--- linux-isolation.orig/arch/arm64/kernel/topology.c
+++ linux-isolation/arch/arm64/kernel/topology.c
@@ -17,6 +17,7 @@
#include <linux/cpufreq.h>
#include <linux/init.h>
#include <linux/percpu.h>
+#include <linux/sched/isolation.h>

#include <asm/cpu.h>
#include <asm/cputype.h>
@@ -280,6 +281,8 @@ static void cpu_read_constcnt(void *val)
static inline
int counters_read_on_cpu(int cpu, smp_call_func_t func, u64 *val)
{
+ int ret, idx;
+
/*
* Abort call on counterless CPU or when interrupts are
* disabled - can lead to deadlock in smp sync call.
@@ -290,7 +293,11 @@ int counters_read_on_cpu(int cpu, smp_ca
if (WARN_ON_ONCE(irqs_disabled()))
return -EPERM;

- smp_call_function_single(cpu, func, val, 1);
+ idx = block_interf_srcu_read_lock();
+ ret = smp_call_function_single_fail(cpu, func, val, 1);
+ block_interf_srcu_read_unlock(idx);
+ if (ret)
+ return ret;

return 0;
}