PERFORCE change 96128 for review

John Birrell jb at FreeBSD.org
Wed Apr 26 04:28:02 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=96128

Change 96128 by jb at 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


More information about the p4-projects mailing list