Re: [PATCH 4/4] sparc32: genirq conversion (buggy)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Feb 13, 2011 at 01:19:50PM -0800, David Miller wrote:
> From: Sam Ravnborg <sam@xxxxxxxxxxxx>
> Date: Sun, 13 Feb 2011 22:06:51 +0100
> 
> > So I fixed this - but result is the same - we hang in calibrate_dealy().
> 
> Well, the next problem I noticed is that you only enable the timer IRQ
> on the cpu on which request_irq() executes, what about all of the
> other cpus in the system?

Trying to investigate this I actually found a bug:
@@ -267,7 +268,7 @@ static unsigned int sun4m_build_device_irq(struct platform_device *o
        }

        handler_data->mask = sun4m_imask[real_irq];
-       handler_data->percpu = irq < OBP_INT_LEVEL_ONBOARD;
+       handler_data->percpu = real_irq < OBP_INT_LEVEL_ONBOARD;
        set_irq_chip(irq, &sun4m_irq);
        set_irq_data(irq, handler_data);

percpu is a bool used in the enable/disable handlers to determine if this is
a system wide or a percpu specific irq.
Before the above change the timer interrupt was considered a cpu
specific irq - resulting in the wrong register being set.
With the above change I got one step further - now I see a "Watchdog Reset".
I am yet to investigate why.

> what about all of the other cpus in the system?
I really do not know :-(
This code is as much as I could a copy of the original
implementation (except a floppy hack).
In the original implmentation we did the same via __enable_irq().

And as the timer interrupt is enabled in the system wide interrupt
register - I think this is OK.
But I do not (yet) see how to cope with softint's.
As they are unused for now they can wait.

	Sam

--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Kernel Development]     [DCCP]     [Linux ARM Development]     [Linux]     [Photo]     [Yosemite Help]     [Linux ARM Kernel]     [Linux SCSI]     [Linux x86_64]     [Linux Hams]

  Powered by Linux