[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <53C34CF2.5050209@huawei.com>
Date: Mon, 14 Jul 2014 11:22:26 +0800
From: Liu hua <sdu.liu@...wei.com>
To: Will Deacon <will.deacon@....com>
CC: "tglx@...utronix.de" <tglx@...utronix.de>,
"jason@...edaemon.net" <jason@...edaemon.net>,
"nicolas.pitre@...aro.org" <nicolas.pitre@...aro.org>,
"linux@....linux.org.uk" <linux@....linux.org.uk>,
"ebiederm@...ssion.com" <ebiederm@...ssion.com>,
"linux-arm-kernel@...ts.infradead.org"
<linux-arm-kernel@...ts.infradead.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"wangnan0@...wei.com" <wangnan0@...wei.com>,
"liuxueliu.liu@...wei.com" <liuxueliu.liu@...wei.com>,
"peifeiyue@...wei.com" <peifeiyue@...wei.com>,
"liusdu@....com" <liusdu@....com>, <marc.zyngier@....com>
Subject: Re: [RFC PATCH 0/2] irqchip: GIC: check and clear GIC interupt active
status
On 2014/7/11 20:35, Will Deacon wrote:
> [adding Marc]
>
> On Fri, Jul 11, 2014 at 07:46:15AM +0100, Liu Hua wrote:
>> For this version of GIC codes, kernel assumes that all the interrupt
>> status of GIC is inactive. So the kernel does not check this when
>> booting.
>>
>> This is no problem on must sitations. But when kdump is deplayed.
>> And a panic occurs when a interrupt is being handled (may be PPI
>> and SPI). We have no chance to write relative bit to GICC_EOIR.
>> So this interrupt remains active. And GIC will not deliver this
>> type interrupt to cpu interface. And the capture kernel may
>> fail to boot becase of lacking of certain interrupt (such as timer
>> interupt).
>>
>>
>> I glanced over the GIC Architecture Specification, but did not
>> find a simple way to deactive state of all interrupts. For GICv1,
>> I can only deal with one abnormal interrupt state one time. For
>> GICv2, I can deactive 32 one time.
>>
>>
>> So guys, Do you know a better way to do that?
>
> What happens if, in the crash kernel, you disable the CPU interfaces
> (GICC_CTLR.ENABLE) then disable the distributor (GICD_CTLR.ENABLE) before
> enabling everything again in the reverse order? Is that enough to cause the
> GIC to drop any active states? It's not clear to me from a quick look at
> the TRM.
>
Hi Will,
Thanks for your reply!
I did what you said at the beginning of "gic_dist_init". The active states
remained (panic in local timer interrupt (PPI))and the kernel failed to boot,
Did I do that at wrong place?
-------------------
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
index b6b0a81..94d6352 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
@@ -454,6 +455,7 @@ static void __init gic_dist_init(struct gic_chip_data *gic)
void __iomem *base = gic_data_dist_base(gic);
void __iomem *cpu_base = gic_data_cpu_base(gic);
+ writel_relaxed(0, base + GIC_CPU_CTRL);
writel_relaxed(0, base + GIC_DIST_CTRL);
/*
------------------------
As shown in GIC Architecture Specification manual,I think that the GICC_CTLR.ENABLE
and GICD_CTLR.ENABLE only control the delivering of the interrupt, not the active
states.
As GIC manual says "For every read of a valid Interrupt ID from the GICC_IAR, the
connected processor must perform a matching write to the GICC_EOIR". So we should
find a way to drop the active states when booting, if we do not remain these active
states by design.
Thanks,
Liu Hua
> Will
>
> .
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists