Received: by 10.223.185.116 with SMTP id b49csp5786056wrg; Wed, 7 Mar 2018 18:39:15 -0800 (PST) X-Google-Smtp-Source: AG47ELuhP97SbT0UU8JAZk7q3cUJ/DPFr8HUbNdWWCcSMj21FPgMj9iWiSo/nmtffAZyKrQicvey X-Received: by 10.101.93.134 with SMTP id f6mr20051635pgt.293.1520476755123; Wed, 07 Mar 2018 18:39:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520476755; cv=none; d=google.com; s=arc-20160816; b=VVAlpcDp1qazYzvE8W0cZ72+B5vPyu/xlhGcytYxUDsQttHMND1ihe/kkWbuYybd0F 5BJcrjgmtJGvWteqjDGbBO7X0KjtXqtzfakD4eBE5n9NusFfS9A3cwIEIjT/eVUbydGp jDWYsK0tMoG/43PKtHonsGfQSYWeoQN3msXz60ysNyPRNcrw3Sfi+ZyrAgdPYuQ4RiEi KwG55QCk4YR+JiT3bcbzq7+v07Rtod1mqXUlcqvSq6J/rbbaIbBRU43dpcS3Ud6oykIN AHPxyc0+JrHrfD/2Xh43mH90Agf1mbehtS1lPB/tRnHYimRLrSxiWXnSORwsGhisn45n FwVA== 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=nkCu8raQXoG728wTGTx9DdLNz4Pk0wg5OY89N3E6U+I=; b=ghD+Gl+03wqH0w55E2Txi98C6d65c2Xkq7X+21pTTJ5Klc2Mo7RTdIibp7HGShI+mo FtTxX9hriQIh/VJzg5v/aaBXG4lUzsv1NgJkDxX59rKTH5eUBaTnX+1bg5opfOPytA+o buiLhDFupRKPF71+b68Bj03f3f61ddIM2dxWCB1jznl8ALlOqyuF2DZ325K42zfROa9N McqRZM9UVT2aoQiNCVjg5WJTxlMsVPVojUxuL1JpUaoB6s+vxvQ2ibwSgx4tq3SHj7i+ 3W6sLuvlhS83B7zNLMDU/v0wejNpX5NAMMC+cCL/dREQwAX8KOELPR3PlRh29M0jdj5f di8g== 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 f12si11803415pgr.795.2018.03.07.18.39.01; Wed, 07 Mar 2018 18:39:15 -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 S964962AbeCHChH (ORCPT + 99 others); Wed, 7 Mar 2018 21:37:07 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:5749 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934883AbeCHCfC (ORCPT ); Wed, 7 Mar 2018 21:35:02 -0500 Received: from DGGEMS408-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 8FF1CC578C37C; Thu, 8 Mar 2018 10:34:48 +0800 (CST) Received: from linux-ioko.site (10.71.200.31) by DGGEMS408-HUB.china.huawei.com (10.3.19.208) with Microsoft SMTP Server id 14.3.361.1; Thu, 8 Mar 2018 10:34:40 +0800 From: Peng Li To: CC: , , , , Subject: [PATCH net-next 18/23] {topost} net: hns3: fix for coal configuation lost when setting the channel Date: Thu, 8 Mar 2018 11:06:43 +0800 Message-ID: <1520478408-116992-19-git-send-email-lipeng321@huawei.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1520478408-116992-1-git-send-email-lipeng321@huawei.com> References: <1520478408-116992-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 a0ba25f..b02f3ff 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c @@ -3412,7 +3412,24 @@ static u16 hns3_get_max_available_channels(struct net_device *netdev) return min_t(u16, max_tqps, (free_tqps + h->kinfo.num_tqps)); } -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); @@ -3430,6 +3447,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; @@ -3460,6 +3479,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; @@ -3493,15 +3513,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