From: Jeff Garzik <jgarzik@pobox.com>
To: Tejun Heo <htejun@gmail.com>
Cc: linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org,
Ethan Chen <thanatoz@ucla.edu>,
Carlos Pardo <Carlos.Pardo@siliconimage.com>
Subject: Re: [PATCH] sata_sil: improved interrupt handling
Date: Sun, 04 Dec 2005 14:30:04 -0500 [thread overview]
Message-ID: <439343BC.902@pobox.com> (raw)
In-Reply-To: <439319ED.8050303@gmail.com>
Tejun Heo wrote:
> Hi, Jeff.
>
> Jeff Garzik wrote:
>
>> Just committed the following to the 'sii-irq' branch of libata-dev.git,
>> and verified it on an Adaptec 1210SA (3112).
>>
>> Haven't decided whether I will push it upstream or not, but I think I
>> will. It does a bit better job of handling handling errors, and should
>> be more efficient (less CPU usage) than the standard ATA interrupt
>> handler as well.
>>
>> For users seeing sata_sil problems, this may make them happy.
>>
>
> This patch doesn't make any difference on my sil3114 controller. I'll
> write about it in the m15w thread.
"doesn't make any difference" I will interpret to mean there are no
regressions.
> Also, this patch doesn't implement proper handling of PIO protocols and
> thus breaks ALL branch.
PIO should work fine, modulo the obvious changes for ATA_FLAG_NOINTR
disappearance.
> It seems to me that the changes made by the new interrupt handler is not
> very sil3112 specific. Is there any reason this change is sil3112
> specific?
There is nothing 3112-specific about this new code.
>> commit b6abf7755a79383f0e5f108d23a0394f156c54c1
>> Author: Jeff Garzik <jgarzik@pobox.com>
>> Date: Sat Dec 3 00:30:57 2005 -0500
>>
>> [libata sata_sil] improved interrupt handling
>>
>> drivers/scsi/sata_sil.c | 118
>> +++++++++++++++++++++++++++++++++++++++++++++++-
>> 1 files changed, 117 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c
>> index 3609186..37398a5 100644
>> --- a/drivers/scsi/sata_sil.c
>> +++ b/drivers/scsi/sata_sil.c
>> @@ -85,6 +85,7 @@ static void sil_dev_config(struct ata_po
>> static u32 sil_scr_read (struct ata_port *ap, unsigned int sc_reg);
>> static void sil_scr_write (struct ata_port *ap, unsigned int sc_reg,
>> u32 val);
>> static void sil_post_set_mode (struct ata_port *ap);
>> +static irqreturn_t sil_irq (int irq, void *dev_instance, struct
>> pt_regs *regs);
>>
>>
>> static const struct pci_device_id sil_pci_tbl[] = {
>> @@ -167,7 +168,7 @@ static const struct ata_port_operations
>> .qc_prep = ata_qc_prep,
>> .qc_issue = ata_qc_issue_prot,
>> .eng_timeout = ata_eng_timeout,
>> - .irq_handler = ata_interrupt,
>> + .irq_handler = sil_irq,
>> .irq_clear = ata_bmdma_irq_clear,
>> .scr_read = sil_scr_read,
>> .scr_write = sil_scr_write,
>> @@ -233,6 +234,121 @@ MODULE_DEVICE_TABLE(pci, sil_pci_tbl);
>> MODULE_VERSION(DRV_VERSION);
>>
>>
>> +static inline void sil_port_irq(struct ata_port *ap, void __iomem *mmio,
>> + u8 dma_stat, u8 dma_stat_mask)
>> +{
>> + struct ata_queued_cmd *qc = NULL;
>> + unsigned int err_mask = AC_ERR_OTHER;
>> + int complete = 1;
>> + u8 dev_stat;
>> +
>> + /* Exit now, if port or port's irqs are disabled */
>> + if (ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR)) {
>> + complete = 0;
>> + goto out;
>> + }
>
>
> Hmmm... By performing this test here, we end up reading bmdma status
> registers of all ports everytime an interrupt occurs. Is this to
> prevent screaming IRQ problem?
That's the preferred way to handle interrupts on this hardware. Normal
ATA is broken due to the lack of a way to ask "did I receive an
interrupt?" without unduly affecting state. 311x, like AHCI, sata_sil24
and other hardware, provides a method to easily determine if a PCI
interrupt is owned by the hardware or not.
The code should eliminate all screaming interrupt problems, yes.
As an aside, 3114 should use a single 32-bit read of the Interrupt
Summary register, rather than the four separate 8-bit reads that this
code does.
Jeff
next prev parent reply other threads:[~2005-12-04 19:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-12-03 5:41 [PATCH] sata_sil: improved interrupt handling Jeff Garzik
2005-12-04 16:31 ` Tejun Heo
2005-12-04 19:30 ` Jeff Garzik [this message]
2005-12-05 6:36 ` Tejun Heo
2005-12-05 18:36 ` Jeff Garzik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=439343BC.902@pobox.com \
--to=jgarzik@pobox.com \
--cc=Carlos.Pardo@siliconimage.com \
--cc=htejun@gmail.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=thanatoz@ucla.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.