ANDROID: gic: Add vendor hook to GIC

Add vendor hook for affinity setting to GIC irqchip driver.

GIC irqchip driver support only single CPU for affinity setting.
But GIC HW can support multi target IRQ action, any available CPU can
service IRQ when requested irq arised. This feature is very useful
for some fast irq action required device.
So Add vendor hook to support multi target affinity setting.

Bug: 210559155
Change-Id: If44b2244bb623bf8d4755109a6dca32ac35df795
Signed-off-by: Hajun Sung <hajun.sung@samsung.com>
This commit is contained in:
Hajun Sung
2021-12-14 10:27:05 +09:00
committed by Marc Zyngier
parent 19fad7e205
commit 9c25e5d6f5
3 changed files with 9 additions and 0 deletions

View File

@@ -81,6 +81,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dump_throttled_rt_tasks);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_printk_hotplug);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_jiffies_update);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_set_affinity);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_set_affinity);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_affinity_init);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_suspend_epoch_val);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_resume_epoch_val);

View File

@@ -38,6 +38,7 @@
#include <linux/irqchip.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/irqchip/arm-gic.h>
#include <trace/hooks/gic.h>
#include <asm/cputype.h>
#include <asm/irq.h>
@@ -815,6 +816,8 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
writeb_relaxed(gic_cpu_map[cpu], reg);
irq_data_update_effective_affinity(d, cpumask_of(cpu));
trace_android_vh_gic_set_affinity(d, mask_val, force, gic_cpu_map, reg);
return IRQ_SET_MASK_OK_DONE;
}

View File

@@ -16,6 +16,11 @@ DECLARE_HOOK(android_vh_gic_resume,
TP_PROTO(struct irq_domain *domain, void __iomem *dist_base),
TP_ARGS(domain, dist_base));
DECLARE_HOOK(android_vh_gic_set_affinity,
TP_PROTO(struct irq_data *d, const struct cpumask *mask_val,
bool force, u8 *gic_cpu_map, void __iomem *reg),
TP_ARGS(d, mask_val, force, gic_cpu_map, reg));
#endif /* _TRACE_HOOK_GIC_H */
/* This part must be outside protection */
#include <trace/define_trace.h>