Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d3bea1a authored by Will McVicker's avatar Will McVicker Committed by Suren Baghdasaryan
Browse files

ANDROID: GKI: arm64: smp: Add set_update_ipi_history_callback



Provide set_update_ipi_history_callback allowing modules to register
a callback for monitoring interrupt rescheduling events.

Bug: 147267745
Bug: 152652820
Test: compile
Signed-off-by: default avatarWill McVicker <willmcvicker@google.com>
(cherry picked from commit 356d92323654c149933fa0eacaba7ab464381f8e)
[surenb: resolve merge conflicts]
Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
Change-Id: Icae6ba1f671967723667dc51f8337dbef03e89f3
parent 166a538d
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -48,6 +48,12 @@ extern void smp_init_cpus(void);
 */
extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int));

/*
 * Provide a function to set a callback function pointer for updating the ipi
 * history.
 */
extern void set_update_ipi_history_callback(void (*fn)(int));

/*
 * Called from platform specific assembly code, this is the
 * secondary CPU entry point.
+10 −0
Original line number Diff line number Diff line
@@ -516,6 +516,14 @@ void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int))
		__smp_cross_call = fn;
}

static void (*__smp_update_ipi_history_cb)(int cpu);

void set_update_ipi_history_callback(void (*fn)(int))
{
	__smp_update_ipi_history_cb = fn;
}
EXPORT_SYMBOL_GPL(set_update_ipi_history_callback);

static const char *ipi_types[NR_IPI] __tracepoint_string = {
#define S(x,s)	[x] = s
	S(IPI_WAKEUP, "CPU wakeup interrupts"),
@@ -708,6 +716,8 @@ void handle_IPI(int ipinr, struct pt_regs *regs)

void smp_send_reschedule(int cpu)
{
	if (__smp_update_ipi_history_cb)
		__smp_update_ipi_history_cb(cpu);
	smp_cross_call(cpumask_of(cpu), IPI_RESCHEDULE);
}

+6 −0
Original line number Diff line number Diff line
@@ -71,6 +71,12 @@ extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int));

extern void (*__smp_cross_call)(const struct cpumask *, unsigned int);

/*
 * Provide a function to set a callback function pointer for updating the ipi
 * history.
 */
extern void set_update_ipi_history_callback(void (*fn)(int));

/*
 * Called from the secondary holding pen, this is the secondary CPU entry point.
 */
+9 −0
Original line number Diff line number Diff line
@@ -598,6 +598,7 @@ static void __init acpi_parse_and_init_cpus(void)
#define acpi_parse_and_init_cpus(...)	do { } while (0)
#endif

static void (*__smp_update_ipi_history_cb)(int cpu);
/*
 * Enumerate the possible CPU set from the device tree and build the
 * cpu logical map array containing MPIDR values related to logical
@@ -745,6 +746,12 @@ void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int))
	__smp_cross_call = fn;
}

void set_update_ipi_history_callback(void (*fn)(int))
{
	__smp_update_ipi_history_cb = fn;
}
EXPORT_SYMBOL_GPL(set_update_ipi_history_callback);

static const char *ipi_types[NR_IPI] __tracepoint_string = {
#define S(x,s)	[x] = s
	S(IPI_RESCHEDULE, "Rescheduling interrupts"),
@@ -925,6 +932,8 @@ void handle_IPI(int ipinr, struct pt_regs *regs)

void smp_send_reschedule(int cpu)
{
	if (__smp_update_ipi_history_cb)
		__smp_update_ipi_history_cb(cpu);
	smp_cross_call(cpumask_of(cpu), IPI_RESCHEDULE);
}