Commit c55bdaec authored by Philippe Gerum's avatar Philippe Gerum
Browse files

arm64/ipipe: fixup GIC v3 irq chip

parent 086b3877
......@@ -25,6 +25,8 @@
#ifndef __ARM_IPIPE_H
#define __ARM_IPIPE_H
struct irq_domain;
#ifdef CONFIG_IPIPE
#include <linux/jump_label.h>
......@@ -212,9 +214,11 @@ void __ipipe_grab_irq(int irq, struct pt_regs *regs);
void __ipipe_exit_irq(struct pt_regs *regs);
static inline void ipipe_handle_multi_irq(int irq, struct pt_regs *regs)
static inline int ipipe_handle_multi_irq(struct irq_domain *domain,
unsigned int irq, struct pt_regs *regs)
{
__ipipe_grab_irq(irq, regs);
return 0;
}
static inline unsigned long __ipipe_ffnz(unsigned long ul)
......@@ -255,9 +259,10 @@ struct task_struct *ipipe_switch_to(struct task_struct *prev,
(void) (flags); \
} while(0)
static inline void ipipe_handle_multi_irq(int irq, struct pt_regs *regs)
static inline int ipipe_handle_multi_irq(struct irq_domain *domain,
unsigned int irq, struct pt_regs *regs)
{
__handle_domain_irq(NULL, irq, false, regs);
return handle_domain_irq(domain, irq, regs);
}
#ifdef CONFIG_SMP
......
......@@ -343,7 +343,7 @@ static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs
if (likely(irqnr > 15 && irqnr < 1020) || irqnr >= 8192) {
int err;
err = handle_domain_irq(gic_data.domain, irqnr, regs);
err = ipipe_handle_multi_irq(gic_data.domain, irqnr, regs);
if (err) {
WARN_ONCE(true, "Unexpected interrupt received!\n");
gic_write_eoir(irqnr);
......@@ -353,7 +353,7 @@ static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs
if (irqnr < 16) {
gic_write_eoir(irqnr);
#ifdef CONFIG_SMP
handle_IPI(irqnr, regs);
ipipe_handle_multi_ipi(irqnr, regs);
#else
WARN_ONCE(true, "Unexpected SGI received!\n");
#endif
......
......@@ -298,8 +298,7 @@ static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
irqnr = irqstat & GICC_IAR_INT_ID_MASK;
if (likely(irqnr > 15 && irqnr < 1021)) {
irqnr = irq_find_mapping(gic->domain, irqnr);
ipipe_handle_multi_irq(irqnr, regs);
ipipe_handle_multi_irq(gic->domain, irqnr, regs);
continue;
}
if (irqnr < 16) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment