svn commit: r189374 - user/kmacy/HEAD_fast_net_merge/sys/netinet

John Baldwin jhb at freebsd.org
Wed Mar 4 15:00:00 PST 2009


On Wednesday 04 March 2009 4:22:39 pm Kip Macy wrote:
> Author: kmacy
> Date: Wed Mar  4 21:22:39 2009
> New Revision: 189374
> URL: http://svn.freebsd.org/changeset/base/189374
> 
> Log:
>   Use per-cpu callouts for tcp_timer
>   186694, 187660
>   
>   186694:
>   - convert tcp_timer_activate over to using
>     per-cpu callouts
>   - don't acquire the tcbinfo lock exclusively
>     in tcp_timer_rexmt unless needed for tcp_drop
>   
>   187660:
>   - mp_maxid may not be valid ensure that we
>     re-schedule on cpuid less than or equal to
>     the current one for tcp callouts
> 
> Modified:
>   user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c
> 
> Modified: user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c
> 
==============================================================================
> --- user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c	Wed Mar  4 
21:04:52 2009	(r189373)
> +++ user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c	Wed Mar  4 
21:22:39 2009	(r189374)
> @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
>  #include <sys/mbuf.h>
>  #include <sys/mutex.h>
>  #include <sys/protosw.h>
> +#include <sys/smp.h>
>  #include <sys/socket.h>
>  #include <sys/socketvar.h>
>  #include <sys/sysctl.h>
> @@ -118,6 +119,8 @@ int	tcp_maxpersistidle;
>  	/* max idle time in persist */
>  int	tcp_maxidle;
>  
> +#define	INP_CPU(inp)	min(curcpu, ((inp)->inp_flowid % mp_maxid))

This is not really safe.  CPU ID's may be sparse.  The only guarantees you 
have are that 0 is the boot CPU, and that all valid CPU IDs are in the range 
[0 .. mp_maxid] (inclusive).  Thus, you could have a system that only has 
CPUs 0 and 3 and if you are on CPU 3 and flowid is 5, then this will choose 
min(3, 5 % 3) == min(3, 2) == 2 which is an invalid CPU.

-- 
John Baldwin


More information about the svn-src-user mailing list