Patch "ibmvnic: Allocate number of rx/tx buffers agreed on by firmware" has been added to the 4.9-stable tree
This is a note to let you know that I've just added the patch titled
ibmvnic: Allocate number of rx/tx buffers agreed on by firmware
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ibmvnic-allocate-number-of-rx-tx-buffers-agreed-on-by-firmware.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Tue Dec 12 13:26:17 CET 2017
From: Thomas Falcon <[email protected]>
Date: Sun, 5 Mar 2017 12:18:42 -0600
Subject: ibmvnic: Allocate number of rx/tx buffers agreed on by firmware
From: Thomas Falcon <[email protected]>
[ Upstream commit 068d9f90a6978c3e3a662d9e85204a7d6be240d2 ]
The amount of TX/RX buffers that the vNIC driver currently allocates is different from the amount agreed upon in negotiation with firmware. Correct that by allocating the requested number of buffers confirmed by firmware.
--- drivers/net/ethernet/ibm/ibmvnic.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
drivers/net/ethernet/ibm/ibmvnic.c +8 -8
@@ -404,7 +404,7 @@ static int ibmvnic_open(struct net_devicsend_map_query (adapter);for (i =0 ; i < rxadd_subcrqs; i++) {init_rx_pool (adapter, &adapter->rx_pool[i], -IBMVNIC_BUFFS_PER_POOL , i, + adapter->req_rx_add_entries_per_subcrq, i,be64_to_cpu (size_array[i]),1 );if (alloc_rx_pool (adapter, &adapter->rx_pool[i])) {dev_err (dev,"Couldn't alloc rx pool\n" );
@@ -419,23 +419,23 @@ static int ibmvnic_open(struct net_devicfor (i =0 ; i < tx_subcrqs; i++) { tx_pool = &adapter->tx_pool[i]; tx_pool->tx_buff = -kcalloc (adapter->max_tx_entries_per_subcrq, +kcalloc (adapter->req_tx_entries_per_subcrq,sizeof (struct ibmvnic_tx_buff ),GFP_KERNEL );if (!tx_pool->tx_buff) goto tx_pool_alloc_failed;if (alloc_long_term_buff (adapter, &tx_pool->long_term_buff, - adapter->max_tx_entries_per_subcrq * + adapter->req_tx_entries_per_subcrq * adapter->req_mtu)) goto tx_ltb_alloc_failed; tx_pool->free_map = -kcalloc (adapter->max_tx_entries_per_subcrq, +kcalloc (adapter->req_tx_entries_per_subcrq,sizeof (int ),GFP_KERNEL );if (!tx_pool->free_map) goto tx_fm_alloc_failed; -for (j =0 ; j < adapter->max_tx_entries_per_subcrq; j++) +for (j =0 ; j < adapter->req_tx_entries_per_subcrq; j++) tx_pool->free_map[j] = j; tx_pool->consumer_index =0 ;
@@ -746,7 +746,7 @@ static int ibmvnic_xmit(struct sk_buff * tx_pool->consumer_index = (tx_pool->consumer_index +1 ) % - adapter->max_tx_entries_per_subcrq; + adapter->req_tx_entries_per_subcrq; tx_buff = &tx_pool->tx_buff[index]; tx_buff->skb = skb;
@@ -819,7 +819,7 @@ static int ibmvnic_xmit(struct sk_buff *if (tx_pool->consumer_index ==0 ) tx_pool->consumer_index = - adapter->max_tx_entries_per_subcrq -1 ; + adapter->req_tx_entries_per_subcrq -1 ;else tx_pool->consumer_index--;
@@ -1400,7 +1400,7 @@ restart_loop: producer_index] = index; adapter->tx_pool[pool].producer_index = (adapter->tx_pool[pool].producer_index +1 ) % - adapter->max_tx_entries_per_subcrq; + adapter->req_tx_entries_per_subcrq; }/* remove tx_comp scrq*/ next->tx_comp.first =0 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/ibmvnic-allocate-number-of-rx-tx-buffers-agreed-on-by-firmware.patch queue-4.9/ibmvnic-fix-overflowing-firmware-hardware-tx-queue.patch