svn commit: r353274 - in head/sys: net sys

Bjoern A. Zeeb bzeeb-lists at lists.zabbadoz.net
Tue Oct 8 12:48:54 UTC 2019


On 7 Oct 2019, at 14:15, Hans Petter Selasky wrote:

> Author: hselasky
> Date: Mon Oct  7 14:15:41 2019
> New Revision: 353274
> URL: https://svnweb.freebsd.org/changeset/base/353274
>
> Log:
>   Factor out VNET shutdown check into an own vnet structure field.
>   Remove the now obsolete vnet_state field. This greatly simplifies 
> the
>   detection of VNET shutdown and avoids code duplication.

I think I tried to say that the vnet_state is extremely helpful for 
debugging as you know where each of the stacks is during 
initialisation/shutdown, especially with loadable  modules and that it 
should stay and I cannot remember that I removed it in the patch that I 
suggested.

I didn’t re-used a field but extended the structure.  What you did 
means you cannot MFC this easily.  Also it means that all previous vnet 
consumers got invalidated and the VNET_MAGIC_N should have been bumped 
and all modules need a re-compile.



>   Discussed with:	bz@
>   MFC after:	1 week
>   Sponsored by:	Mellanox Technologies
>
> Modified:
>   head/sys/net/if.c
>   head/sys/net/vnet.c
>   head/sys/net/vnet.h
>   head/sys/sys/param.h
>
> Modified: head/sys/net/if.c
> ==============================================================================
> --- head/sys/net/if.c	Mon Oct  7 13:40:29 2019	(r353273)
> +++ head/sys/net/if.c	Mon Oct  7 14:15:41 2019	(r353274)
> @@ -1088,10 +1088,9 @@ if_detach_internal(struct ifnet *ifp, int 
> vmove, struc
>   	struct ifnet *iter;
>   	int found = 0;
>  #ifdef VIMAGE
> -	int shutdown;
> +	bool shutdown;
>
> -	shutdown = (ifp->if_vnet->vnet_state > SI_SUB_VNET &&
> -		 ifp->if_vnet->vnet_state < SI_SUB_VNET_DONE) ? 1 : 0;
> +	shutdown = ifp->if_vnet->vnet_shutdown;
>  #endif
>  	IFNET_WLOCK();
>  	CK_STAILQ_FOREACH(iter, &V_ifnet, if_link)
> @@ -1341,7 +1340,6 @@ if_vmove_loan(struct thread *td, struct ifnet 
> *ifp, ch
>  {
>  	struct prison *pr;
>  	struct ifnet *difp;
> -	int shutdown;
>
>  	/* Try to find the prison within our visibility. */
>  	sx_slock(&allprison_lock);
> @@ -1369,9 +1367,7 @@ if_vmove_loan(struct thread *td, struct ifnet 
> *ifp, ch
>  	}
>
>  	/* Make sure the VNET is stable. */
> -	shutdown = (ifp->if_vnet->vnet_state > SI_SUB_VNET &&
> -		 ifp->if_vnet->vnet_state < SI_SUB_VNET_DONE) ? 1 : 0;
> -	if (shutdown) {
> +	if (ifp->if_vnet->vnet_shutdown) {
>  		CURVNET_RESTORE();
>  		prison_free(pr);
>  		return (EBUSY);
> @@ -1394,7 +1390,6 @@ if_vmove_reclaim(struct thread *td, char 
> *ifname, int
>  	struct prison *pr;
>  	struct vnet *vnet_dst;
>  	struct ifnet *ifp;
> - 	int shutdown;
>
>  	/* Try to find the prison within our visibility. */
>  	sx_slock(&allprison_lock);
> @@ -1423,9 +1418,7 @@ if_vmove_reclaim(struct thread *td, char 
> *ifname, int
>  	}
>
>  	/* Make sure the VNET is stable. */
> -	shutdown = (ifp->if_vnet->vnet_state > SI_SUB_VNET &&
> -		 ifp->if_vnet->vnet_state < SI_SUB_VNET_DONE) ? 1 : 0;
> -	if (shutdown) {
> +	if (ifp->if_vnet->vnet_shutdown) {
>  		CURVNET_RESTORE();
>  		prison_free(pr);
>  		return (EBUSY);
> @@ -2996,16 +2989,11 @@ ifioctl(struct socket *so, u_long cmd, caddr_t 
> data, s
>  	struct ifreq *ifr;
>  	int error;
>  	int oif_flags;
> -#ifdef VIMAGE
> -	int shutdown;
> -#endif
>
>  	CURVNET_SET(so->so_vnet);
>  #ifdef VIMAGE
>  	/* Make sure the VNET is stable. */
> -	shutdown = (so->so_vnet->vnet_state > SI_SUB_VNET &&
> -		 so->so_vnet->vnet_state < SI_SUB_VNET_DONE) ? 1 : 0;
> -	if (shutdown) {
> +	if (so->so_vnet->vnet_shutdown) {
>  		CURVNET_RESTORE();
>  		return (EBUSY);
>  	}
>
> Modified: head/sys/net/vnet.c
> ==============================================================================
> --- head/sys/net/vnet.c	Mon Oct  7 13:40:29 2019	(r353273)
> +++ head/sys/net/vnet.c	Mon Oct  7 14:15:41 2019	(r353274)
> @@ -235,7 +235,6 @@ vnet_alloc(void)
>  	SDT_PROBE1(vnet, functions, vnet_alloc, entry, __LINE__);
>  	vnet = malloc(sizeof(struct vnet), M_VNET, M_WAITOK | M_ZERO);
>  	vnet->vnet_magic_n = VNET_MAGIC_N;
> -	vnet->vnet_state = 0;
>  	SDT_PROBE2(vnet, functions, vnet_alloc, alloc, __LINE__, vnet);
>
>  	/*
> @@ -280,6 +279,9 @@ vnet_destroy(struct vnet *vnet)
>  	LIST_REMOVE(vnet, vnet_le);
>  	VNET_LIST_WUNLOCK();
>
> +	/* Signal that VNET is being shutdown. */
> +	vnet->vnet_shutdown = 1;
> +
>  	CURVNET_SET_QUIET(vnet);
>  	vnet_sysuninit();
>  	CURVNET_RESTORE();
> @@ -573,10 +575,8 @@ vnet_sysinit(void)
>  	struct vnet_sysinit *vs;
>
>  	VNET_SYSINIT_RLOCK();
> -	TAILQ_FOREACH(vs, &vnet_constructors, link) {
> -		curvnet->vnet_state = vs->subsystem;
> +	TAILQ_FOREACH(vs, &vnet_constructors, link)
>  		vs->func(vs->arg);
> -	}
>  	VNET_SYSINIT_RUNLOCK();
>  }
>
> @@ -592,10 +592,8 @@ vnet_sysuninit(void)
>
>  	VNET_SYSINIT_RLOCK();
>  	TAILQ_FOREACH_REVERSE(vs, &vnet_destructors, vnet_sysuninit_head,
> -	    link) {
> -		curvnet->vnet_state = vs->subsystem;
> +	    link)
>  		vs->func(vs->arg);
> -	}
>  	VNET_SYSINIT_RUNLOCK();
>  }
>
> @@ -709,7 +707,7 @@ db_vnet_print(struct vnet *vnet)
>  	db_printf(" vnet_data_mem  = %p\n", vnet->vnet_data_mem);
>  	db_printf(" vnet_data_base = %#jx\n",
>  	    (uintmax_t)vnet->vnet_data_base);
> -	db_printf(" vnet_state     = %#08x\n", vnet->vnet_state);
> +	db_printf(" vnet_shutdown  = %#08x\n", vnet->vnet_shutdown);
>  	db_printf("\n");
>  }
>
>
> Modified: head/sys/net/vnet.h
> ==============================================================================
> --- head/sys/net/vnet.h	Mon Oct  7 13:40:29 2019	(r353273)
> +++ head/sys/net/vnet.h	Mon Oct  7 14:15:41 2019	(r353274)
> @@ -72,7 +72,7 @@ struct vnet {
>  	u_int			 vnet_magic_n;
>  	u_int			 vnet_ifcnt;
>  	u_int			 vnet_sockcnt;
> -	u_int			 vnet_state;	/* SI_SUB_* */
> +	u_int			 vnet_shutdown; /* Shutdown in progress. */
>  	void			*vnet_data_mem;
>  	uintptr_t		 vnet_data_base;
>  };
>
> Modified: head/sys/sys/param.h
> ==============================================================================
> --- head/sys/sys/param.h	Mon Oct  7 13:40:29 2019	(r353273)
> +++ head/sys/sys/param.h	Mon Oct  7 14:15:41 2019	(r353274)
> @@ -60,7 +60,7 @@
>   *		in the range 5 to 9.
>   */
>  #undef __FreeBSD_version
> -#define __FreeBSD_version 1300048	/* Master, propagated to newvers */
> +#define __FreeBSD_version 1300049	/* Master, propagated to newvers */
>
>  /*
>   * __FreeBSD_kernel__ indicates that this system uses the kernel of 
> FreeBSD,


More information about the svn-src-all mailing list