Tested on a Cubieboard2 with v3.16.7-ckt9 kernel.
---
arch/arm/mach-sunxi/Kconfig | 1 +
drivers/irqchip/irq-sunxi-nmi.c | 7 ++++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig
index 0fbd4f1..96d76da8 100644
--- a/arch/arm/mach-sunxi/Kconfig
+++ b/arch/arm/mach-sunxi/Kconfig
@@ -6,6 +6,7 @@ menuconfig ARCH_SUNXI
select PINCTRL
select PINCTRL_SUNXI
select SUN4I_TIMER
+ select IPIPE_ARM_KUSER_TSC if IPIPE
if ARCH_SUNXI
diff --git a/drivers/irqchip/irq-sunxi-nmi.c b/drivers/irqchip/irq-sunxi-nmi.c
index 12f547a..d3e8da2 100644
--- a/drivers/irqchip/irq-sunxi-nmi.c
+++ b/drivers/irqchip/irq-sunxi-nmi.c
@@ -77,8 +77,9 @@ static int sunxi_sc_nmi_set_type(struct irq_data *data,
unsigned int flow_type)
u32 ctrl_off = ct->regs.type;
unsigned int src_type;
unsigned int i;
+ unsigned long flags;
- irq_gc_lock(gc);
+ flags = irq_gc_lock(gc);
switch (flow_type & IRQF_TRIGGER_MASK) {
case IRQ_TYPE_EDGE_FALLING:
@@ -95,7 +96,7 @@ static int sunxi_sc_nmi_set_type(struct irq_data *data,
unsigned int flow_type)
src_type = SUNXI_SRC_TYPE_LEVEL_LOW;
break;
default:
- irq_gc_unlock(gc);
+ irq_gc_unlock(gc, flags);
pr_err("%s: Cannot assign multiple trigger modes to IRQ %d.\n",
__func__, data->irq);
return -EBADR;
@@ -113,7 +114,7 @@ static int sunxi_sc_nmi_set_type(struct irq_data *data,
unsigned int flow_type)
src_type_reg |= src_type;
sunxi_sc_nmi_write(gc, ctrl_off, src_type_reg);
- irq_gc_unlock(gc);
+ irq_gc_unlock(gc, flags);
return IRQ_SET_MASK_OK;
}
--
1.7.10.4
_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai