diff options
author | rpaulo <rpaulo@FreeBSD.org> | 2012-05-12 14:37:25 +0000 |
---|---|---|
committer | rpaulo <rpaulo@FreeBSD.org> | 2012-05-12 14:37:25 +0000 |
commit | f05de090832a1cf1ee734c13843ec7841d8736fd (patch) | |
tree | 889be61a23bc06df3cddf407f17f63f97b7ea14c /sys/dev/vr/if_vrreg.h | |
parent | 693ceab23e831ec3a19ac0daa29f797e2596fb93 (diff) | |
download | FreeBSD-src-f05de090832a1cf1ee734c13843ec7841d8736fd.zip FreeBSD-src-f05de090832a1cf1ee734c13843ec7841d8736fd.tar.gz |
Convert the if_vr(4) driver model to the interrupt filter model and use
a taskqueue.
This gives a 16% performance improvement under high load on slow systems,
especially when vr shares an interrupt with another device, which is
common with the Alix x86 boards.
Contrary to the other devices, I left the interrupt processing for loop
in because there was no significant difference in performance and this
should avoid enqueuing more taskqueues unnecessarily.
We also decided to move the vr_start_locked() call inside the for loop
because we found out that it helps performance since TCP ACKs now have a
chance to go out quicker.
Reviewed by: yongari (older version, same idea)
Discussed with: yongari, jhb
Diffstat (limited to 'sys/dev/vr/if_vrreg.h')
-rw-r--r-- | sys/dev/vr/if_vrreg.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/dev/vr/if_vrreg.h b/sys/dev/vr/if_vrreg.h index 2445bab..3618c1b 100644 --- a/sys/dev/vr/if_vrreg.h +++ b/sys/dev/vr/if_vrreg.h @@ -738,6 +738,7 @@ struct vr_softc { #ifdef DEVICE_POLLING int rxcycles; #endif + struct task vr_inttask; }; #define VR_LOCK(_sc) mtx_lock(&(_sc)->vr_mtx) |