sfc: assign TXQs without gaps
Since we only allocate VIs for the number of TXQs we actually need, we cannot naively use "channel * TXQ_TYPES + txq" for the TXQ number, as this has gaps (when efx->tx_queues_per_channel < EFX_TXQ_TYPES) and thus overruns the driver's VI allocations, causing the firmware to reject the MC_CMD_INIT_TXQ based on INSTANCE. Thus, we distinguish INSTANCE (stored in tx_queue->queue) from LABEL (tx_queue->label); the former is allocated starting from 0 in efx_set_channels(), while the latter is simply the txq type (index in channel->tx_queue array). To simplify things, rather than changing tx_queues_per_channel after setting up TXQs, make Siena always probe its HIGHPRI queues at start of day, rather than deferring it until tc mqprio enables them. Signed-off-by: Edward Cree <ecree@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
69a704962e
commit
a81dcd85a7
@@ -189,6 +189,8 @@ struct efx_tx_buffer {
|
||||
*
|
||||
* @efx: The associated Efx NIC
|
||||
* @queue: DMA queue number
|
||||
* @label: Label for TX completion events.
|
||||
* Is our index within @channel->tx_queue array.
|
||||
* @tso_version: Version of TSO in use for this queue.
|
||||
* @channel: The associated channel
|
||||
* @core_txq: The networking core TX queue structure
|
||||
@@ -250,7 +252,8 @@ struct efx_tx_buffer {
|
||||
struct efx_tx_queue {
|
||||
/* Members which don't change on the fast path */
|
||||
struct efx_nic *efx ____cacheline_aligned_in_smp;
|
||||
unsigned queue;
|
||||
unsigned int queue;
|
||||
unsigned int label;
|
||||
unsigned int tso_version;
|
||||
struct efx_channel *channel;
|
||||
struct netdev_queue *core_txq;
|
||||
|
Reference in New Issue
Block a user