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 <anton@samba.org> Cc: stable@vger.kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
c10e4cafa2
Коммит
cbd5228199
|
@ -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(struct ibmveth_adapter *adapter)
|
|||
ibmveth_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_device *netdev)
|
|||
|
||||
free_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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче