summaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorAlexander Gordeev <agordeev@redhat.com>2014-10-06 16:24:45 +0100
committerTejun Heo <tj@kernel.org>2014-10-06 11:43:36 -0400
commit18dcf433f3ded61eb140a55e7048ec2fef79e723 (patch)
treee25ea1e7b82c6a43d76b7f44aa6c130ad12cca90 /include/net
parent227dfb4dbf109596d76a9b842856c4ff68e4efb2 (diff)
downloadlinux-18dcf433f3ded61eb140a55e7048ec2fef79e723.tar.gz
linux-18dcf433f3ded61eb140a55e7048ec2fef79e723.tar.bz2
linux-18dcf433f3ded61eb140a55e7048ec2fef79e723.zip
AHCI: Optimize single IRQ interrupt processing
Split interrupt service routine into hardware context handler and threaded context handler. That allows to protect ports with individual locks rather than with a single host-wide lock and move port interrupts handling out of the hardware interrupt context. Testing was done by transferring 8GB on two hard drives in parallel using command 'dd if=/dev/sd{a,b} of=/dev/null'. With lock_stat statistics I measured access times to ata_host::lock spinlock (since interrupt handler code is fully embraced with this lock). The average lock's holdtime decreased eight times while average waittime decreased two times. Both before and after the change the transfer time is the same, while 'perf record -e cycles:k ...' shows 1%-4% CPU time spent in ahci_single_irq_intr() routine before the update and not even sampled/shown ahci_single_irq_intr() after the update. Signed-off-by: Alexander Gordeev <agordeev@redhat.com> Signed-off-by: Tejun Heo <tj@kernel.org> Cc: linux-ide@vger.kernel.org
Diffstat (limited to 'include/net')
0 files changed, 0 insertions, 0 deletions