Module Name:    src
Committed By:   riastradh
Date:           Fri Oct 28 21:52:02 UTC 2022

Modified Files:
        src/sys/kern: kern_softint.c

Log Message:
softint(9): Sprinkle dtrace probes.


To generate a diff of this commit:
cvs rdiff -u -r1.71 -r1.72 src/sys/kern/kern_softint.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/kern_softint.c
diff -u src/sys/kern/kern_softint.c:1.71 src/sys/kern/kern_softint.c:1.72
--- src/sys/kern/kern_softint.c:1.71	Sat Sep  3 02:48:00 2022
+++ src/sys/kern/kern_softint.c	Fri Oct 28 21:52:02 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_softint.c,v 1.71 2022/09/03 02:48:00 thorpej Exp $	*/
+/*	$NetBSD: kern_softint.c,v 1.72 2022/10/28 21:52:02 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008, 2019, 2020 The NetBSD Foundation, Inc.
@@ -170,7 +170,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_softint.c,v 1.71 2022/09/03 02:48:00 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_softint.c,v 1.72 2022/10/28 21:52:02 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -184,6 +184,7 @@ __KERNEL_RCSID(0, "$NetBSD: kern_softint
 #include <sys/cpu.h>
 #include <sys/xcall.h>
 #include <sys/psref.h>
+#include <sys/sdt.h>
 
 #include <uvm/uvm_extern.h>
 
@@ -223,6 +224,31 @@ u_int		softint_timing;
 static u_int	softint_max;
 static kmutex_t	softint_lock;
 
+SDT_PROBE_DEFINE4(sdt, kernel, softint, establish,
+    "void *"/*sih*/,
+    "void (*)(void *)"/*func*/,
+    "void *"/*arg*/,
+    "unsigned"/*flags*/);
+
+SDT_PROBE_DEFINE1(sdt, kernel, softint, disestablish,
+    "void *"/*sih*/);
+
+SDT_PROBE_DEFINE2(sdt, kernel, softint, schedule,
+    "void *"/*sih*/,
+    "struct cpu_info *"/*ci*/);
+
+SDT_PROBE_DEFINE4(sdt, kernel, softint, entry,
+    "void *"/*sih*/,
+    "void (*)(void *)"/*func*/,
+    "void *"/*arg*/,
+    "unsigned"/*flags*/);
+
+SDT_PROBE_DEFINE4(sdt, kernel, softint, return,
+    "void *"/*sih*/,
+    "void (*)(void *)"/*func*/,
+    "void *"/*arg*/,
+    "unsigned"/*flags*/);
+
 /*
  * softint_init_isr:
  *
@@ -382,6 +408,8 @@ softint_establish(u_int flags, void (*fu
 	}
 	mutex_exit(&softint_lock);
 
+	SDT_PROBE4(sdt, kernel, softint, establish,  sih, func, arg, flags);
+
 	return sih;
 }
 
@@ -425,6 +453,12 @@ softint_disestablish(void *arg)
 	 */
 	xc_barrier(XC_HIGHPRI_IPL(sh->sh_isr->si_ipl));
 
+	/*
+	 * Notify dtrace probe when the old softint can't be running
+	 * any more, but before it can be recycled for a new softint.
+	 */
+	SDT_PROBE1(sdt, kernel, softint, disestablish,  arg);
+
 	/* Clear the handler on each CPU. */
 	mutex_enter(&softint_lock);
 	for (CPU_INFO_FOREACH(cii, ci)) {
@@ -451,6 +485,8 @@ softint_schedule(void *arg)
 	uintptr_t offset;
 	int s;
 
+	SDT_PROBE2(sdt, kernel, softint, schedule,  arg, /*ci*/NULL);
+
 	/*
 	 * If this assert fires, rather than disabling preemption explicitly
 	 * to make it stop, consider that you are probably using a softint
@@ -503,6 +539,7 @@ softint_schedule_cpu(void *arg, struct c
 		const uintptr_t offset = (uintptr_t)arg;
 		const softhand_t *sh;
 
+		SDT_PROBE2(sdt, kernel, softint, schedule,  arg, ci);
 		sh = (const softhand_t *)((const uint8_t *)sc + offset);
 		KASSERT((sh->sh_flags & SOFTINT_RCPU) != 0);
 		ipi_trigger(sh->sh_ipi_id, ci);
@@ -550,6 +587,10 @@ softint_execute(lwp_t *l, int s)
 		splx(s);
 
 		/* Run the handler. */
+		SDT_PROBE4(sdt, kernel, softint, entry,
+		    ((const char *)sh -
+			(const char *)curcpu()->ci_data.cpu_softcpu),
+		    sh->sh_func, sh->sh_arg, sh->sh_flags);
 		if (__predict_true((sh->sh_flags & SOFTINT_MPSAFE) != 0)) {
 			(*sh->sh_func)(sh->sh_arg);
 		} else {
@@ -557,6 +598,10 @@ softint_execute(lwp_t *l, int s)
 			(*sh->sh_func)(sh->sh_arg);
 			KERNEL_UNLOCK_ONE(l);
 		}
+		SDT_PROBE4(sdt, kernel, softint, return,
+		    ((const char *)sh -
+			(const char *)curcpu()->ci_data.cpu_softcpu),
+		    sh->sh_func, sh->sh_arg, sh->sh_flags);
 
 		/* Diagnostic: check that spin-locks have not leaked. */
 		KASSERTMSG(curcpu()->ci_mtx_count == 0,

Reply via email to