From owner-p4-projects@FreeBSD.ORG Wed Apr 26 04:28:01 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id CC34816A403; Wed, 26 Apr 2006 04:28:01 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 93D0616A401 for ; Wed, 26 Apr 2006 04:28:01 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 46C4143D46 for ; Wed, 26 Apr 2006 04:28:01 +0000 (GMT) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id k3Q4S1fr033225 for ; Wed, 26 Apr 2006 04:28:01 GMT (envelope-from jb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k3Q4S00P033222 for perforce@freebsd.org; Wed, 26 Apr 2006 04:28:00 GMT (envelope-from jb@freebsd.org) Date: Wed, 26 Apr 2006 04:28:00 GMT Message-Id: <200604260428.k3Q4S00P033222@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 96128 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: Wed, 26 Apr 2006 04:28:02 -0000 http://perforce.freebsd.org/chv.cgi?CH=96128 Change 96128 by jb@jb_freebsd2 on 2006/04/26 04:27:13 Update my hacks. *HELP* This is an area that I will definitely need help with. The function being executed here needs to be called with pre-emption disabled. This is being used in the simple case of "dtrace -n BEGIN" (which is the simplest DTrace you can do), to swap buffers without being interrupted when it is time to gather up a buffer full and return it via an ioctl. The buffer change can't be interrupted because that might allow another probe to add to the buffer that is being uploaded, causing it to get mis-reported. Affected files ... .. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_hacks.c#7 edit Differences ... ==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_hacks.c#7 (text+ko) ==== @@ -133,10 +133,12 @@ void dtrace_vtime_enable(void) { + printf("%s:\n",__FUNCTION__); } void dtrace_vtime_disable(void) { + printf("%s:\n",__FUNCTION__); } void dtrace_vpanic(const char *fmt, __va_list args) @@ -147,47 +149,57 @@ uint32_t dtrace_cas32(uint32_t *a, uint32_t b, uint32_t c) { + printf("%s:\n",__FUNCTION__); return 0; } void *dtrace_casptr(void *a, void *b, void *c) { + printf("%s:\n",__FUNCTION__); return NULL; } dtrace_icookie_t dtrace_interrupt_disable(void) { + printf("%s:\n",__FUNCTION__); return 0; } void dtrace_interrupt_enable(dtrace_icookie_t a) { + printf("%s:\n",__FUNCTION__); } void dtrace_getpcstack(pc_t *a, int b, int c, uint32_t *d) { + printf("%s:\n",__FUNCTION__); } void dtrace_getupcstack(uint64_t *a, int b) { + printf("%s:\n",__FUNCTION__); } int dtrace_getstackdepth(int a) { + printf("%s:\n",__FUNCTION__); return 0; } uint64_t dtrace_getarg(int a, int b) { + printf("%s:\n",__FUNCTION__); return 0; } int dtrace_getipl(void) { + printf("%s:\n",__FUNCTION__); return 0; } uintptr_t dtrace_caller(int a) { + printf("%s:\n",__FUNCTION__); return 0; } boolean_t @@ -195,13 +207,42 @@ { return 0; } +#ifdef DOODAD +static int +dtrace_xcall_func(dtrace_xcall_t func, void *arg) +{ + (*func)(arg); + + return (0); +} +#endif void -dtrace_xcall(processorid_t a, dtrace_xcall_t b, void *c) +dtrace_xcall(processorid_t cpu, dtrace_xcall_t func, void *arg) { + printf("%s:\n",__FUNCTION__); +#ifdef DOODAD + cpuset_t set; + + CPUSET_ZERO(set); + + if (cpu == DTRACE_CPUALL) { + CPUSET_ALL(set); + } else { + CPUSET_ADD(set, cpu); + } + + kpreempt_disable(); + xc_sync((xc_arg_t)func, (xc_arg_t)arg, 0, X_CALL_HIPRI, set, + (xc_func_t)dtrace_xcall_func); + kpreempt_enable(); +#else + (*func)(arg); +#endif } taskqid_t taskq_dispatch(taskq_t *a, task_func_t b, void *c, uint_t d) { + printf("%s:\n",__FUNCTION__); return 0; } int