Received: by 10.223.185.82 with SMTP id b18csp13699wrg; Thu, 8 Mar 2018 18:07:08 -0800 (PST) X-Google-Smtp-Source: AG47ELst4T9sikaQpfZjx48uJLio3P449AA8bMyjyAD54wG3tqlOrBtnniNtkWYshUrFo3pNUQo0 X-Received: by 10.101.101.217 with SMTP id y25mr22517991pgv.165.1520561228021; Thu, 08 Mar 2018 18:07:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520561227; cv=none; d=google.com; s=arc-20160816; b=ut1LvyCKWkTcu3kKuC9YVW/GFvF6LI82We3LrJ3o6pyKi2RLt/qUsHAAfEYtopW3+L wZok4C7CIOTlegbyPEV8gWw7qhQh7mL3vZpOp8t/6/Nd0rJ4tpTJ7XvBRgByg5iUFYhP KC7P0ijk+OqICnS6MWmMTLrvoPYuotwgG6JZQ2d3zEehO02LUlQRl/O7mgWtGqj4mT6R a6TwgKZDl5lwPBwz5hstX3TMqh9m1tDXN/XVKX2aE4RKBOW3euCpPZoqr/MKa7ANvaCs Ke6k9a6kIUz+bW+MjpcKPXXfmdMoIXycWTBwxYXP8ktlU455nsxATm127tQU7nxF/ZwW A2Lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=uSQF976nhWJAqKVmDBtEhbGUpQaMUwx24iwWf312CDo=; b=Zog4DWm+dZ+z6UzXqj1ZeEeqLZybFmBF8qN7mChD7jEbOE6SJqydTgeXDF14MHbNFw oQ6gKiNLsa5BbF05gk5Zasa7yK5hhYboB83H6eHupxoTBQIJDsVtLJcoVMVXTYXXEMKG uoeCi5bJEDcjwEr19RoLhQOxWg8Uo0PG30NxNg4zkd5NNUcbT3m16xewV4Ojp61ZotWB RoECOoEIFnRLU+1kgbP9B47VqTSqbG+PdQF6peDPOduuOQQwGKK5ozaUtwHC9oaZF4x+ xNWdyScUAUJdc83WZ1oKUhNYNfs0hDIP4CF+ZJa/H2BEr2IsO2Ar0/MQYPfR6bZutUzn SpXw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c13-v6si15614747plo.537.2018.03.08.18.06.53; Thu, 08 Mar 2018 18:07:07 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751232AbeCICFH (ORCPT + 99 others); Thu, 8 Mar 2018 21:05:07 -0500 Received: from szxga06-in.huawei.com ([45.249.212.32]:38052 "EHLO huawei.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1750912AbeCICFC (ORCPT ); Thu, 8 Mar 2018 21:05:02 -0500 Received: from DGGEMS406-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 8E398C4789CAC; Fri, 9 Mar 2018 10:04:49 +0800 (CST) Received: from linux-ioko.site (10.71.200.31) by DGGEMS406-HUB.china.huawei.com (10.3.19.206) with Microsoft SMTP Server id 14.3.361.1; Fri, 9 Mar 2018 10:04:44 +0800 From: Peng Li To: CC: , , , , Subject: [PATCH net-next 9/9] net: hns3: fix for coal configuation lost when setting the channel Date: Fri, 9 Mar 2018 10:37:04 +0800 Message-ID: <1520563024-94811-10-git-send-email-lipeng321@huawei.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1520563024-94811-1-git-send-email-lipeng321@huawei.com> References: <1520563024-94811-1-git-send-email-lipeng321@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.71.200.31] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yunsheng Lin This patch fixes the coalesce configuation lost problem when setting the channel number by restoring all vectors's coalesce configuation to vector 0's, because all vectors belonging to the same netdev have the same coalesce configuation for now. Signed-off-by: Yunsheng Lin Signed-off-by: Peng Li --- drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 37 +++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c index f466f60..0a8c427 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c @@ -3413,7 +3413,24 @@ static int hns3_reset_notify(struct hnae3_handle *handle, return ret; } -static int hns3_modify_tqp_num(struct net_device *netdev, u16 new_tqp_num) +static void hns3_restore_coal(struct hns3_nic_priv *priv, + struct hns3_enet_coalesce *tx, + struct hns3_enet_coalesce *rx) +{ + u16 vector_num = priv->vector_num; + int i; + + for (i = 0; i < vector_num; i++) { + memcpy(&priv->tqp_vector[i].tx_group.coal, tx, + sizeof(struct hns3_enet_coalesce)); + memcpy(&priv->tqp_vector[i].rx_group.coal, rx, + sizeof(struct hns3_enet_coalesce)); + } +} + +static int hns3_modify_tqp_num(struct net_device *netdev, u16 new_tqp_num, + struct hns3_enet_coalesce *tx, + struct hns3_enet_coalesce *rx) { struct hns3_nic_priv *priv = netdev_priv(netdev); struct hnae3_handle *h = hns3_get_handle(netdev); @@ -3431,6 +3448,8 @@ static int hns3_modify_tqp_num(struct net_device *netdev, u16 new_tqp_num) if (ret) goto err_alloc_vector; + hns3_restore_coal(priv, tx, rx); + ret = hns3_nic_init_vector_data(priv); if (ret) goto err_uninit_vector; @@ -3461,6 +3480,7 @@ int hns3_set_channels(struct net_device *netdev, struct hns3_nic_priv *priv = netdev_priv(netdev); struct hnae3_handle *h = hns3_get_handle(netdev); struct hnae3_knic_private_info *kinfo = &h->kinfo; + struct hns3_enet_coalesce tx_coal, rx_coal; bool if_running = netif_running(netdev); u32 new_tqp_num = ch->combined_count; u16 org_tqp_num; @@ -3494,15 +3514,26 @@ int hns3_set_channels(struct net_device *netdev, goto open_netdev; } + /* Changing the tqp num may also change the vector num, + * ethtool only support setting and querying one coal + * configuation for now, so save the vector 0' coal + * configuation here in order to restore it. + */ + memcpy(&tx_coal, &priv->tqp_vector[0].tx_group.coal, + sizeof(struct hns3_enet_coalesce)); + memcpy(&rx_coal, &priv->tqp_vector[0].rx_group.coal, + sizeof(struct hns3_enet_coalesce)); + hns3_nic_dealloc_vector_data(priv); hns3_uninit_all_ring(priv); hns3_put_ring_config(priv); org_tqp_num = h->kinfo.num_tqps; - ret = hns3_modify_tqp_num(netdev, new_tqp_num); + ret = hns3_modify_tqp_num(netdev, new_tqp_num, &tx_coal, &rx_coal); if (ret) { - ret = hns3_modify_tqp_num(netdev, org_tqp_num); + ret = hns3_modify_tqp_num(netdev, org_tqp_num, + &tx_coal, &rx_coal); if (ret) { /* If revert to old tqp failed, fatal error occurred */ dev_err(&netdev->dev, -- 2.9.3