Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Linux: Kernel

[PATCH v2 -tip 0/5] x86, MSI, AHCI: Support multiple MSIs

 

 

Linux kernel RSS feed   Index | Next | Previous | View Threaded


agordeev at redhat

Sep 3, 2012, 2:16 AM

Post #1 of 3 (66 views)
Permalink
[PATCH v2 -tip 0/5] x86, MSI, AHCI: Support multiple MSIs

This series is against the latest tip tree.

Currently multiple MSI mode is limited to a single vector per device (at
least on x86 and PPC). This series breathes life into pci_enable_msi_block()
and makes it possible to set interrupt affinity for multiple IRQs, similarly
to MSI-X. Yet, only for x86 and only when IOMMUs are present.

Although IRQ and PCI subsystems are modified, the current behaviour left
intact. The drivers could just start using multiple MSIs just by following
the existing documentation.

The AHCI device driver makes use of the new mode and a new function -
pci_enable_msi_block_auto() - patches 4,5.

Changes since v1:
4/5: based on Bjorn's review pci_enable_msi_block_auto() returns
the number of interrupts allocated or error code

5/5: based on Jeff's comments:

- AHCI specific code moved from libata-core.c to libahci.c;

- the host-wide lock concern addressed - ahci_interrupt() handler
split in two parts: ahci_hw_interrupt() hardware context handler
and ahci_thread_fn() threaded handler;

- host->lock statistics attached;

Host-wide lock statistics summary:

Taken using command 'if=/dev/sd{a,b,c} of=/dev/null' running in parallel
on three SATA HDDs:
ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)

ahci_interrupt()
Capabilities: [80] MSI: Enable+ Count=1/16 Maskable- 64bit-

Test holdtime-total waittime-total acquis. holdtime-avg waittime-avg
#
01. 22565801.27 93056.41 6377094 3.538571216 0.014592291
02. 20358324.12 60825.47 6411012 3.175524257 0.009487655
03. 21190730.38 63610.38 6384508 3.319085884 0.009963239
04. 22491064.54 80624.96 6398390 3.515113105 0.012600820
05. 21986193.10 78034.38 6379092 3.446602291 0.012232835
06. 20556437.70 62314.64 6287673 3.269323596 0.009910604
07. 20477137.55 66190.92 6388507 3.205308776 0.010360937
08. 21442240.03 69306.80 6402109 3.349246323 0.010825620
----------- -----------
avg 3.352346931 0.011246750

ahci_hw_interrupt()
Capabilities: [80] MSI: Enable+ Count=16/16 Maskable- 64bit-

Test holdtime-total waittime-total acquis. holdtime-avg waittime-avg
#
09. 8936643.32 54559.79 6505606 1.373683454 0.008386581
10. 8579972.36 51496.56 6496233 1.320761180 0.007927142
11. 8138708.47 54061.46 6494647 1.253141005 0.008324003
12. 8322068.81 60427.51 6509975 1.278356493 0.009282295
13. 8527745.18 65978.83 6515589 1.308821839 0.010126303
14. 8662461.99 57291.39 6510702 1.330495850 0.008799572
15. 8054911.26 69186.41 6514262 1.236504037 0.010620759
16. 9618631.17 39726.37 6517385 1.475842101 0.006095446
----------- -----------
avg 1.322200745 0.008695263
Attached patches:
1/5: x86, MSI: Support multiple MSIs in presense of IRQ remapping
2/5: x86, MSI: Allocate as many multiple IRQs as requested
3/5: x86, MSI: Minor readability fixes
4/5: PCI, MSI: Enable multiple MSIs with pci_enable_msi_block_auto()
5/5: AHCI: Support multiple MSIs

Documentation/PCI/MSI-HOWTO.txt | 37 ++++++-
arch/x86/kernel/apic/io_apic.c | 170 +++++++++++++++++++++++++++++--
drivers/ata/ahci.c | 14 ++-
drivers/ata/ahci.h | 5 +
drivers/ata/libahci.c | 211 +++++++++++++++++++++++++++++++++++++-
drivers/pci/msi.c | 36 ++++++-
include/linux/irq.h | 6 +
include/linux/msi.h | 1 +
include/linux/pci.h | 7 ++
kernel/irq/chip.c | 30 ++++--
kernel/irq/irqdesc.c | 31 ++++++
11 files changed, 509 insertions(+), 39 deletions(-)

--
1.7.7.6


--
Regards,
Alexander Gordeev
agordeev [at] redhat
Attachments: ahci_stats.txt (13.0 KB)


agordeev at redhat

Sep 26, 2012, 5:38 AM

Post #2 of 3 (50 views)
Permalink
Re: [PATCH v2 -tip 0/5] x86, MSI, AHCI: Support multiple MSIs [In reply to]

On Mon, Sep 03, 2012 at 11:16:55AM +0200, Alexander Gordeev wrote:
> 5/5: based on Jeff's comments:
>
> - AHCI specific code moved from libata-core.c to libahci.c;
>
> - the host-wide lock concern addressed - ahci_interrupt() handler
> split in two parts: ahci_hw_interrupt() hardware context handler
> and ahci_thread_fn() threaded handler;
>
> - host->lock statistics attached;

Hi Jeff,

Would you please comment on the changes and numbers?

Thanks!

--
Regards,
Alexander Gordeev
agordeev [at] redhat
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo [at] vger
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/


mingo at kernel

Sep 26, 2012, 9:03 PM

Post #3 of 3 (50 views)
Permalink
Re: [PATCH v2 -tip 0/5] x86, MSI, AHCI: Support multiple MSIs [In reply to]

* Alexander Gordeev <agordeev [at] redhat> wrote:

> On Mon, Sep 03, 2012 at 11:16:55AM +0200, Alexander Gordeev wrote:
> > 5/5: based on Jeff's comments:
> >
> > - AHCI specific code moved from libata-core.c to libahci.c;
> >
> > - the host-wide lock concern addressed - ahci_interrupt() handler
> > split in two parts: ahci_hw_interrupt() hardware context handler
> > and ahci_thread_fn() threaded handler;
> >
> > - host->lock statistics attached;
>
> Hi Jeff,
>
> Would you please comment on the changes and numbers?

Yep, given the diffstat:

Documentation/PCI/MSI-HOWTO.txt | 37 ++++++-
arch/x86/kernel/apic/io_apic.c | 170 +++++++++++++++++++++++++++++--
drivers/ata/ahci.c | 14 ++-
drivers/ata/ahci.h | 5 +
drivers/ata/libahci.c | 211 +++++++++++++++++++++++++++++++++++++-
drivers/pci/msi.c | 36 ++++++-
include/linux/irq.h | 6 +
include/linux/msi.h | 1 +
include/linux/pci.h | 7 ++
kernel/irq/chip.c | 30 ++++--
kernel/irq/irqdesc.c | 31 ++++++
11 files changed, 509 insertions(+), 39 deletions(-)

We absolutely need a very happy and enthusiastic Acked-by from
Jeff before we can pursue it :-)

Thaks,

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo [at] vger
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Linux kernel RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.