Index: sys/kern/subr_gtaskqueue.c =================================================================== --- sys/kern/subr_gtaskqueue.c +++ sys/kern/subr_gtaskqueue.c @@ -797,6 +797,8 @@ qid = i; break; } + if (i == qgroup->tqg_cnt) + panic("taskqgroup_adjust: Failed to pick a qid."); } qgroup->tqg_queue[qid].tgc_cnt++; LIST_INSERT_HEAD(&qgroup->tqg_queue[qid].tgc_tasks, gtask, Index: sys/net/iflib.c =================================================================== --- sys/net/iflib.c +++ sys/net/iflib.c @@ -4303,7 +4303,8 @@ /* clear up to the qid'th bit */ for (i = 0; i < qid; i++) { cpuid = CPU_FFS(cpus); - CPU_CLR(cpuid, cpus); + KASSERT(cpuid != 0, ("find_nth: No CPU %d", i)); + CPU_CLR(cpuid - 1, cpus); } } @@ -4317,7 +4318,7 @@ iflib_filter_info_t info; cpuset_t cpus; gtask_fn_t *fn; - int tqrid, err; + int tqrid, err, cpu; void *q; info = &ctx->ifc_filter_info; @@ -4364,7 +4365,9 @@ return (err); if (tqrid != -1) { find_nth(ctx, &cpus, qid); - taskqgroup_attach_cpu(tqg, gtask, q, CPU_FFS(&cpus), irq->ii_rid, name); + cpu = CPU_FFS(&cpus); + KASSERT(cpu != 0, ("no CPU at qid %d", qid)); + taskqgroup_attach_cpu(tqg, gtask, q, cpu - 1, irq->ii_rid, name); } else taskqgroup_attach(tqg, gtask, q, tqrid, name);