DF-1044 / fix.diff
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 } |