From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Allen Subject: [PATCH 1/3 net] ibmvnic: Modify buffer size on failover Date: Mon, 15 Jan 2018 15:11:55 -0600 Message-ID: References: <2154f098-7c1a-5db2-cc30-6172e3019a8f@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: Thomas Falcon , Nathan Fontenot , desnesn@linux.vnet.ibm.com To: netdev@vger.kernel.org Return-path: Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:39966 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750733AbeAOVMD (ORCPT ); Mon, 15 Jan 2018 16:12:03 -0500 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w0FLA0iO061985 for ; Mon, 15 Jan 2018 16:12:02 -0500 Received: from e32.co.us.ibm.com (e32.co.us.ibm.com [32.97.110.150]) by mx0a-001b2d01.pphosted.com with ESMTP id 2fgy4amgmy-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 15 Jan 2018 16:12:02 -0500 Received: from localhost by e32.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 15 Jan 2018 14:12:01 -0700 In-Reply-To: <2154f098-7c1a-5db2-cc30-6172e3019a8f@linux.vnet.ibm.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: Using newer backing devices can cause the required padding at the end of rx buffers to change. Currently we assume that the size of buffers will never change, but in the case that we failover from a backing device with smaller padding requirement to a backing device with a larger padding requirement, the vnic server will fail to post rx buffers due to inadequate space in our rx pool. This patch fixes the issue by checking whether or not the buffer size has changed on a reset and if it has, reallocate the buffer. Signed-off-by: John Allen --- diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index b676fa9..5b68a28 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -412,13 +412,25 @@ static int reset_rx_pools(struct ibmvnic_adapter *adapter) int rx_scrqs; int i, j, rc; + size_array = (u64 *)((u8 *)(adapter->login_rsp_buf) + + be32_to_cpu(adapter->login_rsp_buf->off_rxadd_buff_size)); + rx_scrqs = be32_to_cpu(adapter->login_rsp_buf->num_rxadd_subcrqs); for (i = 0; i < rx_scrqs; i++) { rx_pool = &adapter->rx_pool[i]; netdev_dbg(adapter->netdev, "Re-setting rx_pool[%d]\n", i); - rc = reset_long_term_buff(adapter, &rx_pool->long_term_buff); + if (rx_pool->buff_size != be64_to_cpu(size_array[i])) { + rx_pool->buff_size = be64_to_cpu(size_array[i]); + rc = alloc_long_term_buff(adapter, + &rx_pool->long_term_buff, + rx_pool->size * + rx_pool->buff_size); + } else { + rc = reset_long_term_buff(adapter, + &rx_pool->long_term_buff); + } if (rc) return rc;