From: Paul M. <le...@li...> - 2007-10-30 00:35:35
|
On Sat, Oct 27, 2007 at 08:19:54AM +0200, Heiko Schocher wrote: > After this I get an Intevent 0x1e0, and then nothing more works ... > > 1) Has somebody here an idea, where this intevent come from? How I can > prevent it? > It sounds like something is generating an interrupt that you aren't acking, for some reason it isn't being caught as spurious and disabled, and you are hanging as a result. If you want to hack around it, you can > BTW: > 4) I think the generic_irq_demux funktion dont work nice, if I get such > an eventvector, > the resulting irq is 0x7ffffff, and irq is used as an index in > generic_handle_irq() > struct irq_desc *desc = irq_desc + irq; > , and + 0x7ffffff is somewhere in the RAM, thats not good. > This is rather curious. EVT 0x1e0 implies IRQ -1, and you've simply wrapped, that shouldn't happen. You shouldn't even be entering the do_IRQ() path here, are you certain that this is an INTEVT value rather than an EXPEVT one? You may also want to register a dummy handler at that EVT slot using set_exception_table_evt() (you probably also want to invalidate the I-cache for sanity after doing so), and see what falls out. That's certainly not a valid IRQ vector. |