* [PATCH 2/4] libata-core.c: add another IRQ calls
@ 2007-01-16 10:46 Akira Iguchi
0 siblings, 0 replies; 8+ messages in thread
From: Akira Iguchi @ 2007-01-16 10:46 UTC (permalink / raw)
To: linux-ide; +Cc: jeff, arnd, linuxppc-dev, paulus, alan
When enabling IRQ, ap->ops->irq_on is checked.
Because most drivers can use ata_irq_on() as is, this
patch allows ap->ops->irq_on to be NULL.
If it is NULL, ata_irq_on() are used.
Similarly, ap->ops->irq_ack is checked when acknowledging a IRQ.
If it is NULL, ata_irq_ack() are used.
And this patch exports ata_dev_try_classify(). It is used in
pata_scc.c to reduce the code duplication.
This driver has the copy of ata_std_softreset(), which has
low-level accessors and cannot be used as is.
Signed-off-by: Kou Ishizaki <kou.ishizaki@toshiba.co.jp>
Signed-off-by: Akira Iguchi <akira2.iguchi@toshiba.co.jp>
---
--- linux-2.6.20-rc4/drivers/ata/libata-core.c.orig 2007-01-17 01:45:44.000000000 +0900
+++ linux-2.6.20-rc4/drivers/ata/libata-core.c 2007-01-17 02:16:48.000000000 +0900
@@ -767,7 +767,7 @@ unsigned int ata_dev_classify(const stru
* Device type - %ATA_DEV_ATA, %ATA_DEV_ATAPI or %ATA_DEV_NONE.
*/
-static unsigned int
+unsigned int
ata_dev_try_classify(struct ata_port *ap, unsigned int device, u8 *r_err)
{
struct ata_taskfile tf;
@@ -2754,8 +2754,12 @@ void ata_bus_reset(struct ata_port *ap)
ap->device[1].class = ata_dev_try_classify(ap, 1, &err);
/* re-enable interrupts */
- if (ap->ioaddr.ctl_addr) /* FIXME: hack. create a hook instead */
- ata_irq_on(ap);
+ if (ap->ioaddr.ctl_addr) { /* FIXME: hack. create a hook instead */
+ if (ap->ops->irq_on)
+ ap->ops->irq_on(ap);
+ else
+ ata_irq_on(ap);
+ }
/* is double-select really necessary? */
if (ap->device[1].class != ATA_DEV_NONE)
@@ -3149,8 +3153,12 @@ void ata_std_postreset(struct ata_port *
/* re-enable interrupts */
if (!ap->ops->error_handler) {
/* FIXME: hack. create a hook instead */
- if (ap->ioaddr.ctl_addr)
- ata_irq_on(ap);
+ if (ap->ioaddr.ctl_addr) {
+ if (ap->ops->irq_on)
+ ap->ops->irq_on(ap);
+ else
+ ata_irq_on(ap);
+ }
}
/* is double-select really necessary? */
@@ -4329,7 +4337,10 @@ static void ata_hsm_qc_complete(struct a
qc = ata_qc_from_tag(ap, qc->tag);
if (qc) {
if (likely(!(qc->err_mask & AC_ERR_HSM))) {
- ata_irq_on(ap);
+ if (ap->ops->irq_on)
+ ap->ops->irq_on(ap);
+ else
+ ata_irq_on(ap);
ata_qc_complete(qc);
} else
ata_port_freeze(ap);
@@ -4345,7 +4356,10 @@ static void ata_hsm_qc_complete(struct a
} else {
if (in_wq) {
spin_lock_irqsave(ap->lock, flags);
- ata_irq_on(ap);
+ if (ap->ops->irq_on)
+ ap->ops->irq_on(ap);
+ else
+ ata_irq_on(ap);
ata_qc_complete(qc);
spin_unlock_irqrestore(ap->lock, flags);
} else
@@ -5170,7 +5184,10 @@ idle_irq:
#ifdef ATA_IRQ_TRAP
if ((ap->stats.idle_irq % 1000) == 0) {
- ata_irq_ack(ap, 0); /* debug trap */
+ if (ap->ops->irq_ack)
+ ap->ops->irq_ack(ap, 0);
+ else
+ ata_irq_ack(ap, 0); /* debug trap */
ata_port_printk(ap, KERN_WARNING, "irq trap\n");
return 1;
}
@@ -6500,3 +6517,5 @@ EXPORT_SYMBOL_GPL(ata_eh_thaw_port);
EXPORT_SYMBOL_GPL(ata_eh_qc_complete);
EXPORT_SYMBOL_GPL(ata_eh_qc_retry);
EXPORT_SYMBOL_GPL(ata_do_eh);
+EXPORT_SYMBOL_GPL(ata_dev_try_classify);
+EXPORT_SYMBOL_GPL(ata_probe_ent_alloc);
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] libata-core.c: add another IRQ calls
[not found] <200701161046.l0GAk5Go019691@toshiba.co.jp>
@ 2007-01-16 12:03 ` Alan
2007-01-16 22:04 ` Jeff Garzik
0 siblings, 1 reply; 8+ messages in thread
From: Alan @ 2007-01-16 12:03 UTC (permalink / raw)
To: Akira Iguchi; +Cc: jeff, arnd, linuxppc-dev, linux-ide, paulus
On Tue, 16 Jan 2007 19:46:14 +0900
Akira Iguchi <akira2.iguchi@toshiba.co.jp> wrote:
> When enabling IRQ, ap->ops->irq_on is checked.
> Because most drivers can use ata_irq_on() as is, this
> patch allows ap->ops->irq_on to be NULL.
> If it is NULL, ata_irq_on() are used.
Acked-by: Alan Cox <alan@redhat.com>
Jeff - at some point we could eliminate a lot of the NULL checks like
these by having the registration code fill in the defaults where
appropriate ?
Alan
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] libata-core.c: add another IRQ calls
2007-01-16 12:03 ` [PATCH 2/4] libata-core.c: add another IRQ calls Alan
@ 2007-01-16 22:04 ` Jeff Garzik
0 siblings, 0 replies; 8+ messages in thread
From: Jeff Garzik @ 2007-01-16 22:04 UTC (permalink / raw)
To: Alan, benh; +Cc: arnd, linuxppc-dev, linux-ide, paulus
Alan wrote:
> Jeff - at some point we could eliminate a lot of the NULL checks like
> these by having the registration code fill in the defaults where
> appropriate ?
libata policy up until this point has been to require all drivers fill
in the hook, either with the commonly-used default, or with their own
variant. Thus, no NULL checks for required hooks, and you get an oops
if you fail this requirement. I like that better than defaults buried
inside libata-core, where it is easier for programmers to forget them.
But actually, it's an open question for the compiler guys whether this
case is preferred:
if (ap->ops->hook)
ap->ops->hook(foo, bar);
else
commonly_used_default(foo, bar);
or this:
ap->ops->hook(foo, bar);
With advanced branch prediction in modern CPUs, ISTR the first case may
be worth considering, even with the branch.
If the second case is preferred, then Akira should make a bombing run
through each driver, applying the patch
+ .irq_on = ata_irq_on
No NULL checks or registration code bother, in that case.
Comments welcome...
Jeff
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] libata-core.c: add another IRQ calls
@ 2007-01-17 9:24 Mikael Pettersson
2007-01-17 16:49 ` Jeff Garzik
0 siblings, 1 reply; 8+ messages in thread
From: Mikael Pettersson @ 2007-01-17 9:24 UTC (permalink / raw)
To: alan, benh, jeff; +Cc: arnd, linuxppc-dev, linux-ide, paulus
On Tue, 16 Jan 2007 17:04:27 -0500, Jeff Garzik wrote:
>Alan wrote:
>> Jeff - at some point we could eliminate a lot of the NULL checks like
>> these by having the registration code fill in the defaults where
>> appropriate ?
>
>libata policy up until this point has been to require all drivers fill
>in the hook, either with the commonly-used default, or with their own
>variant. Thus, no NULL checks for required hooks, and you get an oops
>if you fail this requirement. I like that better than defaults buried
>inside libata-core, where it is easier for programmers to forget them.
>
>But actually, it's an open question for the compiler guys whether this
>case is preferred:
>
> if (ap->ops->hook)
> ap->ops->hook(foo, bar);
> else
> commonly_used_default(foo, bar);
>
>or this:
>
> ap->ops->hook(foo, bar);
>
>With advanced branch prediction in modern CPUs, ISTR the first case may
>be worth considering, even with the branch.
Indirect function calls incur at least two main costs:
- the 'call *' instruction itself suffers from poor branch
prediction unless the HW is clever and the call patterns
are highly biased -- most machines have worse branch
predictors for indirect jumps than for direct jumps
- the compiler must generate code for setting up parameters
and spilling the caller's registers, and for reloading the
caller's registers after the call
If there is a highly common case, the code for that case
is available, and the code is cheap to execute (doesn't
require too many additional variables), then having an
explicit test + inline code is preferred. If any of these
conditions isn't met, then I wouldn't bother converting
the call to the if/inline/call combo.
There are compilers for OOP languages that routinely use
rewrites like the one above in order to optimise method calls.
/Mikael
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] libata-core.c: add another IRQ calls
2007-01-17 9:24 Mikael Pettersson
@ 2007-01-17 16:49 ` Jeff Garzik
2007-01-17 20:31 ` Mikael Pettersson
0 siblings, 1 reply; 8+ messages in thread
From: Jeff Garzik @ 2007-01-17 16:49 UTC (permalink / raw)
To: Mikael Pettersson; +Cc: arnd, linuxppc-dev, linux-ide, paulus, alan
Mikael Pettersson wrote:
> If there is a highly common case, the code for that case
> is available, and the code is cheap to execute (doesn't
> require too many additional variables), then having an
> explicit test + inline code is preferred. If any of these
> conditions isn't met, then I wouldn't bother converting
> the call to the if/inline/call combo.
To be a bit more specific, the branch being taken, or not, depends on
the system setup. For example, in sata_promise's case, with no other
SATA controllers in use,
if (ap->ops->irq_on)
ap->ops->irq_on(ap);
else
ata_irq_on(ap);
the direct function call will ALWAYS be called. But if you had a weird
system with both Cell and Promise PDC203xx, then the branch is dependent
on whether the activity comes from the Cell SATA or Promise SATA.
So it's highly predictable in a great many cases.
And it should be noted that it is a direct function call not inline,
thus its if/indirect/direct not if/indirect/inline.
Does that change the answer at all?
Jeff
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] libata-core.c: add another IRQ calls
2007-01-17 16:49 ` Jeff Garzik
@ 2007-01-17 20:31 ` Mikael Pettersson
2007-01-18 0:55 ` Akira Iguchi
[not found] ` <200701180055.l0I0tl6M021051@toshiba.co.jp>
0 siblings, 2 replies; 8+ messages in thread
From: Mikael Pettersson @ 2007-01-17 20:31 UTC (permalink / raw)
To: Jeff Garzik
Cc: Mikael Pettersson, arnd, linuxppc-dev, linux-ide, paulus, alan
Jeff Garzik writes:
> Mikael Pettersson wrote:
> > If there is a highly common case, the code for that case
> > is available, and the code is cheap to execute (doesn't
> > require too many additional variables), then having an
> > explicit test + inline code is preferred. If any of these
> > conditions isn't met, then I wouldn't bother converting
> > the call to the if/inline/call combo.
>
>
> To be a bit more specific, the branch being taken, or not, depends on
> the system setup. For example, in sata_promise's case, with no other
> SATA controllers in use,
>
> if (ap->ops->irq_on)
> ap->ops->irq_on(ap);
> else
> ata_irq_on(ap);
>
> the direct function call will ALWAYS be called. But if you had a weird
> system with both Cell and Promise PDC203xx, then the branch is dependent
> on whether the activity comes from the Cell SATA or Promise SATA.
>
> So it's highly predictable in a great many cases.
>
> And it should be noted that it is a direct function call not inline,
> thus its if/indirect/direct not if/indirect/inline.
>
> Does that change the answer at all?
The real benefits from identifying a common case is to inline
the code for it. So the fact that the common case is still a
full-blown function call here and not inline code means that
there's much less benefit from rewriting an indirect call as
an if/indirect/direct sequence.
There is some branch prediction benefit from having
if/call-indirect/call-direct-to-common-case instead of a
single call-indirect, but only if the common case really is
much more common than other cases, or if the other cases
are limited to just one (so there's two common cases).
I wouldn't change a call-indirect to if/call-indirect/call-direct
unless it's on a very hot path with a known dominant common case.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] libata-core.c: add another IRQ calls
2007-01-17 20:31 ` Mikael Pettersson
@ 2007-01-18 0:55 ` Akira Iguchi
[not found] ` <200701180055.l0I0tl6M021051@toshiba.co.jp>
1 sibling, 0 replies; 8+ messages in thread
From: Akira Iguchi @ 2007-01-18 0:55 UTC (permalink / raw)
To: Mikael Pettersson
Cc: Jeff Garzik, arnd, linuxppc-dev, linux-ide, paulus, alan
>The real benefits from identifying a common case is to inline
>the code for it. So the fact that the common case is still a
>full-blown function call here and not inline code means that
>there's much less benefit from rewriting an indirect call as
>an if/indirect/direct sequence.
According to your comment, this patch adds IRQ calls (irq_on, irq_ack)
to each driver and always uses these indirect calls.
For irq_on, most drivers use ata_irq_on(). Some drivers
(ahci.c, sata_sil24.c) use ata_dummy_irq_on() because they
don't have either explicit or implicit assignment (ex: ata_pci_init_one)
of ctl_addr.
For irq_ack, ata_irq_ack() is used.
Signed-off-by: Kou Ishizaki <kou.ishizaki@toshiba.co.jp>
Signed-off-by: Akira Iguchi <akira2.iguchi@toshiba.co.jp>
---
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/ahci.c linux-2.6.20-rc4.mod/drivers/ata/ahci.c
--- linux-2.6.20-rc4/drivers/ata/ahci.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/ahci.c 2007-01-17 23:07:11.000000000 +0900
@@ -261,6 +261,8 @@ static const struct ata_port_operations
.irq_handler = ahci_interrupt,
.irq_clear = ahci_irq_clear,
+ .irq_on = ata_dummy_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = ahci_scr_read,
.scr_write = ahci_scr_write,
@@ -292,6 +294,8 @@ static const struct ata_port_operations
.irq_handler = ahci_interrupt,
.irq_clear = ahci_irq_clear,
+ .irq_on = ata_dummy_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = ahci_scr_read,
.scr_write = ahci_scr_write,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/ata_generic.c linux-2.6.20-rc4.mod/drivers/ata/ata_generic.c
--- linux-2.6.20-rc4/drivers/ata/ata_generic.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/ata_generic.c 2007-01-17 21:14:41.000000000 +0900
@@ -148,6 +148,8 @@ static struct ata_port_operations generi
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/ata_piix.c linux-2.6.20-rc4.mod/drivers/ata/ata_piix.c
--- linux-2.6.20-rc4/drivers/ata/ata_piix.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/ata_piix.c 2007-01-17 23:07:11.000000000 +0900
@@ -306,6 +306,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -339,6 +341,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -369,6 +373,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/libata-core.c linux-2.6.20-rc4.mod/drivers/ata/libata-core.c
--- linux-2.6.20-rc4/drivers/ata/libata-core.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/libata-core.c 2007-01-17 22:28:05.000000000 +0900
@@ -2754,8 +2754,7 @@ void ata_bus_reset(struct ata_port *ap)
ap->device[1].class = ata_dev_try_classify(ap, 1, &err);
/* re-enable interrupts */
- if (ap->ioaddr.ctl_addr) /* FIXME: hack. create a hook instead */
- ata_irq_on(ap);
+ ap->ops->irq_on(ap);
/* is double-select really necessary? */
if (ap->device[1].class != ATA_DEV_NONE)
@@ -3147,11 +3146,8 @@ void ata_std_postreset(struct ata_port *
sata_scr_write(ap, SCR_ERROR, serror);
/* re-enable interrupts */
- if (!ap->ops->error_handler) {
- /* FIXME: hack. create a hook instead */
- if (ap->ioaddr.ctl_addr)
- ata_irq_on(ap);
- }
+ if (!ap->ops->error_handler)
+ ap->ops->irq_on(ap);
/* is double-select really necessary? */
if (classes[0] != ATA_DEV_NONE)
@@ -4329,7 +4325,7 @@ static void ata_hsm_qc_complete(struct a
qc = ata_qc_from_tag(ap, qc->tag);
if (qc) {
if (likely(!(qc->err_mask & AC_ERR_HSM))) {
- ata_irq_on(ap);
+ ap->ops->irq_on(ap);
ata_qc_complete(qc);
} else
ata_port_freeze(ap);
@@ -4345,7 +4341,7 @@ static void ata_hsm_qc_complete(struct a
} else {
if (in_wq) {
spin_lock_irqsave(ap->lock, flags);
- ata_irq_on(ap);
+ ap->ops->irq_on(ap);
ata_qc_complete(qc);
spin_unlock_irqrestore(ap->lock, flags);
} else
@@ -5170,7 +5166,7 @@ idle_irq:
#ifdef ATA_IRQ_TRAP
if ((ap->stats.idle_irq % 1000) == 0) {
- ata_irq_ack(ap, 0); /* debug trap */
+ ap->ops->irq_ack(ap, 0); /* debug trap */
ata_port_printk(ap, KERN_WARNING, "irq trap\n");
return 1;
}
@@ -6500,3 +6496,4 @@ EXPORT_SYMBOL_GPL(ata_eh_thaw_port);
EXPORT_SYMBOL_GPL(ata_eh_qc_complete);
EXPORT_SYMBOL_GPL(ata_eh_qc_retry);
EXPORT_SYMBOL_GPL(ata_do_eh);
+EXPORT_SYMBOL_GPL(ata_irq_on);
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/libata-sff.c linux-2.6.20-rc4.mod/drivers/ata/libata-sff.c
--- linux-2.6.20-rc4/drivers/ata/libata-sff.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/libata-sff.c 2007-01-17 21:14:41.000000000 +0900
@@ -724,8 +724,7 @@ void ata_bmdma_thaw(struct ata_port *ap)
/* clear & re-enable interrupts */
ata_chk_status(ap);
ap->ops->irq_clear(ap);
- if (ap->ioaddr.ctl_addr) /* FIXME: hack. create a hook instead */
- ata_irq_on(ap);
+ ap->ops->irq_on(ap);
}
/**
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_ali.c linux-2.6.20-rc4.mod/drivers/ata/pata_ali.c
--- linux-2.6.20-rc4/drivers/ata/pata_ali.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_ali.c 2007-01-17 21:14:41.000000000 +0900
@@ -374,6 +374,8 @@ static struct ata_port_operations ali_ea
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -415,6 +417,8 @@ static struct ata_port_operations ali_20
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -453,6 +457,8 @@ static struct ata_port_operations ali_c2
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -490,6 +496,8 @@ static struct ata_port_operations ali_c5
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_amd.c linux-2.6.20-rc4.mod/drivers/ata/pata_amd.c
--- linux-2.6.20-rc4/drivers/ata/pata_amd.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_amd.c 2007-01-17 21:14:41.000000000 +0900
@@ -366,6 +366,8 @@ static struct ata_port_operations amd33_
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -400,6 +402,8 @@ static struct ata_port_operations amd66_
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -434,6 +438,8 @@ static struct ata_port_operations amd100
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -468,6 +474,8 @@ static struct ata_port_operations amd133
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -502,6 +510,8 @@ static struct ata_port_operations nv100_
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -536,6 +546,8 @@ static struct ata_port_operations nv133_
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_artop.c linux-2.6.20-rc4.mod/drivers/ata/pata_artop.c
--- linux-2.6.20-rc4/drivers/ata/pata_artop.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_artop.c 2007-01-17 21:14:41.000000000 +0900
@@ -345,6 +345,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -377,6 +379,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_atiixp.c linux-2.6.20-rc4.mod/drivers/ata/pata_atiixp.c
--- linux-2.6.20-rc4/drivers/ata/pata_atiixp.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_atiixp.c 2007-01-17 21:14:41.000000000 +0900
@@ -249,6 +249,8 @@ static struct ata_port_operations atiixp
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_cmd64x.c linux-2.6.20-rc4.mod/drivers/ata/pata_cmd64x.c
--- linux-2.6.20-rc4/drivers/ata/pata_cmd64x.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_cmd64x.c 2007-01-17 21:14:41.000000000 +0900
@@ -308,6 +308,8 @@ static struct ata_port_operations cmd64x
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -342,6 +344,8 @@ static struct ata_port_operations cmd646
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -376,6 +380,8 @@ static struct ata_port_operations cmd648
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_cs5520.c linux-2.6.20-rc4.mod/drivers/ata/pata_cs5520.c
--- linux-2.6.20-rc4/drivers/ata/pata_cs5520.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_cs5520.c 2007-01-17 21:14:41.000000000 +0900
@@ -197,6 +197,8 @@ static struct ata_port_operations cs5520
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_cs5530.c linux-2.6.20-rc4.mod/drivers/ata/pata_cs5530.c
--- linux-2.6.20-rc4/drivers/ata/pata_cs5530.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_cs5530.c 2007-01-17 21:14:41.000000000 +0900
@@ -214,6 +214,8 @@ static struct ata_port_operations cs5530
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_cs5535.c linux-2.6.20-rc4.mod/drivers/ata/pata_cs5535.c
--- linux-2.6.20-rc4/drivers/ata/pata_cs5535.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_cs5535.c 2007-01-17 21:14:41.000000000 +0900
@@ -218,6 +218,8 @@ static struct ata_port_operations cs5535
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_cypress.c linux-2.6.20-rc4.mod/drivers/ata/pata_cypress.c
--- linux-2.6.20-rc4/drivers/ata/pata_cypress.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_cypress.c 2007-01-17 21:14:41.000000000 +0900
@@ -169,6 +169,8 @@ static struct ata_port_operations cy82c6
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_efar.c linux-2.6.20-rc4.mod/drivers/ata/pata_efar.c
--- linux-2.6.20-rc4/drivers/ata/pata_efar.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_efar.c 2007-01-17 21:14:41.000000000 +0900
@@ -265,6 +265,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_hpt366.c linux-2.6.20-rc4.mod/drivers/ata/pata_hpt366.c
--- linux-2.6.20-rc4/drivers/ata/pata_hpt366.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_hpt366.c 2007-01-17 21:14:41.000000000 +0900
@@ -375,6 +375,8 @@ static struct ata_port_operations hpt366
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_hpt37x.c linux-2.6.20-rc4.mod/drivers/ata/pata_hpt37x.c
--- linux-2.6.20-rc4/drivers/ata/pata_hpt37x.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_hpt37x.c 2007-01-17 23:07:11.000000000 +0900
@@ -811,6 +811,8 @@ static struct ata_port_operations hpt370
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -850,6 +852,8 @@ static struct ata_port_operations hpt370
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -890,6 +894,8 @@ static struct ata_port_operations hpt372
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -930,6 +936,8 @@ static struct ata_port_operations hpt374
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_hpt3x2n.c linux-2.6.20-rc4.mod/drivers/ata/pata_hpt3x2n.c
--- linux-2.6.20-rc4/drivers/ata/pata_hpt3x2n.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_hpt3x2n.c 2007-01-17 21:14:41.000000000 +0900
@@ -377,6 +377,8 @@ static struct ata_port_operations hpt3x2
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_hpt3x3.c linux-2.6.20-rc4.mod/drivers/ata/pata_hpt3x3.c
--- linux-2.6.20-rc4/drivers/ata/pata_hpt3x3.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_hpt3x3.c 2007-01-17 21:14:41.000000000 +0900
@@ -152,6 +152,8 @@ static struct ata_port_operations hpt3x3
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_isapnp.c linux-2.6.20-rc4.mod/drivers/ata/pata_isapnp.c
--- linux-2.6.20-rc4/drivers/ata/pata_isapnp.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_isapnp.c 2007-01-17 21:14:41.000000000 +0900
@@ -57,6 +57,8 @@ static struct ata_port_operations isapnp
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_it821x.c linux-2.6.20-rc4.mod/drivers/ata/pata_it821x.c
--- linux-2.6.20-rc4/drivers/ata/pata_it821x.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_it821x.c 2007-01-17 21:14:41.000000000 +0900
@@ -708,6 +708,8 @@ static struct ata_port_operations it821x
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = it821x_port_start,
.port_stop = it821x_port_stop,
@@ -744,6 +746,8 @@ static struct ata_port_operations it821x
.irq_clear = ata_bmdma_irq_clear,
.irq_handler = ata_interrupt,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = it821x_port_start,
.port_stop = it821x_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_ixp4xx_cf.c linux-2.6.20-rc4.mod/drivers/ata/pata_ixp4xx_cf.c
--- linux-2.6.20-rc4/drivers/ata/pata_ixp4xx_cf.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_ixp4xx_cf.c 2007-01-17 21:14:41.000000000 +0900
@@ -138,6 +138,8 @@ static struct ata_port_operations ixp4xx
.irq_handler = ata_interrupt,
.irq_clear = ixp4xx_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_jmicron.c linux-2.6.20-rc4.mod/drivers/ata/pata_jmicron.c
--- linux-2.6.20-rc4/drivers/ata/pata_jmicron.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_jmicron.c 2007-01-17 21:14:41.000000000 +0900
@@ -166,6 +166,8 @@ static const struct ata_port_operations
/* IRQ-related hooks */
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
/* Generic PATA PCI ATA helpers */
.port_start = ata_port_start,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_legacy.c linux-2.6.20-rc4.mod/drivers/ata/pata_legacy.c
--- linux-2.6.20-rc4/drivers/ata/pata_legacy.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_legacy.c 2007-01-17 21:14:41.000000000 +0900
@@ -166,6 +166,8 @@ static struct ata_port_operations simple
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -191,6 +193,8 @@ static struct ata_port_operations legacy
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -301,6 +305,8 @@ static struct ata_port_operations pdc202
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -353,6 +359,8 @@ static struct ata_port_operations ht6560
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -416,6 +424,8 @@ static struct ata_port_operations ht6560
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -534,6 +544,8 @@ static struct ata_port_operations opti82
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -664,6 +676,8 @@ static struct ata_port_operations opti82
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_marvell.c linux-2.6.20-rc4.mod/drivers/ata/pata_marvell.c
--- linux-2.6.20-rc4/drivers/ata/pata_marvell.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_marvell.c 2007-01-17 21:14:41.000000000 +0900
@@ -134,6 +134,8 @@ static const struct ata_port_operations
/* Timeout handling */
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
/* Generic PATA PCI ATA helpers */
.port_start = ata_port_start,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_mpiix.c linux-2.6.20-rc4.mod/drivers/ata/pata_mpiix.c
--- linux-2.6.20-rc4/drivers/ata/pata_mpiix.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_mpiix.c 2007-01-17 21:14:41.000000000 +0900
@@ -192,6 +192,8 @@ static struct ata_port_operations mpiix_
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_netcell.c linux-2.6.20-rc4.mod/drivers/ata/pata_netcell.c
--- linux-2.6.20-rc4/drivers/ata/pata_netcell.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_netcell.c 2007-01-17 21:14:41.000000000 +0900
@@ -94,6 +94,8 @@ static const struct ata_port_operations
/* IRQ-related hooks */
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
/* Generic PATA PCI ATA helpers */
.port_start = ata_port_start,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_ns87410.c linux-2.6.20-rc4.mod/drivers/ata/pata_ns87410.c
--- linux-2.6.20-rc4/drivers/ata/pata_ns87410.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_ns87410.c 2007-01-17 21:14:41.000000000 +0900
@@ -183,6 +183,8 @@ static struct ata_port_operations ns8741
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_oldpiix.c linux-2.6.20-rc4.mod/drivers/ata/pata_oldpiix.c
--- linux-2.6.20-rc4/drivers/ata/pata_oldpiix.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_oldpiix.c 2007-01-17 21:14:41.000000000 +0900
@@ -263,6 +263,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_opti.c linux-2.6.20-rc4.mod/drivers/ata/pata_opti.c
--- linux-2.6.20-rc4/drivers/ata/pata_opti.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_opti.c 2007-01-17 21:14:41.000000000 +0900
@@ -209,6 +209,8 @@ static struct ata_port_operations opti_p
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_optidma.c linux-2.6.20-rc4.mod/drivers/ata/pata_optidma.c
--- linux-2.6.20-rc4/drivers/ata/pata_optidma.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_optidma.c 2007-01-17 21:14:41.000000000 +0900
@@ -393,6 +393,8 @@ static struct ata_port_operations optidm
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -428,6 +430,8 @@ static struct ata_port_operations optipl
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_pcmcia.c linux-2.6.20-rc4.mod/drivers/ata/pata_pcmcia.c
--- linux-2.6.20-rc4/drivers/ata/pata_pcmcia.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_pcmcia.c 2007-01-17 21:14:41.000000000 +0900
@@ -92,6 +92,8 @@ static struct ata_port_operations pcmcia
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_pdc2027x.c linux-2.6.20-rc4.mod/drivers/ata/pata_pdc2027x.c
--- linux-2.6.20-rc4/drivers/ata/pata_pdc2027x.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_pdc2027x.c 2007-01-17 21:14:41.000000000 +0900
@@ -169,6 +169,8 @@ static struct ata_port_operations pdc202
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -203,6 +205,8 @@ static struct ata_port_operations pdc202
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_pdc202xx_old.c linux-2.6.20-rc4.mod/drivers/ata/pata_pdc202xx_old.c
--- linux-2.6.20-rc4/drivers/ata/pata_pdc202xx_old.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_pdc202xx_old.c 2007-01-17 21:14:41.000000000 +0900
@@ -301,6 +301,8 @@ static struct ata_port_operations pdc202
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -335,6 +337,8 @@ static struct ata_port_operations pdc202
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_platform.c linux-2.6.20-rc4.mod/drivers/ata/pata_platform.c
--- linux-2.6.20-rc4/drivers/ata/pata_platform.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_platform.c 2007-01-17 21:14:41.000000000 +0900
@@ -103,6 +103,8 @@ static struct ata_port_operations pata_p
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_qdi.c linux-2.6.20-rc4.mod/drivers/ata/pata_qdi.c
--- linux-2.6.20-rc4/drivers/ata/pata_qdi.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_qdi.c 2007-01-17 21:14:41.000000000 +0900
@@ -189,6 +189,8 @@ static struct ata_port_operations qdi650
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -217,6 +219,8 @@ static struct ata_port_operations qdi658
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_radisys.c linux-2.6.20-rc4.mod/drivers/ata/pata_radisys.c
--- linux-2.6.20-rc4/drivers/ata/pata_radisys.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_radisys.c 2007-01-17 21:14:41.000000000 +0900
@@ -259,6 +259,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_rz1000.c linux-2.6.20-rc4.mod/drivers/ata/pata_rz1000.c
--- linux-2.6.20-rc4/drivers/ata/pata_rz1000.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_rz1000.c 2007-01-17 21:14:41.000000000 +0900
@@ -122,6 +122,8 @@ static struct ata_port_operations rz1000
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_sc1200.c linux-2.6.20-rc4.mod/drivers/ata/pata_sc1200.c
--- linux-2.6.20-rc4/drivers/ata/pata_sc1200.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_sc1200.c 2007-01-17 21:14:41.000000000 +0900
@@ -224,6 +224,8 @@ static struct ata_port_operations sc1200
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_serverworks.c linux-2.6.20-rc4.mod/drivers/ata/pata_serverworks.c
--- linux-2.6.20-rc4/drivers/ata/pata_serverworks.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_serverworks.c 2007-01-17 21:14:41.000000000 +0900
@@ -359,6 +359,8 @@ static struct ata_port_operations server
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -394,6 +396,8 @@ static struct ata_port_operations server
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_sil680.c linux-2.6.20-rc4.mod/drivers/ata/pata_sil680.c
--- linux-2.6.20-rc4/drivers/ata/pata_sil680.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_sil680.c 2007-01-17 21:14:41.000000000 +0900
@@ -256,6 +256,8 @@ static struct ata_port_operations sil680
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_sis.c linux-2.6.20-rc4.mod/drivers/ata/pata_sis.c
--- linux-2.6.20-rc4/drivers/ata/pata_sis.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_sis.c 2007-01-17 21:14:41.000000000 +0900
@@ -577,6 +577,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -610,6 +612,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -644,6 +648,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -677,6 +683,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -710,6 +718,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_sl82c105.c linux-2.6.20-rc4.mod/drivers/ata/pata_sl82c105.c
--- linux-2.6.20-rc4/drivers/ata/pata_sl82c105.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_sl82c105.c 2007-01-17 21:14:41.000000000 +0900
@@ -266,6 +266,8 @@ static struct ata_port_operations sl82c1
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_triflex.c linux-2.6.20-rc4.mod/drivers/ata/pata_triflex.c
--- linux-2.6.20-rc4/drivers/ata/pata_triflex.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_triflex.c 2007-01-17 21:14:41.000000000 +0900
@@ -225,6 +225,8 @@ static struct ata_port_operations trifle
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_via.c linux-2.6.20-rc4.mod/drivers/ata/pata_via.c
--- linux-2.6.20-rc4/drivers/ata/pata_via.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_via.c 2007-01-17 21:14:41.000000000 +0900
@@ -336,6 +336,8 @@ static struct ata_port_operations via_po
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -371,6 +373,8 @@ static struct ata_port_operations via_po
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pata_winbond.c linux-2.6.20-rc4.mod/drivers/ata/pata_winbond.c
--- linux-2.6.20-rc4/drivers/ata/pata_winbond.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pata_winbond.c 2007-01-17 21:14:41.000000000 +0900
@@ -158,6 +158,8 @@ static struct ata_port_operations winbon
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/pdc_adma.c linux-2.6.20-rc4.mod/drivers/ata/pdc_adma.c
--- linux-2.6.20-rc4/drivers/ata/pdc_adma.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/pdc_adma.c 2007-01-17 21:14:41.000000000 +0900
@@ -170,6 +170,8 @@ static const struct ata_port_operations
.data_xfer = ata_mmio_data_xfer,
.irq_handler = adma_intr,
.irq_clear = adma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = adma_port_start,
.port_stop = adma_port_stop,
.host_stop = adma_host_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_mv.c linux-2.6.20-rc4.mod/drivers/ata/sata_mv.c
--- linux-2.6.20-rc4/drivers/ata/sata_mv.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_mv.c 2007-01-17 23:07:11.000000000 +0900
@@ -412,6 +412,8 @@ static const struct ata_port_operations
.irq_handler = mv_interrupt,
.irq_clear = mv_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = mv5_scr_read,
.scr_write = mv5_scr_write,
@@ -440,6 +442,8 @@ static const struct ata_port_operations
.irq_handler = mv_interrupt,
.irq_clear = mv_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = mv_scr_read,
.scr_write = mv_scr_write,
@@ -468,6 +472,8 @@ static const struct ata_port_operations
.irq_handler = mv_interrupt,
.irq_clear = mv_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = mv_scr_read,
.scr_write = mv_scr_write,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_nv.c linux-2.6.20-rc4.mod/drivers/ata/sata_nv.c
--- linux-2.6.20-rc4/drivers/ata/sata_nv.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_nv.c 2007-01-17 21:14:41.000000000 +0900
@@ -343,6 +343,8 @@ static const struct ata_port_operations
.data_xfer = ata_pio_data_xfer,
.irq_handler = nv_generic_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = nv_scr_read,
.scr_write = nv_scr_write,
.port_start = ata_port_start,
@@ -370,6 +372,8 @@ static const struct ata_port_operations
.data_xfer = ata_pio_data_xfer,
.irq_handler = nv_nf2_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = nv_scr_read,
.scr_write = nv_scr_write,
.port_start = ata_port_start,
@@ -397,6 +401,8 @@ static const struct ata_port_operations
.data_xfer = ata_pio_data_xfer,
.irq_handler = nv_ck804_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = nv_scr_read,
.scr_write = nv_scr_write,
.port_start = ata_port_start,
@@ -425,6 +431,8 @@ static const struct ata_port_operations
.data_xfer = ata_mmio_data_xfer,
.irq_handler = nv_adma_interrupt,
.irq_clear = nv_adma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = nv_scr_read,
.scr_write = nv_scr_write,
.port_start = nv_adma_port_start,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_promise.c linux-2.6.20-rc4.mod/drivers/ata/sata_promise.c
--- linux-2.6.20-rc4/drivers/ata/sata_promise.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_promise.c 2007-01-17 23:07:11.000000000 +0900
@@ -149,6 +149,8 @@ static const struct ata_port_operations
.data_xfer = ata_mmio_data_xfer,
.irq_handler = pdc_interrupt,
.irq_clear = pdc_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = pdc_sata_scr_read,
.scr_write = pdc_sata_scr_write,
@@ -173,6 +175,8 @@ static const struct ata_port_operations
.eng_timeout = pdc_eng_timeout,
.irq_handler = pdc_interrupt,
.irq_clear = pdc_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = pdc_port_start,
.port_stop = pdc_port_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_qstor.c linux-2.6.20-rc4.mod/drivers/ata/sata_qstor.c
--- linux-2.6.20-rc4/drivers/ata/sata_qstor.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_qstor.c 2007-01-17 21:14:41.000000000 +0900
@@ -161,6 +161,8 @@ static const struct ata_port_operations
.eng_timeout = qs_eng_timeout,
.irq_handler = qs_intr,
.irq_clear = qs_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = qs_scr_read,
.scr_write = qs_scr_write,
.port_start = qs_port_start,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_sil.c linux-2.6.20-rc4.mod/drivers/ata/sata_sil.c
--- linux-2.6.20-rc4/drivers/ata/sata_sil.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_sil.c 2007-01-17 21:14:41.000000000 +0900
@@ -207,6 +207,8 @@ static const struct ata_port_operations
.post_internal_cmd = ata_bmdma_post_internal_cmd,
.irq_handler = sil_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = sil_scr_read,
.scr_write = sil_scr_write,
.port_start = ata_port_start,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_sil24.c linux-2.6.20-rc4.mod/drivers/ata/sata_sil24.c
--- linux-2.6.20-rc4/drivers/ata/sata_sil24.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_sil24.c 2007-01-17 21:14:41.000000000 +0900
@@ -406,6 +406,8 @@ static const struct ata_port_operations
.irq_handler = sil24_interrupt,
.irq_clear = sil24_irq_clear,
+ .irq_on = ata_dummy_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = sil24_scr_read,
.scr_write = sil24_scr_write,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_sis.c linux-2.6.20-rc4.mod/drivers/ata/sata_sis.c
--- linux-2.6.20-rc4/drivers/ata/sata_sis.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_sis.c 2007-01-17 21:14:41.000000000 +0900
@@ -119,6 +119,8 @@ static const struct ata_port_operations
.post_internal_cmd = ata_bmdma_post_internal_cmd,
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = sis_scr_read,
.scr_write = sis_scr_write,
.port_start = ata_port_start,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_svw.c linux-2.6.20-rc4.mod/drivers/ata/sata_svw.c
--- linux-2.6.20-rc4/drivers/ata/sata_svw.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_svw.c 2007-01-17 21:14:41.000000000 +0900
@@ -356,6 +356,8 @@ static const struct ata_port_operations
.post_internal_cmd = ata_bmdma_post_internal_cmd,
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = k2_sata_scr_read,
.scr_write = k2_sata_scr_write,
.port_start = ata_port_start,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_sx4.c linux-2.6.20-rc4.mod/drivers/ata/sata_sx4.c
--- linux-2.6.20-rc4/drivers/ata/sata_sx4.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_sx4.c 2007-01-17 21:14:41.000000000 +0900
@@ -209,6 +209,8 @@ static const struct ata_port_operations
.eng_timeout = pdc_eng_timeout,
.irq_handler = pdc20621_interrupt,
.irq_clear = pdc20621_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = pdc_port_start,
.port_stop = pdc_port_stop,
.host_stop = pdc20621_host_stop,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_uli.c linux-2.6.20-rc4.mod/drivers/ata/sata_uli.c
--- linux-2.6.20-rc4/drivers/ata/sata_uli.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_uli.c 2007-01-17 21:14:41.000000000 +0900
@@ -117,6 +117,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = uli_scr_read,
.scr_write = uli_scr_write,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_via.c linux-2.6.20-rc4.mod/drivers/ata/sata_via.c
--- linux-2.6.20-rc4/drivers/ata/sata_via.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_via.c 2007-01-17 21:14:41.000000000 +0900
@@ -134,6 +134,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.port_start = ata_port_start,
.port_stop = ata_port_stop,
@@ -165,6 +167,8 @@ static const struct ata_port_operations
.irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = svia_scr_read,
.scr_write = svia_scr_write,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/drivers/ata/sata_vsc.c linux-2.6.20-rc4.mod/drivers/ata/sata_vsc.c
--- linux-2.6.20-rc4/drivers/ata/sata_vsc.c 2007-01-07 14:45:51.000000000 +0900
+++ linux-2.6.20-rc4.mod/drivers/ata/sata_vsc.c 2007-01-17 21:14:41.000000000 +0900
@@ -308,6 +308,8 @@ static const struct ata_port_operations
.post_internal_cmd = ata_bmdma_post_internal_cmd,
.irq_handler = vsc_sata_interrupt,
.irq_clear = ata_bmdma_irq_clear,
+ .irq_on = ata_irq_on,
+ .irq_ack = ata_irq_ack,
.scr_read = vsc_sata_scr_read,
.scr_write = vsc_sata_scr_write,
.port_start = ata_port_start,
diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/include/linux/libata.h linux-2.6.20-rc4.mod/include/linux/libata.h
--- linux-2.6.20-rc4/include/linux/libata.h 2007-01-17 23:23:27.000000000 +0900
+++ linux-2.6.20-rc4.mod/include/linux/libata.h 2007-01-17 23:24:49.000000000 +0900
@@ -638,6 +638,8 @@ struct ata_port_operations {
irq_handler_t irq_handler;
void (*irq_clear) (struct ata_port *);
+ u8 (*irq_on) (struct ata_port *);
+ u8 (*irq_ack) (struct ata_port *ap, unsigned int chk_drq);
u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg);
void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
@@ -761,6 +763,7 @@ extern void ata_port_queue_task(struct a
extern u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val,
unsigned long interval_msec,
unsigned long timeout_msec);
+u8 ata_irq_on(struct ata_port *ap);
/*
* Default driver ops implementations
@@ -1202,6 +1205,8 @@ static inline u8 ata_irq_ack(struct ata_
return status;
}
+static inline u8 ata_dummy_irq_on (struct ata_port *ap) { return 0; }
+
static inline int ata_try_flush_cache(const struct ata_device *dev)
{
return ata_id_wcache_enabled(dev->id) ||
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] libata-core.c: add another IRQ calls
[not found] ` <200701180055.l0I0tl6M021051@toshiba.co.jp>
@ 2007-01-25 1:17 ` Jeff Garzik
0 siblings, 0 replies; 8+ messages in thread
From: Jeff Garzik @ 2007-01-25 1:17 UTC (permalink / raw)
To: Akira Iguchi
Cc: Mikael Pettersson, arnd, linuxppc-dev, linux-ide, paulus, alan
Akira Iguchi wrote:
>> The real benefits from identifying a common case is to inline
>> the code for it. So the fact that the common case is still a
>> full-blown function call here and not inline code means that
>> there's much less benefit from rewriting an indirect call as
>> an if/indirect/direct sequence.
>
> According to your comment, this patch adds IRQ calls (irq_on, irq_ack)
> to each driver and always uses these indirect calls.
>
> For irq_on, most drivers use ata_irq_on(). Some drivers
> (ahci.c, sata_sil24.c) use ata_dummy_irq_on() because they
> don't have either explicit or implicit assignment (ex: ata_pci_init_one)
> of ctl_addr.
>
> For irq_ack, ata_irq_ack() is used.
>
> Signed-off-by: Kou Ishizaki <kou.ishizaki@toshiba.co.jp>
> Signed-off-by: Akira Iguchi <akira2.iguchi@toshiba.co.jp>
very close to perfect :)
ahci and sata_sil24 need dummy functions for ->irq_ack(). As you can
see, ata_irq_ack() is only used in debug situations, and it [the current
code] is very wrong for ahci and sata_sil24.
Also, please split up the patch into two pieces: (1) update core and
headers, and (2) update every driver.
> diff -uprN -X linux-2.6.20-rc4/Documentation/dontdiff linux-2.6.20-rc4/include/linux/libata.h linux-2.6.20-rc4.mod/include/linux/libata.h
> --- linux-2.6.20-rc4/include/linux/libata.h 2007-01-17 23:23:27.000000000 +0900
> +++ linux-2.6.20-rc4.mod/include/linux/libata.h 2007-01-17 23:24:49.000000000 +0900
> @@ -638,6 +638,8 @@ struct ata_port_operations {
>
> irq_handler_t irq_handler;
> void (*irq_clear) (struct ata_port *);
> + u8 (*irq_on) (struct ata_port *);
> + u8 (*irq_ack) (struct ata_port *ap, unsigned int chk_drq);
>
> u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg);
> void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
> @@ -761,6 +763,7 @@ extern void ata_port_queue_task(struct a
> extern u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val,
> unsigned long interval_msec,
> unsigned long timeout_msec);
> +u8 ata_irq_on(struct ata_port *ap);
>
> /*
> * Default driver ops implementations
> @@ -1202,6 +1205,8 @@ static inline u8 ata_irq_ack(struct ata_
> return status;
> }
>
> +static inline u8 ata_dummy_irq_on (struct ata_port *ap) { return 0; }
> +
This won't work, you need to create a non-inline function and
EXPORT_SYMBOL_GPL it.
Jeff
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-01-25 1:18 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <200701161046.l0GAk5Go019691@toshiba.co.jp>
2007-01-16 12:03 ` [PATCH 2/4] libata-core.c: add another IRQ calls Alan
2007-01-16 22:04 ` Jeff Garzik
2007-01-17 9:24 Mikael Pettersson
2007-01-17 16:49 ` Jeff Garzik
2007-01-17 20:31 ` Mikael Pettersson
2007-01-18 0:55 ` Akira Iguchi
[not found] ` <200701180055.l0I0tl6M021051@toshiba.co.jp>
2007-01-25 1:17 ` Jeff Garzik
-- strict thread matches above, loose matches on Subject: below --
2007-01-16 10:46 Akira Iguchi
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).