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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html