Hello Andrew,

I temporarily commented out the following line:
	saa7146_ext[i]->irq_handler(saa, isr, saa->data[i]);

Sure enough, I no longer get the oopses.... but, of course, I receive no
data in userspace because the IRQs ain't being handled any more :)
Apparantely, something really goes wrong here.

> I will keep going; hope this helps shed light on the problem.

1) It might be that somehow the irq_handler is not accessible. By looking at the code, I cannot find an error, though.

Ok, perhaps you can add some additional printk() here and there. It would be interesting in this case to add:

printk("%d: %p\n",i,(saa7146_ext[i]!=0?saa7146_ext->irq_handler:-1);

By the way, I find I have to leave the machine off for 2 or 3 minutes to
reliably get this affect, which agrees with what Chris Pitchford said.
2) Strange. It seems as if some part of the saa7146 engine is not initialised correctly. After reboot, some "usable" configuration is there, and the stuff works. After a cold reboot, "random" stuff is inside the registers.

Perhaps a register dump is useful: please add the following lines to the
driver in saa7146_core.c

>static
>void remove_saa7146(struct saa7146 *saa)
>{
> dump_registers(saa->mem);

This will dump the contents of the registers to the syslog when the driver is removed. (This will only work, of course, if the driver does not oops.

You can add the dump_registers() call to the irq-handler, too, right before the function call.

Copy the two register dumps from the syslog and post them on the mailing list, please.

CU
Michael.



--
Info:
To unsubscribe send a mail to [EMAIL PROTECTED] with "unsubscribe linux-dvb" as subject.

Reply via email to