Index: head/sys/dev/e1000/if_igb.c =================================================================== --- head/sys/dev/e1000/if_igb.c +++ head/sys/dev/e1000/if_igb.c @@ -2460,6 +2460,9 @@ struct igb_queue *que = adapter->queues; int error, rid, vector = 0; int cpu_id = 0; +#ifdef RSS + cpuset_t cpu_mask; +#endif /* Be sure to start with all interrupts disabled */ E1000_WRITE_REG(&adapter->hw, E1000_IMC, ~0); @@ -2566,8 +2569,10 @@ * round-robin bucket -> queue -> CPU allocation. */ #ifdef RSS - taskqueue_start_threads_pinned(&que->tq, 1, PI_NET, - cpu_id, + CPU_ZERO(&cpu_mask); + CPU_SET(cpu_id, &cpu_mask); + taskqueue_start_threads_cpuset(&que->tq, 1, PI_NET, + &cpu_mask, "%s que (bucket %d)", device_get_nameunit(adapter->dev), cpu_id); Index: head/sys/dev/ixgbe/ixgbe.c =================================================================== --- head/sys/dev/ixgbe/ixgbe.c +++ head/sys/dev/ixgbe/ixgbe.c @@ -2373,6 +2373,9 @@ struct tx_ring *txr = adapter->tx_rings; int error, rid, vector = 0; int cpu_id = 0; +#ifdef RSS + cpuset_t cpu_mask; +#endif #ifdef RSS /* @@ -2460,8 +2463,10 @@ que->tq = taskqueue_create_fast("ixgbe_que", M_NOWAIT, taskqueue_thread_enqueue, &que->tq); #ifdef RSS - taskqueue_start_threads_pinned(&que->tq, 1, PI_NET, - cpu_id, + CPU_ZERO(&cpu_mask); + CPU_SET(cpu_id, &cpu_mask); + taskqueue_start_threads_cpuset(&que->tq, 1, PI_NET, + &cpu_mask, "%s (bucket %d)", device_get_nameunit(adapter->dev), cpu_id); Index: head/sys/dev/ixl/if_ixl.c =================================================================== --- head/sys/dev/ixl/if_ixl.c +++ head/sys/dev/ixl/if_ixl.c @@ -1880,6 +1880,9 @@ struct ixl_queue *que = vsi->queues; struct tx_ring *txr; int error, rid, vector = 0; +#ifdef RSS + cpuset_t cpu_mask; +#endif /* Admin Que is vector 0*/ rid = vector + 1; @@ -1942,8 +1945,10 @@ que->tq = taskqueue_create_fast("ixl_que", M_NOWAIT, taskqueue_thread_enqueue, &que->tq); #ifdef RSS - taskqueue_start_threads_pinned(&que->tq, 1, PI_NET, - cpu_id, "%s (bucket %d)", + CPU_ZERO(&cpu_mask); + CPU_SET(cpu_id, &cpu_mask); + taskqueue_start_threads_cpuset(&que->tq, 1, PI_NET, + &cpu_mask, "%s (bucket %d)", device_get_nameunit(dev), cpu_id); #else taskqueue_start_threads(&que->tq, 1, PI_NET, Index: head/sys/dev/ixl/if_ixlv.c =================================================================== --- head/sys/dev/ixl/if_ixlv.c +++ head/sys/dev/ixl/if_ixlv.c @@ -1382,6 +1382,9 @@ struct ixl_queue *que = vsi->queues; struct tx_ring *txr; int error, rid, vector = 1; +#ifdef RSS + cpuset_t cpu_mask; +#endif for (int i = 0; i < vsi->num_queues; i++, vector++, que++) { int cpu_id = i; @@ -1416,8 +1419,10 @@ que->tq = taskqueue_create_fast("ixlv_que", M_NOWAIT, taskqueue_thread_enqueue, &que->tq); #ifdef RSS - taskqueue_start_threads_pinned(&que->tq, 1, PI_NET, - cpu_id, "%s (bucket %d)", + CPU_ZERO(&cpu_mask); + CPU_SET(cpu_id, &cpu_mask); + taskqueue_start_threads_cpuset(&que->tq, 1, PI_NET, + &cpu_mask, "%s (bucket %d)", device_get_nameunit(dev), cpu_id); #else taskqueue_start_threads(&que->tq, 1, PI_NET,