From owner-p4-projects@FreeBSD.ORG Thu May 7 03:54:25 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 17BB41065672; Thu, 7 May 2009 03:54:25 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B2FE4106566B for ; Thu, 7 May 2009 03:54:24 +0000 (UTC) (envelope-from zec@fer.hr) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id A18198FC18 for ; Thu, 7 May 2009 03:54:24 +0000 (UTC) (envelope-from zec@fer.hr) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n473sOPg094213 for ; Thu, 7 May 2009 03:54:24 GMT (envelope-from zec@fer.hr) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n473sOgH094211 for perforce@freebsd.org; Thu, 7 May 2009 03:54:24 GMT (envelope-from zec@fer.hr) Date: Thu, 7 May 2009 03:54:24 GMT Message-Id: <200905070354.n473sOgH094211@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zec@fer.hr using -f From: Marko Zec To: Perforce Change Reviews Cc: Subject: PERFORCE change 161708 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 May 2009 03:54:25 -0000 http://perforce.freebsd.org/chv.cgi?CH=161708 Change 161708 by zec@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 #include #include +#include #include #include +#include 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 #include #include +#include #if defined(INET) || defined(INET6) #include @@ -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()