ibmveth: Fix endian issues with rx_no_buffer statistic
PATCH 1/1 ibmveth: Fix endian issues with rx_no_buffer statistic
Hidden away in the last 8 bytes of the buffer_list page is a solitary statistic. It needs to be byte swapped or else ethtool -S will produce numbers that terrify the user.
Since we do this in multiple places, create a helper function with a comment explaining what is going on.
Signed-off-by Anton Blanchard <[email protected]>
---
drivers/net/ethernet/ibm/ibmveth.c +14 -4
@@ -292,6 +292,18 @@ failure:atomic_add (buffers_added, &(pool->available)); } +/* +* The final 8 bytes of the buffer list is a counter of frames dropped +* because there was not a buffer in the buffer list capable of holding +* the frame. +*/ +static void ibmveth_update_rx_no_buffer (struct ibmveth_adapter *adapter) +{ +__be64 *p = adapter->buffer_list_addr +4096 -8 ; + + adapter->rx_no_buffer =be64_to_cpup (p); +} +/* replenish routine */ static void ibmveth_replenish_task (struct ibmveth_adapter *adapter) {
@@ -307,8 +319,7 @@ static void ibmveth_replenish_task(strucibmveth_replenish_buffer_pool (adapter, pool); } - adapter->rx_no_buffer = *(u64 *)(((char *)adapter->buffer_list_addr) + -4096 -8 ); +ibmveth_update_rx_no_buffer (adapter); }/* empty and free ana buffer pool - also used to do cleanup in error paths */
@@ -698,8 +709,7 @@ static int ibmveth_close(struct net_devifree_irq (netdev->irq, netdev); - adapter->rx_no_buffer = *(u64 *)(((char *)adapter->buffer_list_addr) + -4096 -8 ); +ibmveth_update_rx_no_buffer (adapter);ibmveth_cleanup (adapter);
From: Anton Blanchard <[email protected]>
Date: Fri, 22 Aug 2014 11:36:52 +1000
Quoted 8 lines
Hidden away in the last 8 bytes of the
buffer_listpage is a solitary statistic. It needs to be byte swapped or else ethtool -S will produce numbers that terrify the user.Since we do this in multiple places, create a helper function with a comment explaining what is going on.
Signed-off-by Anton Blanchard <[email protected]>
Applied, thanks Anton.