[PATCH] Avoid calling get_irq_server() with a real, not virtual irq.

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE7219d

3 messages, 2 authors, 2006-12-14 · open the first message on its own page

[PATCH] Avoid calling get_irq_server() with a real, not virtual irq.

From: Michal Ostrowski <hidden>
Date: 2006-12-14 04:35:46

We can use default_server when masking an interrupt vector.
get_irq_server() assumes a virtual irq, so badness may happen if we
give it a real one.

Signed-off-by: Michal Ostrowski <redacted>
---
 arch/powerpc/platforms/pseries/xics.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index d071abe..7223595 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -224,7 +224,6 @@ static void xics_unmask_irq(unsigned int
 static void xics_mask_real_irq(unsigned int irq)
 {
        int call_status;
-       unsigned int server;
 
        if (irq == XICS_IPI)
                return;
@@ -236,9 +235,9 @@ static void xics_mask_real_irq(unsigned 
                return;
        }
 
-       server = get_irq_server(irq);
        /* Have to set XIVE to 0xff to be able to remove a slot */
-       call_status = rtas_call(ibm_set_xive, 3, 1, NULL, irq, server, 0xff);
+       call_status = rtas_call(ibm_set_xive, 3, 1, NULL, irq, 
+                               default_server, 0xff);
        if (call_status != 0) {
                printk(KERN_ERR "xics_disable_irq: irq=%u: ibm_set_xive(0xff)"
                       " returned %d\n", irq, call_status);
-- 
1.4.1.1

Re: [PATCH] Avoid calling get_irq_server() with a real, not virtual irq.

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2006-12-14 05:40:16

On Wed, 2006-12-13 at 22:35 -0600, Michal Ostrowski wrote:
We can use default_server when masking an interrupt vector.
Is that guaranteed by PAPR ?

Ben.

Re: [PATCH] Avoid calling get_irq_server() with a real, not virtual irq.

From: Michal Ostrowski <hidden>
Date: 2006-12-14 12:46:27

If you set the priority level to 0xff, you've disabled the interrupt:
the XICS model prohibits it from being delivered.  


On the other hand, calling get_irq_server() is obviously wrong.
xics_remap_irq() calls xics_mask_real_irq() in the case that it was not
able to convert real->virt.  That being the case, how can we expect
xics_mask_real_irq to be able to do so in order to call
get_irq_server()?


-- 
Michal Ostrowski [off-list ref]


On Thu, 2006-12-14 at 16:40 +1100, Benjamin Herrenschmidt wrote:
On Wed, 2006-12-13 at 22:35 -0600, Michal Ostrowski wrote:
quoted
We can use default_server when masking an interrupt vector.
Is that guaranteed by PAPR ?

Ben.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help