PERFORCE change 154663 for review
Marko Zec
zec at FreeBSD.org
Sun Dec 14 13:46:45 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=154663
Change 154663 by zec at zec_tca51 on 2008/12/14 21:45:46
Mostly futile attempt at diff reductions head / vimage.
Affected files ...
.. //depot/projects/vimage/src/sys/conf/files#49 edit
.. //depot/projects/vimage/src/sys/contrib/pf/net/pfvar.h#9 edit
.. //depot/projects/vimage/src/sys/kern/kern_vimage.c#73 edit
.. //depot/projects/vimage/src/sys/netinet6/in6_src.c#32 edit
.. //depot/projects/vimage/src/sys/netinet6/nd6.c#40 edit
.. //depot/projects/vimage/src/sys/netinet6/nd6.h#13 edit
.. //depot/projects/vimage/src/sys/netipsec/ipsec.c#36 edit
.. //depot/projects/vimage/src/sys/sys/vimage.h#76 edit
Differences ...
==== //depot/projects/vimage/src/sys/conf/files#49 (text+ko) ====
@@ -1952,9 +1952,8 @@
kern/kern_timeout.c standard
kern/kern_umtx.c standard
kern/kern_uuid.c standard
-kern/kern_vimage.c optional vimage
+kern/kern_vimage.c standard
kern/kern_xxx.c standard
-kern/kern_vimage.c standard
kern/link_elf.c standard
kern/linker_if.m standard
kern/md4c.c optional netsmb
==== //depot/projects/vimage/src/sys/contrib/pf/net/pfvar.h#9 (text+ko) ====
@@ -1856,15 +1856,6 @@
pf_osfp_validate(void);
/*
- * Stack virtualization support.
- */
-#ifdef VIMAGE
-struct vnet_pf {
- struct vnet *parent_vnet;
-};
-#endif
-
-/*
* Symbol translation macros
*/
#define INIT_VNET_PF(vnet) \
==== //depot/projects/vimage/src/sys/kern/kern_vimage.c#73 (text+ko) ====
@@ -66,7 +66,7 @@
//#define DEBUG_ORDERING
-MALLOC_DEFINE(M_VIMAGE, "vimage", "virtual image resource container");
+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");
MALLOC_DEFINE(M_VCPU, "vcpu", "cpu resource control block");
@@ -84,42 +84,8 @@
#endif
#endif
-#ifdef VI_PREALLOC_SIZE
-/*
- * A private memory allocator can be enabled by setting VI_PREALLOC_SIZE
- * to amount of memory (in bytes) to be reserved for the allocator at
- * boot time. This pool is guaranteed to reside on a 4M superpage(s) on
- * i386 and amd64, thus potentially reducing TLB trashing.
- *
- * So far I couldn't observe any significant performance impact of using
- * this allocator vs. the standard malloc(), whereas in FreeBSD 4.11
- * days I recall using "uninitialized data" storage vs. malloc() would
- * be an instant win... Is it possible that these days all malloc'ed
- * kernel storage is automagically placed on 4M superpages, so that this
- * effort is redundant? Who knows... Therefore this code is disabled by
- * default, so vi_alloc() and vi_free() simply resolve to standard
- * malloc() and free().
- */
-
-static void *vi_malloc(unsigned long, struct malloc_type *, int);
-static void vi_free(void *, struct malloc_type *);
-
-struct vi_mtrack {
- LIST_ENTRY(vi_mtrack) vmt_le;
- char *vmt_addr;
- size_t vmt_size;
- int vmt_flags;
-};
-
-static char vi_mpool[VI_PREALLOC_SIZE];
-static struct uma_zone *vi_mtrack_zone;
-static LIST_HEAD(, vi_mtrack) vi_mem_free_head;
-static LIST_HEAD(, vi_mtrack) vi_mem_alloc_head;
-static int vi_mpool_fail_cnt = 0;
-#else
#define vi_malloc(addr, type, flags) malloc((addr), (type), (flags))
#define vi_free(addr, type) free((addr), (type))
-#endif /* VI_PREALLOC_SIZE */
#ifndef VIMAGE_GLOBALS
static TAILQ_HEAD(vnet_modlink_head, vnet_modlink) vnet_modlink_head;
@@ -869,19 +835,6 @@
static void
vi_init(void *unused)
{
-#ifdef VI_PREALLOC_SIZE
- struct vi_mtrack *vmt;
-
- /* Initialize our private memory allocator */
- LIST_INIT(&vi_mem_free_head);
- LIST_INIT(&vi_mem_alloc_head);
- vi_mtrack_zone = uma_zcreate("vi_mtrack", sizeof(struct vi_mtrack),
- NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE);
- vmt = uma_zalloc(vi_mtrack_zone, M_NOWAIT);
- vmt->vmt_addr = vi_mpool;
- vmt->vmt_size = VI_PREALLOC_SIZE;
- LIST_INSERT_HEAD(&vi_mem_free_head, vmt, vmt_le);
-#endif /* VI_PREALLOC_SIZE */
/* vnet module list is both forward and reverse traversable */
TAILQ_INIT(&vnet_modlink_head);
@@ -924,77 +877,6 @@
SYSINIT(vimage, SI_SUB_VIMAGE, SI_ORDER_FIRST, vi_init, NULL);
SYSINIT(vimage_done, SI_SUB_VIMAGE_DONE, SI_ORDER_FIRST, vi_init_done, NULL);
-#ifdef VI_PREALLOC_SIZE
-void *
-vi_malloc(unsigned long size, struct malloc_type *type, int flags)
-{
- void *addr;
- struct vi_mtrack *vmt = NULL;
- struct vi_mtrack *vmt_iter;
-
- /* Attempt to find a free chunk in our private pool */
- LIST_FOREACH(vmt_iter, &vi_mem_free_head, vmt_le)
- if (vmt_iter->vmt_size >= size &&
- (vmt == NULL || vmt_iter->vmt_size < vmt->vmt_size)) {
- vmt = vmt_iter;
- /* Exact fit is an optimal choice, we are done. */
- if (vmt_iter->vmt_size == size)
- break;
- }
-
- /* Not (enough) free space in our pool, resort to malloc() */
- if (vmt == NULL) {
- if (vi_mpool_fail_cnt == 0)
- printf("vi_mpool exhausted,"
- "consider increasing VI_PREALLOC_SIZE\n");
- vi_mpool_fail_cnt++;
- addr = malloc(size, type, flags);
- return addr;
- }
-
- addr = vmt->vmt_addr;
- if (vmt->vmt_size == size) {
- /* Move the descriptor from free to allocated list */
- LIST_REMOVE(vmt, vmt_le);
- LIST_INSERT_HEAD(&vi_mem_alloc_head, vmt, vmt_le);
- } else {
- /* Shrink the existing free space block */
- vmt->vmt_addr += size;
- vmt->vmt_size -= size;
-
- /* Create a new descriptor and place it on allocated list */
- vmt = uma_zalloc(vi_mtrack_zone, M_NOWAIT);
- vmt->vmt_addr = addr;
- vmt->vmt_size = size;
- LIST_INSERT_HEAD(&vi_mem_alloc_head, vmt, vmt_le);
- }
-
- bzero(addr, size);
- return addr;
-}
-
-void
-vi_free(void *addr, struct malloc_type *type)
-{
- struct vi_mtrack *vmt;
-
- /* Attempt to find the chunk in our allocated pool */
- LIST_FOREACH(vmt, &vi_mem_alloc_head, vmt_le)
- if (vmt->vmt_addr == addr)
- break;
-
- /* Not found in our private pool, resort to free() */
- if (vmt == NULL) {
- free(addr, type);
- return;
- }
-
- /* Move the descriptor from allocated to free list */
- LIST_REMOVE(vmt, vmt_le);
- LIST_INSERT_HEAD(&vi_mem_free_head, vmt, vmt_le);
-}
-#endif /* VI_PREALLOC_SIZE */
-
#ifdef DDB
static void
db_vnet_ptr(void *arg)
==== //depot/projects/vimage/src/sys/netinet6/in6_src.c#32 (text+ko) ====
@@ -1003,8 +1003,10 @@
struct in6_addrpolicy ape_policy;
};
+TAILQ_HEAD(addrsel_policyhead, addrsel_policyent);
+
#ifdef VIMAGE_GLOBALS
-TAILQ_HEAD(, addrsel_policyent) addrsel_policytab;
+struct addrsel_policyhead addrsel_policytab;
#endif
static void
==== //depot/projects/vimage/src/sys/netinet6/nd6.c#40 (text+ko) ====
@@ -154,8 +154,8 @@
V_nd6_recalc_reachtm_interval = ND6_RECALC_REACHTM_INTERVAL;
+ V_dad_ignore_ns = 0; /* ignore NS in DAD - specwise incorrect*/
V_dad_maxtry = 15; /* max # of *tries* to transmit DAD packet */
- V_dad_ignore_ns = 0; /* ignore NS in DAD - specwise incorrect*/
V_llinfo_nd6.ln_next = &V_llinfo_nd6;
V_llinfo_nd6.ln_prev = &V_llinfo_nd6;
==== //depot/projects/vimage/src/sys/netinet6/nd6.h#13 (text+ko) ====
@@ -341,6 +341,7 @@
extern struct nd_prhead nd_prefix;
extern int nd6_debug;
extern int nd6_onlink_ns_rfc4861;
+
extern struct callout nd6_timer_ch;
/* nd6_rtr.c */
==== //depot/projects/vimage/src/sys/netipsec/ipsec.c#36 (text+ko) ====
@@ -108,8 +108,8 @@
static int vnet_ipsec_idetach(const void *);
#endif
+#ifdef VIMAGE_GLOBALS
/* NB: name changed so netstat doesn't use it */
-#ifdef VIMAGE_GLOBALS
struct ipsecstat ipsec4stat;
struct secpolicy ip4_def_policy;
int ipsec_debug;
==== //depot/projects/vimage/src/sys/sys/vimage.h#76 (text+ko) ====
@@ -297,27 +297,27 @@
#else /* !VIMAGE */
/* Non-VIMAGE null-macros */
-#define CURVNET_SET(arg)
-#define CURVNET_SET_QUIET(arg)
-#define CURVNET_RESTORE()
-#define VNET_ASSERT(condition)
-#define INIT_FROM_VNET(vnet, modindex, modtype, sym)
-#define VNET_ITERATOR_DECL(arg)
-#define VNET_FOREACH(arg)
-#define VNET_LIST_RLOCK()
-#define VNET_LIST_RUNLOCK()
-#define INIT_VPROCG(arg)
-#define VPROCG_ITERLOOP_BEGIN()
-#define VPROCG_ITERLOOP_END()
-#define INIT_VCPU(arg)
-#define TD_TO_VIMAGE(td)
-#define TD_TO_VNET(td)
-#define TD_TO_VPROCG(td)
-#define TD_TO_VCPU(td)
-#define P_TO_VIMAGE(p)
-#define P_TO_VNET(p)
-#define P_TO_VPROCG(p)
-#define P_TO_VCPU(p)
+#define CURVNET_SET(arg)
+#define CURVNET_SET_QUIET(arg)
+#define CURVNET_RESTORE()
+#define VNET_ASSERT(condition)
+#define INIT_FROM_VNET(vnet, modindex, modtype, sym)
+#define VNET_ITERATOR_DECL(arg)
+#define VNET_FOREACH(arg)
+#define VNET_LIST_RLOCK()
+#define VNET_LIST_RUNLOCK()
+#define INIT_VPROCG(arg)
+#define VPROCG_ITERLOOP_BEGIN()
+#define VPROCG_ITERLOOP_END()
+#define INIT_VCPU(arg)
+#define TD_TO_VIMAGE(td)
+#define TD_TO_VNET(td)
+#define TD_TO_VPROCG(td)
+#define TD_TO_VCPU(td)
+#define P_TO_VIMAGE(p)
+#define P_TO_VNET(p)
+#define P_TO_VPROCG(p)
+#define P_TO_VCPU(p)
#endif /* !VIMAGE */
More information about the p4-projects
mailing list