Alan Cox says "the irq disable/enable is in the register window on a sparc". Andi Kleen says "when you do restore_flags in a different function you mess up all the register windows".
So never pass the flags word set by spin_lock_irqsave() and brethren to another function (unless it's declared inline. Usually no-one does this, but now you've been warned. Dave Miller can never do anything in a straightforward manner (I can say that, because I have pictures of him and a certain PowerPC maintainer in a compromising position).