diff -NurpP --minimal linux-2.6.19-vs2.2.0-rc4/kernel/vserver/context.c linux-2.6.19-vs2.2.0-rc4.1/kernel/vserver/context.c --- linux-2.6.19-vs2.2.0-rc4/kernel/vserver/context.c 2006-12-07 23:58:43 +0100 +++ linux-2.6.19-vs2.2.0-rc4.1/kernel/vserver/context.c 2006-12-10 22:22:04 +0100 @@ -53,6 +53,16 @@ atomic_t vx_global_ctotal = ATOMIC_INIT( atomic_t vx_global_cactive = ATOMIC_INIT(0); +kmem_cache_t *vx_info_cachep __read_mostly; + +void __init vx_info_cache_init(void) +{ + vx_info_cachep = kmem_cache_create("vx_info_cache", + sizeof(struct vx_info), 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); +} + + /* now inactive context structures */ static struct hlist_head vx_info_inactive = HLIST_HEAD_INIT; @@ -72,8 +82,7 @@ static struct vx_info *__alloc_vx_info(x vxdprintk(VXD_CBIT(xid, 0), "alloc_vx_info(%d)*", xid); - /* would this benefit from a slab cache? */ - new = kmalloc(sizeof(struct vx_info), GFP_KERNEL); + new = kmem_cache_alloc(vx_info_cachep, SLAB_KERNEL); if (!new) return 0; @@ -160,7 +169,7 @@ static void __dealloc_vx_info(struct vx_ #ifdef CONFIG_SMP free_percpu(vxi->ptr_pc); #endif - kfree(vxi); + kmem_cache_free(vx_info_cachep, (void *)(vxi)); atomic_dec(&vx_global_ctotal); } diff -NurpP --minimal linux-2.6.19-vs2.2.0-rc4/kernel/vserver/init.c linux-2.6.19-vs2.2.0-rc4.1/kernel/vserver/init.c --- linux-2.6.19-vs2.2.0-rc4/kernel/vserver/init.c 2006-11-09 01:00:34 +0100 +++ linux-2.6.19-vs2.2.0-rc4.1/kernel/vserver/init.c 2006-12-10 22:29:17 +0100 @@ -16,6 +16,8 @@ int vserver_register_sysctl(void); void vserver_unregister_sysctl(void); +void vx_info_cache_init(void); + static int __init init_vserver(void) { @@ -24,6 +26,8 @@ static int __init init_vserver(void) #ifdef CONFIG_VSERVER_DEBUG vserver_register_sysctl(); #endif + vx_info_cache_init(); + return ret; }