Nicolas STRANSKY wrote:
Hi all,
I've encountered a problem when trying to use a SATA card with a Silicon
Image SIL 3112 host controller chip. When inserting the module, the
kernel made this error:
Hello, Nicolas.
One of the most annoying problem with traditional IDE interface is that
the controller doesn't have 'hey! I'm the needy one!' flag. So, when an
IRQ is raised, there is no way whether the controller is actually
raising the interrupt or not. libata (and probably other IDE drivers
too) works around this by determining when to expect interrupt and
handle the interrupt according to HSM.
Under normal circumstances, this usually works, but every now and then
something weird happens and the controller raises IRQ that libata wasn't
expecting, resulting in stuck IRQ and Linux IRQ layer saves its ass by
disabling the IRQ, which is a good thing; otherwise, the whole system
would hang completely.
In your case, the IRQ was in raised state before you loaded the module.
While loading the module, IRQ gets unmasked. As libata hasn't issued
any command yet, it isn't expecting interrupts, so it thinks the
interrupt doesn't belong to it. So, the stuck IRQ and your symptom.
libata is in the way of getting new EH/probing mechanism and the problem
will be resolved. New EH/probing does two things to prevent such things.
* freeze (mask interrupt) the port before requesting IRQ and thaw
(unmask) only after the controller and drives are reset and in known
good state.
* sil3112 family of controllers (and most of other modern SATA
controllers too) actually have the needy flag. New version of sata_sil
will have customized IRQ handler which properly detects and handles
unexpected/spurious interrupts.
New EH/probing will probably included in 2.6.18 but I intend to make
patches against stable series. So, if this problem bugs you, stay tuned.
--
tejun
-
: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html