Index: sys/kern/subr_gtaskqueue.c =================================================================== --- sys/kern/subr_gtaskqueue.c +++ sys/kern/subr_gtaskqueue.c @@ -897,9 +897,9 @@ if (tqg_smp_started && !(qgroup->tqg_flags & TQG_ADJUSTED)) { uintptr_t cpuid = cpu + 1; qgroup->adjust_func((void *)cpuid); + if ((error = taskqgroup_adjust_deferred(qgroup, cpu))) + return (error); } - if ((error = taskqgroup_adjust_deferred(qgroup, cpu))) - return (error); mtx_lock(&qgroup->tqg_lock); if (tqg_smp_started) { @@ -1075,9 +1075,10 @@ __func__, cnt, stride, mp_ncpus, tqg_smp_started); return (EINVAL); } - if (qgroup->tqg_adjusting) { - printf("%s: failed: adjusting\n", __func__); - return (EBUSY); + while (qgroup->tqg_adjusting) { + mtx_unlock(&qgroup->tqg_lock); + cpu_spinwait(); + mtx_lock(&qgroup->tqg_lock); } /* No work to be done */ if (qgroup->tqg_cnt == cnt) Index: sys/net/iflib.c =================================================================== --- sys/net/iflib.c +++ sys/net/iflib.c @@ -5195,7 +5195,9 @@ } if (cpuid > ctx->ifc_cpuid_highest) ctx->ifc_cpuid_highest = cpuid; +#ifdef EARLY_AP_STARTUP MPASS(gtask->gt_taskqueue != NULL); +#endif return 0; }