|
@@ -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);
|
|
|
|