From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rcdn-iport-4.cisco.com (rcdn-iport-4.cisco.com [173.37.86.75]) by dpdk.org (Postfix) with ESMTP id 5DA4B1B512 for ; Fri, 3 Aug 2018 06:35:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=2878; q=dns/txt; s=iport; t=1533270933; x=1534480533; h=from:to:cc:subject:date:message-id; bh=Z8eai1TDyiKupp5qFItOQAtYaZJFOHc3ftDr8RD1asI=; b=bP9jlSht9gYOgUhpSSlgFpJCjmFyHgsX64Cs9Avvu5drVVddnefYv360 iE8kuLHYSAFp20Wp8r8aat6qxt7jKrTDu5IMv1vZgRqIE6KhnvaPujGsh Kc0mpysEFPwQgYfdsTXw5CSWvc7yzwWXF0QcNHNWspXJkbmD8q5RCaYZm s=; X-IronPort-AV: E=Sophos;i="5.51,437,1526342400"; d="scan'208";a="432800106" Received: from alln-core-4.cisco.com ([173.36.13.137]) by rcdn-iport-4.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Aug 2018 04:35:32 +0000 Received: from cisco.com (savbu-usnic-a.cisco.com [10.193.184.48]) by alln-core-4.cisco.com (8.15.2/8.15.2) with ESMTP id w734ZWJh013853; Fri, 3 Aug 2018 04:35:32 GMT Received: by cisco.com (Postfix, from userid 508933) id 1ED7020F2001; Thu, 2 Aug 2018 21:35:32 -0700 (PDT) From: Hyong Youb Kim To: stable@dpdk.org Cc: Yongseok Koh , johndale@cisco.com, Hyong Youb Kim Date: Thu, 2 Aug 2018 21:35:26 -0700 Message-Id: <20180803043526.21563-1-hyonkim@cisco.com> X-Mailer: git-send-email 2.16.2 X-Outbound-SMTP-Client: 10.193.184.48, savbu-usnic-a.cisco.com X-Outbound-Node: alln-core-4.cisco.com Subject: [dpdk-stable] [PATCH 17.11] net/enic: do not overwrite admin Tx queue limit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Aug 2018 04:35:33 -0000 [ backported from upstream commit 2a7e3d54659cd12d337ad816dcf202eec1af1367 ] Currently, enic_alloc_wq (via rte_eth_tx_queue_setup) may overwrite the admin limit with a lower value. This is wrong as seen in the following sequence. 1. UCS admin-set Tx queue limit (config.wq_desc_count) = 4096 2. Set up tx queue with 512 descriptors The admin limit (config.wq_desc_count) becomes 512. 3. Stop ports and now set up Tx queue with 1024 descriptors. This fails because 1024 is greater than the admin limit (512). Do not modify the admin limit, and when queried, report the current number of descriptors instead of the admin limit. The rx queue setup (enic_alloc_rq) does not this problem. Fixes: fefed3d1e62c ("enic: new driver") Signed-off-by: Hyong Youb Kim Reviewed-by: John Daley --- drivers/net/enic/enic_main.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index 6356c10cb..bf08dcadb 100644 --- a/drivers/net/enic/enic_main.c +++ b/drivers/net/enic/enic_main.c @@ -782,25 +782,23 @@ int enic_alloc_wq(struct enic *enic, uint16_t queue_idx, static int instance; wq->socket_id = socket_id; - if (nb_desc) { - if (nb_desc > enic->config.wq_desc_count) { - dev_warning(enic, - "WQ %d - number of tx desc in cmd line (%d)"\ - "is greater than that in the UCSM/CIMC adapter"\ - "policy. Applying the value in the adapter "\ - "policy (%d)\n", - queue_idx, nb_desc, enic->config.wq_desc_count); - } else if (nb_desc != enic->config.wq_desc_count) { - enic->config.wq_desc_count = nb_desc; - dev_info(enic, - "TX Queues - effective number of descs:%d\n", - nb_desc); - } + if (nb_desc > enic->config.wq_desc_count) { + dev_warning(enic, + "WQ %d - number of tx desc in cmd line (%d) " + "is greater than that in the UCSM/CIMC adapter " + "policy. Applying the value in the adapter " + "policy (%d)\n", + queue_idx, nb_desc, enic->config.wq_desc_count); + nb_desc = enic->config.wq_desc_count; + } else if (nb_desc != enic->config.wq_desc_count) { + dev_info(enic, + "TX Queues - effective number of descs:%d\n", + nb_desc); } /* Allocate queue resources */ err = vnic_wq_alloc(enic->vdev, &enic->wq[queue_idx], queue_idx, - enic->config.wq_desc_count, + nb_desc, sizeof(struct wq_enet_desc)); if (err) { dev_err(enic, "error in allocation of wq\n"); @@ -808,7 +806,7 @@ int enic_alloc_wq(struct enic *enic, uint16_t queue_idx, } err = vnic_cq_alloc(enic->vdev, &enic->cq[cq_index], cq_index, - socket_id, enic->config.wq_desc_count, + socket_id, nb_desc, sizeof(struct cq_enet_wq_desc)); if (err) { vnic_wq_free(wq); -- 2.16.2