diff mbox

[05/28] PPC: Set MPIC IDE for IPI to 0

Message ID 1311418212-13356-6-git-send-email-agraf@suse.de
State New
Headers show

Commit Message

Alexander Graf July 23, 2011, 10:49 a.m. UTC
We use the IDE register with IPIs as a mask to keep track which processors
have already acknowledged the respective interrupt. So we need to initialize
it to 0 to make sure that it doesn't accidently fire an IPI on CPU0 when the
first IPI is triggered.

Reported-by: Elie Richa <richa@adacore.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
---
 hw/openpic.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Comments

Elie Richa July 25, 2011, 8:46 a.m. UTC | #1
On 07/23/2011 12:49 PM, Alexander Graf wrote:
> @@ -1304,6 +1304,10 @@ static void mpic_reset (void *opaque)
>           mpp->src[i].ipvp = 0x80800000;
>           mpp->src[i].ide  = 0x00000001;
>       }
> +    /* Set IDE for IPIs to 0 so we don't get spurious interrupts */
> +    for (i = mpp->irq_ipi0; i<  MAX_IPI; i++) {

I suppose you meant i < mpp->irq_ipi0 + MAX_IPI in that loop condition right? ;)

> +        mpp->src[i].ide = 0;
> +    }
>       /* Initialise IRQ destinations */
>       for (i = 0; i<  MAX_CPU; i++) {
>           mpp->dst[i].pctp      = 0x0000000F;
Alexander Graf July 25, 2011, 8:50 a.m. UTC | #2
On 25.07.2011, at 10:46, Elie Richa wrote:

> 
> 
> On 07/23/2011 12:49 PM, Alexander Graf wrote:
>> @@ -1304,6 +1304,10 @@ static void mpic_reset (void *opaque)
>>          mpp->src[i].ipvp = 0x80800000;
>>          mpp->src[i].ide  = 0x00000001;
>>      }
>> +    /* Set IDE for IPIs to 0 so we don't get spurious interrupts */
>> +    for (i = mpp->irq_ipi0; i<  MAX_IPI; i++) {
> 
> I suppose you meant i < mpp->irq_ipi0 + MAX_IPI in that loop condition right? ;)

Ouch. How did that happen? :)


Alex
diff mbox

Patch

diff --git a/hw/openpic.c b/hw/openpic.c
index 9ac3b3d..1f7753d 100644
--- a/hw/openpic.c
+++ b/hw/openpic.c
@@ -1304,6 +1304,10 @@  static void mpic_reset (void *opaque)
         mpp->src[i].ipvp = 0x80800000;
         mpp->src[i].ide  = 0x00000001;
     }
+    /* Set IDE for IPIs to 0 so we don't get spurious interrupts */
+    for (i = mpp->irq_ipi0; i < MAX_IPI; i++) {
+        mpp->src[i].ide = 0;
+    }
     /* Initialise IRQ destinations */
     for (i = 0; i < MAX_CPU; i++) {
         mpp->dst[i].pctp      = 0x0000000F;