From: Mark Lord <liml@rtr.ca>
To: Tejun Heo <htejun@gmail.com>
Cc: albertl@mail.com, Alan Cox <alan@lxorguk.ukuu.org.uk>,
Jeff Garzik <jeff@garzik.org>,
Linux IDE <linux-ide@vger.kernel.org>,
Doug Maxey <dwm@maxeymade.com>,
Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Subject: Re: [PATCH 8/8] libata: ack more unsolicited INTRQ
Date: Thu, 17 May 2007 11:42:36 -0400 [thread overview]
Message-ID: <464C77EC.10607@rtr.ca> (raw)
In-Reply-To: <464C1FA7.20503@gmail.com>
Tejun Heo wrote:
>
> I don't really know how to fix this. It seems the only options are 1.
> disable_irq() as IDE does which sucks if the IRQ is shared 2. doing PIO
> transfers with local IRQ disabled and spinlock locked which makes the
> system stutter like hell. Oh crap, all this because we don't have
> simple reliable IRQ pending bit. :-(
>
> Oh, BTW, we do have reliable IRQ pending bit on ata_piix's. The IRQ bit
> in BMDMA status acts as a IRQ pending even if the command isn't a DMA
> one. This is why we clear BMDMA IRQ even after nodata or PIO commands,
> so we can probably solve the problem nicely for ata_piix by calling
> ata_port_freeze() if IRQ is received while ATA_PFLAG_HSM_WQ is set.
> sata_sil also has reliable IRQ pending bit.
I'm not sure if this suggestion is the same as what you just described,
but what we can do here is just set a flag before the PIO block,
and clear it again after PIO completes.
The libata IRQ handler for that channel would then check for this flag
on entry, before touching any chipset registers, and if it sees the flag
then it should self-disable the IRQ and return immediately.
The PIO block would then also have to know to re-enable the IRQ on completion.
This way, we only disable the IRQ when it is actually necessary
for the specific hardware at run-time.
Cheers
next prev parent reply other threads:[~2007-05-17 15:42 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-16 7:03 [PATCH/RFC 0/8] libata: delegate irq driven pio to workqueue (take 2) Albert Lee
2007-05-16 7:09 ` [PATCH 1/8] libata: fix the ata_altstatus() in ata_hsm_qc_complete() Albert Lee
2007-05-16 7:11 ` [PATCH 2/8] libata: move ata_altstatus() out from ata_hsm_move() to the pio data xfer functions Albert Lee
2007-05-16 7:13 ` [PATCH 3/8] libata: change the state after "PIO data-in" to HSM_ST_IDLE instead of HSM_ST_LAST Albert Lee
2007-05-16 7:18 ` [PATCH 4/8] libata: move and reduce locking to the pio data xfer functions Albert Lee
2007-05-16 7:20 ` [PATCH 5/8] libata: ack unsolicited INTRQ when polling Albert Lee
2007-05-16 7:23 ` [PATCH 6/8] libata: delegate irq driven pio to workqueue Albert Lee
2007-05-16 7:24 ` [PATCH 7/8] libata: fix ata_port_flush_task() for irq pio delegation Albert Lee
2007-05-16 7:29 ` [PATCH 8/8] libata: ack more unsolicited INTRQ Albert Lee
2007-05-16 13:02 ` Alan Cox
2007-05-17 8:59 ` Albert Lee
2007-05-17 9:25 ` Tejun Heo
2007-05-17 15:42 ` Mark Lord [this message]
2007-05-17 15:50 ` Tejun Heo
2007-05-17 16:00 ` Alan Cox
2007-05-17 9:28 ` Alan Cox
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=464C77EC.10607@rtr.ca \
--to=liml@rtr.ca \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=albertl@mail.com \
--cc=bzolnier@gmail.com \
--cc=dwm@maxeymade.com \
--cc=htejun@gmail.com \
--cc=jeff@garzik.org \
--cc=linux-ide@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).