If you want to protect some critical section _from_ a fast interrupt,
you should do:
unsigned long flags;
save_flags(flags);
cli();
.. critical code ..
sti();
Shouldn't this sti() be a call to restore_flags(flags) instead?
Leonard