aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/sfc
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2012-02-21 18:22:00 -0500
committerBen Hutchings <bhutchings@solarflare.com>2012-02-22 15:48:08 -0500
commitc92aaff18e0a48f693678105343160e0bd032dfa (patch)
tree363bbef1367573f47e9bf93e67e1d1d6daf22b2c /drivers/net/ethernet/sfc
parent01cb543db8a2d2dbcea5f357365ce1327ac46193 (diff)
sfc: Reverse initial buffer table allocation to allow for later resizing
We have a very simple way of allocating buffer table entries to queues, which is just to take the next one available. The extra channels are the highest numbered channels but they need to be allocated the lowest entries so that the traffic channels can be allocated new entries without any collisions. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Diffstat (limited to 'drivers/net/ethernet/sfc')
-rw-r--r--drivers/net/ethernet/sfc/efx.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
index ac571cf14485..c7004dcb5838 100644
--- a/drivers/net/ethernet/sfc/efx.c
+++ b/drivers/net/ethernet/sfc/efx.c
@@ -585,7 +585,12 @@ static int efx_probe_channels(struct efx_nic *efx)
585 /* Restart special buffer allocation */ 585 /* Restart special buffer allocation */
586 efx->next_buffer_table = 0; 586 efx->next_buffer_table = 0;
587 587
588 efx_for_each_channel(channel, efx) { 588 /* Probe channels in reverse, so that any 'extra' channels
589 * use the start of the buffer table. This allows the traffic
590 * channels to be resized without moving them or wasting the
591 * entries before them.
592 */
593 efx_for_each_channel_rev(channel, efx) {
589 rc = efx_probe_channel(channel); 594 rc = efx_probe_channel(channel);
590 if (rc) { 595 if (rc) {
591 netif_err(efx, probe, efx->net_dev, 596 netif_err(efx, probe, efx->net_dev,