From 7fe5db3b2342923651d15e394319f72aa039a12d Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Sun, 26 Oct 2008 08:32:10 +0000 Subject: [PATCH] Perform ipflow timeout, only if the CPU has active ipflows; saves us some physical ipi sending time. Inspired-by: NetBSD ipflow.c rev 1.2 --- sys/netinet/ip_flow.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sys/netinet/ip_flow.c b/sys/netinet/ip_flow.c index 9deb046d0c..d92ed0680d 100644 --- a/sys/netinet/ip_flow.c +++ b/sys/netinet/ip_flow.c @@ -34,7 +34,7 @@ * POSSIBILITY OF SUCH DAMAGE. * * $FreeBSD: src/sys/netinet/ip_flow.c,v 1.9.2.2 2001/11/04 17:35:31 luigi Exp $ - * $DragonFly: src/sys/netinet/ip_flow.c,v 1.17 2008/10/26 08:02:43 sephe Exp $ + * $DragonFly: src/sys/netinet/ip_flow.c,v 1.18 2008/10/26 08:32:10 sephe Exp $ */ #include @@ -347,9 +347,18 @@ void ipflow_slowtimo(void) { #ifdef SMP - lwkt_send_ipiq_mask(smp_active_mask, ipflow_timo_ipi, NULL); + uint32_t mask = 0; + int i; + + for (i = 0; i < ncpus; ++i) { + if (ipflow_inuse_pcpu[i]) + mask |= 1 << i; + } + if (mask != 0) + lwkt_send_ipiq_mask(mask, ipflow_timo_ipi, NULL); #else - ipflow_timo_ipi(NULL); + if (ipflow_inuse) + ipflow_timo_ipi(NULL); #endif } -- 2.41.0