On Mon, 2009-03-02 at 13:39 +0100, Jean Delvare wrote:
> On Sun, 15 Feb 2009 21:41:08 +0100, Jean Delvare wrote:
> > Hi all,
> >
> > Today I have hit the following general protection fault when removing
> > module cx8800:
>
> This has just happened to me again today, with kernel 2.6.28.7. I have
> opened a bug in bugzilla:
>
> http://bugzilla.kernel.org/show_bug.cgi?id=12802
>
I'll try to look at it later today. But right off the bat, I think
here's a problem:
void cx88_ir_stop(struct cx88_core *core, struct cx88_IR *ir)
{
[...]
if (ir->polling) {
del_timer_sync(&ir->timer); <--- Wrong order?
flush_scheduled_work(); <--- Wrong order?
}
}
static void cx88_ir_work(struct work_struct *work)
{
struct cx88_IR *ir = container_of(work, struct cx88_IR, work);
cx88_ir_handle_key(ir);
mod_timer(&ir->timer, jiffies + msecs_to_jiffies(ir->polling));
}
mod_timer() acts like del_timer(); mumble; add_timer(); If there was
any work flushed when stopping the IR, a new timer gets added. That
seems wrong.
Regards,
Andy
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html