summaryrefslogtreecommitdiffstats
path: root/sys/dev/vr/if_vrreg.h
diff options
context:
space:
mode:
authorrpaulo <rpaulo@FreeBSD.org>2012-05-12 14:37:25 +0000
committerrpaulo <rpaulo@FreeBSD.org>2012-05-12 14:37:25 +0000
commitf05de090832a1cf1ee734c13843ec7841d8736fd (patch)
tree889be61a23bc06df3cddf407f17f63f97b7ea14c /sys/dev/vr/if_vrreg.h
parent693ceab23e831ec3a19ac0daa29f797e2596fb93 (diff)
downloadFreeBSD-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.h1
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)
OpenPOWER on IntegriCloud