Hello, Jeff.
On 06/26/2010 05:45 AM, Jeff Garzik wrote:
Well, it can indicte the start of cluster of completions, which is the
necessary information anyway. From the second call on, it's a simple
flag test and return. I doubt it will affect anything even w/ high
performance SSDs but please read on.
The point of ata_qc_complete_multiple() is giving libata core layer
better visibility into how commands are being executed, which in turn
allows (continued below)
ata_qc_complete_multiple() call [un]expect_irq() only once by
introducing an internal completion function w/o irq expect handling,
say ata_qc_complete_raw() and making both ata_qc_complete() and
ata_qc_complete_multiple() simple wrapper around it w/ irq expect
handling.
I think we're much better off applying it to all the drivers. IRQ
expecting is very cheap and scalable and there definitely are plenty
of IRQ delivery problems with modern controllers although their
patterns tend to be different from legacy ones. Plus, it will also be
useful for power state predictions.
As I wrote above, I don't think N*unexpect_irq() really matters but
with ata_qc_complete_multiple() conversion, there will only be single
pair of expect/unexpect for each cluster of completions anyway.
Thanks.
--
tejun
--