DragonFlyBSD Kernel Audit
DF-1044 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/platform/vkernel64/platform/busdma_machdep.c b/sys/platform/vkernel64/platform/busdma_machdep.c
--- a/sys/platform/vkernel64/platform/busdma_machdep.c
+++ b/sys/platform/vkernel64/platform/busdma_machdep.c
@@ -1117,7 +1117,7 @@
 	BZ_UNLOCK(bz);
 
 	if (wait_map != NULL)
-		add_map_callback(map);
+		add_map_callback(wait_map);
 }
 
 static bus_addr_t
@@ -1212,7 +1212,17 @@
 	rel_mplock();
 	crit_exit();
 #else
-	panic("%s uncoded", __func__);
+	/*
+	 * DF-1044: vkernel64 has no busdma_swi() softint wiring (the SWI
+	 * handler below is #ifdef notyet and is never registered, unlike
+	 * pc64/x86_64/vm_machdep.c:384-385).  Panicking here kills the
+	 * whole vkernel for a recoverable bounce-pool exhaustion; instead
+	 * log the dropped callback so the affected I/O fails rather than
+	 * taking down the virtual kernel.  The proper fix is to port the
+	 * busdma_swi()/swi_vm() machinery from pc64.
+	 */
+	kprintf("%s: bounce deferred-completion not wired in vkernel64; "
+	    "map %p dropped\n", __func__, map);
 #endif
 }