From owner-p4-projects@FreeBSD.ORG Thu Feb 14 05:19:04 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7058716A524; Thu, 14 Feb 2008 05:19:04 +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 0880016A420 for ; Thu, 14 Feb 2008 05:19:04 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id E11A113C44B for ; Thu, 14 Feb 2008 05:19:03 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m1E5J3oV005173 for ; Thu, 14 Feb 2008 05:19:03 GMT (envelope-from jb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m1E5J39C005170 for perforce@freebsd.org; Thu, 14 Feb 2008 05:19:03 GMT (envelope-from jb@freebsd.org) Date: Thu, 14 Feb 2008 05:19:03 GMT Message-Id: <200802140519.m1E5J39C005170@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jb@freebsd.org using -f From: John Birrell To: Perforce Change Reviews Cc: Subject: PERFORCE change 135366 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, 14 Feb 2008 05:19:04 -0000 http://perforce.freebsd.org/chv.cgi?CH=135366 Change 135366 by jb@jb_freebsd1 on 2008/02/14 05:18:40 Add probes for the dtmalloc DTrace provider. Affected files ... .. //depot/projects/dtrace/src/sys/kern/kern_malloc.c#7 edit Differences ... ==== //depot/projects/dtrace/src/sys/kern/kern_malloc.c#7 (text+ko) ==== @@ -46,6 +46,7 @@ __FBSDID("$FreeBSD: src/sys/kern/kern_malloc.c,v 1.162 2007/06/27 13:39:38 rwatson Exp $"); #include "opt_ddb.h" +#include "opt_kdtrace.h" #include "opt_vm.h" #include @@ -86,6 +87,12 @@ #include +#ifdef KDTRACE_HOOKS +#include + +dtrace_malloc_probe_func_t dtrace_malloc_probe; +#endif + /* * When realloc() is called, if the new size is sufficiently smaller than * the old size, realloc() will allocate a new, smaller block to avoid @@ -255,6 +262,15 @@ } if (zindx != -1) mtsp->mts_size |= 1 << zindx; + +#ifdef KDTRACE_HOOKS + if (dtrace_malloc_probe != NULL && + mtip->mti_probes[DTMALLOC_PROBE_MALLOC] != 0) + (dtrace_malloc_probe)(mtip->mti_probes[DTMALLOC_PROBE_MALLOC], + (uintptr_t) mtp, (uintptr_t) mtip, + (uintptr_t) mtsp, size, zindx); +#endif + critical_exit(); } @@ -283,6 +299,15 @@ mtsp = &mtip->mti_stats[curcpu]; mtsp->mts_memfreed += size; mtsp->mts_numfrees++; + +#ifdef KDTRACE_HOOKS + if (dtrace_malloc_probe != NULL && + mtip->mti_probes[DTMALLOC_PROBE_MALLOC] != 0) + (dtrace_malloc_probe)(mtip->mti_probes[DTMALLOC_PROBE_FREE], + (uintptr_t) mtp, (uintptr_t) mtip, + (uintptr_t) mtsp, size, 0); +#endif + critical_exit(); } @@ -804,6 +829,40 @@ SYSCTL_INT(_kern, OID_AUTO, malloc_count, CTLFLAG_RD, &kmemcount, 0, "Count of kernel malloc types"); +void +malloc_type_list(malloc_type_list_func_t *func, void *arg) +{ + struct malloc_type *mtp, **bufmtp; + int count, i; + size_t buflen; + + mtx_lock(&malloc_mtx); +restart: + mtx_assert(&malloc_mtx, MA_OWNED); + count = kmemcount; + mtx_unlock(&malloc_mtx); + + buflen = sizeof(struct malloc_type *) * count; + bufmtp = malloc(buflen, M_TEMP, M_WAITOK); + + mtx_lock(&malloc_mtx); + + if (count < kmemcount) { + free(bufmtp, M_TEMP); + goto restart; + } + + for (mtp = kmemstatistics, i = 0; mtp != NULL; mtp = mtp->ks_next, i++) + bufmtp[i] = mtp; + + mtx_unlock(&malloc_mtx); + + for (i = 0; i < count; i++) + (func)(bufmtp[i], arg); + + free(bufmtp, M_TEMP); +} + #ifdef DDB DB_SHOW_COMMAND(malloc, db_show_malloc) {