svn commit: r261590 - in head/sys: kern net

Gleb Smirnoff glebius at FreeBSD.org
Fri Feb 7 13:47:34 UTC 2014


Author: glebius
Date: Fri Feb  7 13:47:33 2014
New Revision: 261590
URL: http://svnweb.freebsd.org/changeset/base/261590

Log:
  Remove identical vnet sysctl handlers, and handle CTLFLAG_VNET
  in the sysctl_root().
  
  Note: SYSCTL_VNET_* macros can be removed as well. All is
    needed to virtualize a sysctl oid is set CTLFLAG_VNET on it.
    But for now keep macros in place to avoid large code churn.
  
  Sponsored by:	Nginx, Inc.

Modified:
  head/sys/kern/kern_sysctl.c
  head/sys/net/vnet.c
  head/sys/net/vnet.h

Modified: head/sys/kern/kern_sysctl.c
==============================================================================
--- head/sys/kern/kern_sysctl.c	Fri Feb  7 13:40:22 2014	(r261589)
+++ head/sys/kern/kern_sysctl.c	Fri Feb  7 13:47:33 2014	(r261590)
@@ -1491,7 +1491,10 @@ sysctl_root(SYSCTL_HANDLER_ARGS)
 #endif
 	oid->oid_running++;
 	SYSCTL_XUNLOCK();
-
+#ifdef VIMAGE
+	if ((oid->oid_kind & CTLFLAG_VNET) && arg1 != NULL)
+		arg1 = (void *)(curvnet->vnet_data_base + (uintptr_t)arg1);
+#endif
 	if (!(oid->oid_kind & CTLFLAG_MPSAFE))
 		mtx_lock(&Giant);
 	error = oid->oid_handler(oid, arg1, arg2, req);

Modified: head/sys/net/vnet.c
==============================================================================
--- head/sys/net/vnet.c	Fri Feb  7 13:40:22 2014	(r261589)
+++ head/sys/net/vnet.c	Fri Feb  7 13:47:33 2014	(r261590)
@@ -464,47 +464,6 @@ vnet_data_copy(void *start, int size)
 }
 
 /*
- * Variants on sysctl_handle_foo that know how to handle virtualized global
- * variables: if 'arg1' is a pointer, then we transform it to the local vnet
- * offset.
- */
-int
-vnet_sysctl_handle_int(SYSCTL_HANDLER_ARGS)
-{
-
-	if (arg1 != NULL)
-		arg1 = (void *)(curvnet->vnet_data_base + (uintptr_t)arg1);
-	return (sysctl_handle_int(oidp, arg1, arg2, req));
-}
-
-int
-vnet_sysctl_handle_opaque(SYSCTL_HANDLER_ARGS)
-{
-
-	if (arg1 != NULL)
-		arg1 = (void *)(curvnet->vnet_data_base + (uintptr_t)arg1);
-	return (sysctl_handle_opaque(oidp, arg1, arg2, req));
-}
-
-int
-vnet_sysctl_handle_string(SYSCTL_HANDLER_ARGS)
-{
-
-	if (arg1 != NULL)
-		arg1 = (void *)(curvnet->vnet_data_base + (uintptr_t)arg1);
-	return (sysctl_handle_string(oidp, arg1, arg2, req));
-}
-
-int
-vnet_sysctl_handle_uint(SYSCTL_HANDLER_ARGS)
-{
-
-	if (arg1 != NULL)
-		arg1 = (void *)(curvnet->vnet_data_base + (uintptr_t)arg1);
-	return (sysctl_handle_int(oidp, arg1, arg2, req));
-}
-
-/*
  * Support for special SYSINIT handlers registered via VNET_SYSINIT()
  * and VNET_SYSUNINIT().
  */

Modified: head/sys/net/vnet.h
==============================================================================
--- head/sys/net/vnet.h	Fri Feb  7 13:40:22 2014	(r261589)
+++ head/sys/net/vnet.h	Fri Feb  7 13:47:33 2014	(r261590)
@@ -290,15 +290,10 @@ void	 vnet_data_free(void *start_arg, in
  * arguments themselves, if required.
  */
 #ifdef SYSCTL_OID
-int	vnet_sysctl_handle_int(SYSCTL_HANDLER_ARGS);
-int	vnet_sysctl_handle_opaque(SYSCTL_HANDLER_ARGS);
-int	vnet_sysctl_handle_string(SYSCTL_HANDLER_ARGS);
-int	vnet_sysctl_handle_uint(SYSCTL_HANDLER_ARGS);
-
 #define	SYSCTL_VNET_INT(parent, nbr, name, access, ptr, val, descr)	\
 	SYSCTL_OID(parent, nbr, name,					\
 	    CTLTYPE_INT|CTLFLAG_MPSAFE|CTLFLAG_VNET|(access),		\
-	    ptr, val, vnet_sysctl_handle_int, "I", descr)
+	    ptr, val, sysctl_handle_int, "I", descr)
 #define	SYSCTL_VNET_PROC(parent, nbr, name, access, ptr, arg, handler,	\
 	    fmt, descr)							\
 	CTASSERT(((access) & CTLTYPE) != 0);				\
@@ -312,16 +307,16 @@ int	vnet_sysctl_handle_uint(SYSCTL_HANDL
 #define	SYSCTL_VNET_STRING(parent, nbr, name, access, arg, len, descr)	\
 	SYSCTL_OID(parent, nbr, name,					\
 	    CTLTYPE_STRING|CTLFLAG_VNET|(access),			\
-	    arg, len, vnet_sysctl_handle_string, "A", descr)
+	    arg, len, sysctl_handle_string, "A", descr)
 #define	SYSCTL_VNET_STRUCT(parent, nbr, name, access, ptr, type, descr)	\
 	SYSCTL_OID(parent, nbr, name,					\
 	    CTLTYPE_OPAQUE|CTLFLAG_VNET|(access), ptr,			\
-	    sizeof(struct type), vnet_sysctl_handle_opaque, "S," #type,	\
+	    sizeof(struct type), sysctl_handle_opaque, "S," #type,	\
 	    descr)
 #define	SYSCTL_VNET_UINT(parent, nbr, name, access, ptr, val, descr)	\
 	SYSCTL_OID(parent, nbr, name,					\
 	    CTLTYPE_UINT|CTLFLAG_MPSAFE|CTLFLAG_VNET|(access),		\
-	    ptr, val, vnet_sysctl_handle_uint, "IU", descr)
+	    ptr, val, sysctl_handle_int, "IU", descr)
 #define	VNET_SYSCTL_ARG(req, arg1) do {					\
 	if (arg1 != NULL)						\
 		arg1 = (void *)(TD_TO_VNET((req)->td)->vnet_data_base +	\


More information about the svn-src-head mailing list