svn commit: r275599 - in head/sys/ofed/include: linux net

Marko Zec zec at fer.hr
Mon Dec 8 08:36:05 UTC 2014


On Mon, 8 Dec 2014 07:26:00 +0000
Craig Rodrigues <rodrigc at freebsd.org> wrote:

> Author: rodrigc
> Date: Mon Dec  8 07:25:59 2014
> New Revision: 275599
> URL: https://svnweb.freebsd.org/changeset/base/275599
> 
> Log:
>   Use CURVNET macros inside inet_get_local_port_range() function.
>   Without this fix, a kernel with VIMAGE + Infiniband will panic on
> bootup.

Why is CURVNET_SET_QUIET() used here instead of plain CURVNET_SET()?

inet_get_local_port_range() seems to be called from only two functions:
cma_alloc_any_port() and cma_init().  Did the panic ocur in both, or
only in cma_init()?  If so, then CURVNET_SET() should have been placed
only inside cma_init() and not in inet_get_local_port_range().

And perhaps all of this stuff could have been completely avoided if
cma_init() was scheduled to fire with curvnet contex already set to
vnet0, using proper SYSINIT scheduling instead of module_init(), i.e.
after SI_SUB_VNET and before SI_SUB_VNET_DONE?

Finally, the comment re. extra #includes and LIST_HEAD seems confusing
since TD_TO_VNET() macro requires both sys/jail.h and net/vnet.h, and
this dependency is unrelated to the LIST_HEAD macro cited in commit log.

Marko


>   Certain necessary #include statements require LIST_HEAD.
>   Add these includes to ofed/include/linux/list.h, because
>   LIST_HEAD is specifically overridden in this file.
>   
>   PR: 191468
>   Differential Revision: D1279
>   Reviewed by: hselasky
> 
> Modified:
>   head/sys/ofed/include/linux/list.h
>   head/sys/ofed/include/net/ip.h
> 
> Modified: head/sys/ofed/include/linux/list.h
> ==============================================================================
> --- head/sys/ofed/include/linux/list.h	Mon Dec  8 07:14:25
> 2014	(r275598) +++ head/sys/ofed/include/linux/list.h
> Mon Dec  8 07:25:59 2014	(r275599) @@ -40,6 +40,7 @@
>  #include <sys/kernel.h>
>  #include <sys/queue.h>
>  #include <sys/cpuset.h>
> +#include <sys/jail.h>
>  #include <sys/lock.h>
>  #include <sys/mutex.h>
>  #include <sys/proc.h>
> @@ -53,6 +54,7 @@
>  #include <net/if_var.h>
>  #include <net/if_types.h>
>  #include <net/if_media.h>
> +#include <net/vnet.h>
>  
>  #include <netinet/in.h>
>  #include <netinet/in_pcb.h>
> 
> Modified: head/sys/ofed/include/net/ip.h
> ==============================================================================
> --- head/sys/ofed/include/net/ip.h	Mon Dec  8 07:14:25
> 2014	(r275598) +++ head/sys/ofed/include/net/ip.h	Mon
> Dec  8 07:25:59 2014	(r275599) @@ -45,8 +45,10 @@
>  #ifdef INET
>  static inline void inet_get_local_port_range(int *low, int *high)
>  {
> +	CURVNET_SET_QUIET(TD_TO_VNET(curthread));
>  	*low = V_ipport_firstauto;
>  	*high = V_ipport_lastauto;
> +	CURVNET_RESTORE();
>  }
>  
>  static inline void
> 



More information about the svn-src-all mailing list