Re: [PATCH 16/19][v2] ibmveth: Automatically enable larger rx buffer pools for larger mtu
From: Robert Jennings <hidden>
Date: 2008-06-23 20:21:57
Also in:
netdev
=46rom: Santiago Leon [off-list ref] Fixed patch formatting. Activates larger rx buffer pools when the MTU is changed to a larger value. This patch de-activates the large rx buffer pools when the MTU changes to a smaller value. Signed-off-by: Santiago Leon <redacted> Signed-off-by: Robert Jennings <redacted> --- drivers/net/ibmveth.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) Index: b/drivers/net/ibmveth.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- a/drivers/net/ibmveth.c
+++ b/drivers/net/ibmveth.c@@ -1054,7 +1054,6 @@ static int ibmveth_change_mtu(struct net { struct ibmveth_adapter *adapter =3D dev->priv; int new_mtu_oh =3D new_mtu + IBMVETH_BUFF_OH; - int reinit =3D 0; int i, rc;
=20 if (new_mtu < IBMVETH_MAX_MTU)
@@ -1067,15 +1066,21 @@ static int ibmveth_change_mtu(struct net if (i =3D=3D IbmVethNumBufferPools) return -EINVAL;
=20
+ /* Deactivate all the buffer pools so that the next loop can activate
+ only the buffer pools necessary to hold the new MTU */
+ for (i =3D 0; i < IbmVethNumBufferPools; i++)
+ if (adapter->rx_buff_pool[i].active) {
+ ibmveth_free_buffer_pool(adapter,
+ &adapter->rx_buff_pool[i]);
+ adapter->rx_buff_pool[i].active =3D 0;
+ }
+
/* Look for an active buffer pool that can hold the new MTU */
for(i =3D 0; i<IbmVethNumBufferPools; i++) {
- if (!adapter->rx_buff_pool[i].active) {
- adapter->rx_buff_pool[i].active =3D 1;
- reinit =3D 1;
- }
+ adapter->rx_buff_pool[i].active =3D 1;
=20
if (new_mtu_oh < adapter->rx_buff_pool[i].buff_size) {
- if (reinit && netif_running(adapter->netdev)) {
+ if (netif_running(adapter->netdev)) {
adapter->pool_config =3D 1;
ibmveth_close(adapter->netdev);
adapter->pool_config =3D 0;@@ -1402,14 +1407,15 @@ const char * buf, size_t count) return -EPERM; }
=20
- pool->active =3D 0;
if (netif_running(netdev)) {
adapter->pool_config =3D 1;
ibmveth_close(netdev);
+ pool->active =3D 0;
adapter->pool_config =3D 0;
if ((rc =3D ibmveth_open(netdev)))
return rc;
}
+ pool->active =3D 0;
}
} else if (attr =3D=3D &veth_num_attr) {
if (value <=3D 0 || value > IBMVETH_MAX_POOL_COUNT)