Mark Lord wrote:
Mark Lord wrote:
Mark Lord wrote:
Tejun,
Since enabling PMP support in sata_mv, there have been some recent
reports of not all drives being found on a PM.
..
Mmmm.. one strange thing from the logs.
sata_mv reports "unexpected device interrupt" in a few places,
and then triggers EH to recover from it.
This could be what is causing the PMP enumerations to partially fail.
I wonder why we're getting interrupts when supposedly idle/polling ?
Did something in libata miss reading ata_status to clear an IRQ ?
..
Here, I've hacked my local copy of sata_mv to NOT trigger EH
when it gets an unexpected device interrupt. This is how the driver
has been for years, until recently.
With this change, all drives on the PM are found (no surprise).
So I guess the questions are:
1. Where are these unexpected interrupts coming from?
The implication is that a command is being issued without NIEN=1,
*or* the ata_status is not being read (to clear the pending IRQ)
before we clear NIEN for a subsequent command.
..
Mmm.. libata looks totally clean there, verified with some printk's
placed in strategic locations.
Perhaps all commands to the PM itself (pmp=15) result in interrupts
on receipt of the response? The PM spec certainly implies this,
and doesn't mention NIEN at all.
I suppose that could be the source of them -- tracing in the driver
suggests that they all happen during/after issue of a PMP read command.
2. What to do about them in the driver?
..
I think by default, I'll just revert to having the driver ignore them,
the same as is done in the default methods in libata-core.c.
So far they do seem harmless in my testing here.
??
--
To unsubscribe from this list: 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