Index: cxgb_sge.c =================================================================== --- cxgb_sge.c (revision 189396) +++ cxgb_sge.c (working copy) @@ -371,7 +371,8 @@ nqsets = min(SGE_QSETS, mp_ncpus*4); - fl_q_size = min(nmbclusters/(3*nqsets), FL_Q_SIZE); + if (fl_q_size == 0) + fl_q_size = min(nmbclusters/(3*nqsets), FL_Q_SIZE); while (!powerof2(fl_q_size)) fl_q_size--; @@ -3463,9 +3464,15 @@ SYSCTL_ADD_UINT(ctx, qspoidlist, OID_AUTO, "fl0_empty", CTLFLAG_RD, &qs->fl[0].empty, 0, "freelist #0 empty"); + SYSCTL_ADD_UINT(ctx, qspoidlist, OID_AUTO, "fl0_size", + CTLFLAG_RD, &qs->fl[0].size, 0, + "freelist #0 size"); SYSCTL_ADD_UINT(ctx, qspoidlist, OID_AUTO, "fl1_empty", CTLFLAG_RD, &qs->fl[1].empty, 0, "freelist #1 empty"); + SYSCTL_ADD_UINT(ctx, qspoidlist, OID_AUTO, "fl1_size", + CTLFLAG_RD, &qs->fl[1].size, 0, + "freelist #1 size"); rspqpoid = SYSCTL_ADD_NODE(ctx, qspoidlist, OID_AUTO, rspq_name, CTLFLAG_RD, NULL, "rspq statistics"); Index: cxgb_main.c =================================================================== --- cxgb_main.c (revision 189396) +++ cxgb_main.c (working copy) @@ -220,6 +220,16 @@ /* + * The driver auto-calculates the length of the non-jumbo flow queue + * for each queue set. Setting this tunable overrides the + * calculation. + */ +extern int fl_q_size; +TUNABLE_INT("hw.cxgb.fl_q_size", &fl_q_size); +SYSCTL_INT(_hw_cxgb, OID_AUTO, fl_q_size, CTLFLAG_RDTUN, &fl_q_size, 0, + "non-jumbo flow queue size"); + +/* * The driver uses an auto-queue algorithm by default. * To disable it and force a single queue-set per port, use singleq = 1. */