PERFORCE change 161708 for review

Marko Zec zec at FreeBSD.org
Thu May 7 03:54:25 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=161708

Change 161708 by zec at zec_tpx32 on 2009/05/07 03:54:20

	Integ vc -> vc2.
	
	vc is now closed for possible review before dumping to svn.
	
	vc2 to start receiving vimage API chunks.

Affected files ...

.. //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/kern/opensolaris.c#2 integrate
.. //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/kern/opensolaris_misc.c#3 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/init_main.c#10 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/kern_prot.c#7 integrate
.. //depot/projects/vimage-commit2/src/sys/kern/kern_vimage.c#28 integrate
.. //depot/projects/vimage-commit2/src/sys/sys/vimage.h#53 integrate

Differences ...

==== //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/kern/opensolaris.c#2 (text+ko) ====

@@ -32,8 +32,10 @@
 #include <sys/cpuvar.h>
 #include <sys/errno.h>
 #include <sys/kernel.h>
+#include <sys/misc.h>
 #include <sys/module.h>
 #include <sys/mutex.h>
+#include <sys/vimage.h>
 
 cpu_core_t	cpu_core[MAXCPU];
 kmutex_t	cpu_lock;
@@ -81,6 +83,7 @@
 
 	switch (type) {
 	case MOD_LOAD:
+		utsname.nodename = G_hostname;
 		break;
 
 	case MOD_UNLOAD:

==== //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/kern/opensolaris_misc.c#3 (text+ko) ====

@@ -37,7 +37,7 @@
 char hw_serial[11] = "0";
 
 struct opensolaris_utsname utsname = {
-	.nodename = hostname
+	.nodename = "unset"
 };
 
 int

==== //depot/projects/vimage-commit2/src/sys/kern/init_main.c#10 (text+ko) ====

@@ -454,7 +454,8 @@
 	p->p_ucred->cr_ruidinfo = uifind(0);
 	p->p_ucred->cr_prison = NULL;	/* Don't jail it. */
 #ifdef VIMAGE
-	P_TO_VIMAGE(p) =  LIST_FIRST(&vimage_head);
+	KASSERT(LIST_FIRST(&vimage_head) != NULL, ("vimage_head empty"));
+	P_TO_VIMAGE(p) =  LIST_FIRST(&vimage_head); /* set ucred->cr_vimage */
 	refcount_acquire(&P_TO_VIMAGE(p)->vi_ucredrefc);
 	LIST_FIRST(&vprocg_head)->nprocs++;
 #endif

==== //depot/projects/vimage-commit2/src/sys/kern/kern_prot.c#7 (text+ko) ====

@@ -69,6 +69,7 @@
 #include <sys/socketvar.h>
 #include <sys/syscallsubr.h>
 #include <sys/sysctl.h>
+#include <sys/vimage.h>
 
 #if defined(INET) || defined(INET6)
 #include <netinet/in.h>
@@ -1825,6 +1826,8 @@
 		if (jailed(cr))
 			prison_free(cr->cr_prison);
 #ifdef VIMAGE
+	/* XXX TODO: find out why and when cr_vimage can be NULL here! */
+	if (cr->cr_vimage != NULL)
 		refcount_release(&cr->cr_vimage->vi_ucredrefc);
 #endif
 #ifdef AUDIT

==== //depot/projects/vimage-commit2/src/sys/kern/kern_vimage.c#28 (text+ko) ====

@@ -48,6 +48,7 @@
 
 MALLOC_DEFINE(M_VIMAGE, "vimage", "vimage resource container");
 MALLOC_DEFINE(M_VNET, "vnet", "network stack control block");
+MALLOC_DEFINE(M_VPROCG, "vprocg", "process group control block");
 
 static TAILQ_HEAD(vnet_modlink_head, vnet_modlink) vnet_modlink_head;
 static TAILQ_HEAD(vnet_modpending_head, vnet_modlink) vnet_modpending_head;
@@ -300,6 +301,8 @@
 vi_init(void *unused)
 {
 #ifdef VIMAGE
+	struct vimage *vip;
+	struct vprocg *vprocg;
 	struct vnet *vnet;
 #endif
 
@@ -307,13 +310,27 @@
 	TAILQ_INIT(&vnet_modpending_head);
 
 #ifdef VIMAGE
+	LIST_INIT(&vimage_head);
+	LIST_INIT(&vprocg_head);
 	LIST_INIT(&vnet_head);
 
+	vip = malloc(sizeof(struct vimage), M_VIMAGE, M_NOWAIT | M_ZERO);
+	if (vip == NULL)
+		panic("malloc failed for struct vimage");
+	LIST_INSERT_HEAD(&vimage_head, vip, vi_le);
+
+	vprocg = malloc(sizeof(struct vprocg), M_VPROCG, M_NOWAIT | M_ZERO);
+	if (vprocg == NULL)
+		panic("malloc failed for struct vprocg");
+	vip->v_procg = vprocg;
+	LIST_INSERT_HEAD(&vprocg_head, vprocg, vprocg_le);
+
 	vnet = malloc(sizeof(struct vnet), M_VNET, M_NOWAIT | M_ZERO);
 	if (vnet == NULL)
 		panic("vi_alloc: malloc failed");
 	LIST_INSERT_HEAD(&vnet_head, vnet, vnet_le);
 	vnet->vnet_magic_n = VNET_MAGIC_N;
+	vip->v_net = vnet;
 
 	/* We MUST clear curvnet in vi_init_done before going SMP. */
 	curvnet = LIST_FIRST(&vnet_head);

==== //depot/projects/vimage-commit2/src/sys/sys/vimage.h#53 (text+ko) ====

@@ -44,20 +44,15 @@
 #define	VNET_DEBUG
 #endif
 
-struct vimage;
 struct vprocg;
 struct vnet;
-struct vi_req;
 struct kld_sym_lookup;
-struct ifnet;
 
 typedef int vnet_attach_fn(const void *);
 typedef int vnet_detach_fn(const void *);
 
 #ifndef VIMAGE_GLOBALS
 
-struct kld_sym_lookup;
-
 struct vnet_symmap {
 	char	*name;
 	size_t	 offset;
@@ -190,7 +185,6 @@
 
 struct vprocg {
 	LIST_ENTRY(vprocg) vprocg_le;
-	u_int		vprocg_ref;	/* reference count */
 	u_int		vprocg_id;	/* ID num */
 	u_int		nprocs;
 	char		_hostname[MAXHOSTNAMELEN];
@@ -298,16 +292,30 @@
 #define	IS_DEFAULT_VIMAGE(arg)	((arg)->vi_id == 0)
 #define	IS_DEFAULT_VNET(arg)	((arg)->vnet_id == 0)
 #else
-#define	IS_DEFAULT_VIMAGE(arg) 1
-#define	IS_DEFAULT_VNET(arg) 1
+#define	IS_DEFAULT_VIMAGE(arg)	1
+#define	IS_DEFAULT_VNET(arg)	1
 #endif
 
+#ifdef VIMAGE
 #define	TD_TO_VIMAGE(td)	(td)->td_ucred->cr_vimage
 #define	TD_TO_VNET(td)		(td)->td_ucred->cr_vimage->v_net
 #define	TD_TO_VPROCG(td)	(td)->td_ucred->cr_vimage->v_procg
 #define	P_TO_VIMAGE(p)		(p)->p_ucred->cr_vimage
 #define	P_TO_VNET(p)		(p)->p_ucred->cr_vimage->v_net
 #define	P_TO_VPROCG(p)		(p)->p_ucred->cr_vimage->v_procg
+#else
+#define	TD_TO_VIMAGE(td)	NULL
+#define	TD_TO_VNET(td)		NULL
+#define	P_TO_VIMAGE(p)		NULL
+#define	P_TO_VNET(p)		NULL
+#ifdef VIMAGE_GLOBALS
+#define	TD_TO_VPROCG(td)	NULL
+#define	P_TO_VPROCG(p)		NULL
+#else
+#define	TD_TO_VPROCG(td)	&vprocg_0
+#define	P_TO_VPROCG(p)		&vprocg_0
+#endif
+#endif
 
 /* Non-VIMAGE null-macros */
 #define	VNET_LIST_RLOCK()


More information about the p4-projects mailing list