diff options
author | Anton Blanchard <anton@samba.org> | 2011-10-14 01:30:59 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-10-17 19:00:54 -0400 |
commit | b95644685d530de5e9f9658bd8087e50840b831d (patch) | |
tree | 42e51c1e3fbfd52063972c61691b62fb6f3197f0 /drivers/net/ethernet/ibm/ehea/ehea_ethtool.c | |
parent | 3f7947b9f069c125ffdedc75ac9c4e3101fc2c6a (diff) |
ehea: Update multiqueue support
The ehea driver had some multiqueue support but was missing the last
few years of networking stack improvements:
- Use skb_record_rx_queue to record which queue an skb came in on.
- Remove the driver specific netif_queue lock and use the networking
stack transmit lock instead.
- Remove the driver specific transmit queue hashing and use
skb_get_queue_mapping instead.
- Use netif_tx_{start|stop|wake}_queue where appropriate. We can also
remove pr->queue_stopped and just check the queue status directly.
- Print all 16 queues in the ethtool stats.
We now enable multiqueue by default since it is a clear win on all my
testing so far.
v3:
[cascardo] fixed use_mcs parameter description
[cascardo] set ehea_ethtool_stats_keys as const
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/ibm/ehea/ehea_ethtool.c')
-rw-r--r-- | drivers/net/ethernet/ibm/ehea/ehea_ethtool.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_ethtool.c b/drivers/net/ethernet/ibm/ehea/ehea_ethtool.c index 7f642aef5e82..d185016c79ef 100644 --- a/drivers/net/ethernet/ibm/ehea/ehea_ethtool.c +++ b/drivers/net/ethernet/ibm/ehea/ehea_ethtool.c | |||
@@ -180,7 +180,7 @@ static void ehea_set_msglevel(struct net_device *dev, u32 value) | |||
180 | port->msg_enable = value; | 180 | port->msg_enable = value; |
181 | } | 181 | } |
182 | 182 | ||
183 | static char ehea_ethtool_stats_keys[][ETH_GSTRING_LEN] = { | 183 | static const char ehea_ethtool_stats_keys[][ETH_GSTRING_LEN] = { |
184 | {"sig_comp_iv"}, | 184 | {"sig_comp_iv"}, |
185 | {"swqe_refill_th"}, | 185 | {"swqe_refill_th"}, |
186 | {"port resets"}, | 186 | {"port resets"}, |
@@ -189,7 +189,6 @@ static char ehea_ethtool_stats_keys[][ETH_GSTRING_LEN] = { | |||
189 | {"IP cksum errors"}, | 189 | {"IP cksum errors"}, |
190 | {"Frame cksum errors"}, | 190 | {"Frame cksum errors"}, |
191 | {"num SQ stopped"}, | 191 | {"num SQ stopped"}, |
192 | {"SQ stopped"}, | ||
193 | {"PR0 free_swqes"}, | 192 | {"PR0 free_swqes"}, |
194 | {"PR1 free_swqes"}, | 193 | {"PR1 free_swqes"}, |
195 | {"PR2 free_swqes"}, | 194 | {"PR2 free_swqes"}, |
@@ -198,6 +197,14 @@ static char ehea_ethtool_stats_keys[][ETH_GSTRING_LEN] = { | |||
198 | {"PR5 free_swqes"}, | 197 | {"PR5 free_swqes"}, |
199 | {"PR6 free_swqes"}, | 198 | {"PR6 free_swqes"}, |
200 | {"PR7 free_swqes"}, | 199 | {"PR7 free_swqes"}, |
200 | {"PR8 free_swqes"}, | ||
201 | {"PR9 free_swqes"}, | ||
202 | {"PR10 free_swqes"}, | ||
203 | {"PR11 free_swqes"}, | ||
204 | {"PR12 free_swqes"}, | ||
205 | {"PR13 free_swqes"}, | ||
206 | {"PR14 free_swqes"}, | ||
207 | {"PR15 free_swqes"}, | ||
201 | {"LRO aggregated"}, | 208 | {"LRO aggregated"}, |
202 | {"LRO flushed"}, | 209 | {"LRO flushed"}, |
203 | {"LRO no_desc"}, | 210 | {"LRO no_desc"}, |
@@ -255,11 +262,7 @@ static void ehea_get_ethtool_stats(struct net_device *dev, | |||
255 | tmp += port->port_res[k].p_stats.queue_stopped; | 262 | tmp += port->port_res[k].p_stats.queue_stopped; |
256 | data[i++] = tmp; | 263 | data[i++] = tmp; |
257 | 264 | ||
258 | for (k = 0, tmp = 0; k < EHEA_MAX_PORT_RES; k++) | 265 | for (k = 0; k < 16; k++) |
259 | tmp |= port->port_res[k].queue_stopped; | ||
260 | data[i++] = tmp; | ||
261 | |||
262 | for (k = 0; k < 8; k++) | ||
263 | data[i++] = atomic_read(&port->port_res[k].swqe_avail); | 266 | data[i++] = atomic_read(&port->port_res[k].swqe_avail); |
264 | 267 | ||
265 | for (k = 0, tmp = 0; k < EHEA_MAX_PORT_RES; k++) | 268 | for (k = 0, tmp = 0; k < EHEA_MAX_PORT_RES; k++) |