From patchwork Wed Aug 10 06:42:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil Kovvuri X-Patchwork-Id: 657875 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3s8hBS3jWyz9tH1 for ; Thu, 11 Aug 2016 05:32:48 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=RiPnoD1j; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933704AbcHJTc1 (ORCPT ); Wed, 10 Aug 2016 15:32:27 -0400 Received: from mail-pa0-f68.google.com ([209.85.220.68]:34329 "EHLO mail-pa0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932814AbcHJTc0 (ORCPT ); Wed, 10 Aug 2016 15:32:26 -0400 Received: by mail-pa0-f68.google.com with SMTP id hh10so3291734pac.1; Wed, 10 Aug 2016 12:32:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=/yiOnbIVxT7zRfsChJoAWY0+22E4HqBI9Hlxx2Ia09o=; b=RiPnoD1jpeUYyBjdVhmLMYKvyWOCp/prCnB+Su6cWifzw0SzBRhDkFlasvJa4hrHHl yMc4fAk4ilxtNrRxczAFCPaIxCduj3ANRYTQv4R+vn53VTJWZbuAZj3U4WPP7vD0SUaQ rCRI++yg8ZKDdjsBxfj3UP9Jyi9AM5QoTWUeqtUvp6N2hAR/6ng2yi4fvjuznwCUwjyq wffYk3VBW3TCWb2/i2hmgRSt1h7xbsLTeWkal6/tCStbqxAey8mwccotyAMU/SxeS4HG vrjK983DZS5dk41HL1z1WjsLb9qnUP0ZKhJkr4ycviNV1NZO7QKUI4tdTHDzCcORAWPY IEMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=/yiOnbIVxT7zRfsChJoAWY0+22E4HqBI9Hlxx2Ia09o=; b=i4lRTsZs1rdBXhDQrdF5z14tMwjTjhgtz6JDELFN2jbeu6S+OyWaGsgpInEc8GARZ/ drt9xG8T/v/OKYaHBxBdQ1xeOUTXuwvGj5oWjeaMYOTP7cubr0jSYMN7ZrMpd6KacG1T zNEw9OVFOf+jQFPFiFi4wlwoo0FCanHpkAgH+hA0YcFqAWf5r5Flq/AcnYclgkVPw68K Y3ivcJCHnwiEPosb3I+WLLdc0YrICLqjp9O0knBBL7111XFs8tPgPn+2iD4XZOuPy6cu l32hr84H4DoYYmk17VPu9dAiXFz9OWCDeU2usfRtJWtjlIsIAmO5tF8v+pWYC5q1Zqmj emtQ== X-Gm-Message-State: AEkooutA26uLh+hnJGXOISc53ab36Ee335Av+tNGuXkv7kO0wCvGWzydC7DnoJVEEgMkKQ== X-Received: by 10.66.72.106 with SMTP id c10mr4327168pav.18.1470811443985; Tue, 09 Aug 2016 23:44:03 -0700 (PDT) Received: from machine421.in.caveonetworks.com ([14.140.2.178]) by smtp.googlemail.com with ESMTPSA id lf11sm60825780pab.17.2016.08.09.23.44.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 09 Aug 2016 23:44:03 -0700 (PDT) From: sunil.kovvuri@gmail.com To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Sunil Goutham Subject: [PATCH 04/21] net: thunderx: Set queue count based on number of CPUs Date: Wed, 10 Aug 2016 12:12:36 +0530 Message-Id: <1470811373-28277-5-git-send-email-sunil.kovvuri@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1470811373-28277-1-git-send-email-sunil.kovvuri@gmail.com> References: <1470811373-28277-1-git-send-email-sunil.kovvuri@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Sunil Goutham 81xx has only 4 CPUs, so it doesn't make sense to initialize entire Qset i.e 8 queues by default. Made changes to queue initialization to init queues equal to number of CPUs or 8 queues whichever is lesser. Also this will be applicable to VMs with VNIC VF attached and having less VCPUs Signed-off-by: Sunil Goutham --- drivers/net/ethernet/cavium/thunder/nic_main.c | 6 ++++++ drivers/net/ethernet/cavium/thunder/nicvf_main.c | 7 +++---- drivers/net/ethernet/cavium/thunder/nicvf_queues.c | 8 ++++---- drivers/net/ethernet/cavium/thunder/nicvf_queues.h | 5 +---- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/drivers/net/ethernet/cavium/thunder/nic_main.c b/drivers/net/ethernet/cavium/thunder/nic_main.c index 4974923..0d81117 100644 --- a/drivers/net/ethernet/cavium/thunder/nic_main.c +++ b/drivers/net/ethernet/cavium/thunder/nic_main.c @@ -1009,6 +1009,12 @@ static int nic_num_sqs_en(struct nicpf *nic, int vf_en) int pos, sqs_per_vf = MAX_SQS_PER_VF_SINGLE_NODE; u16 total_vf; + /* Secondary Qsets are needed only if CPU count is + * morethan MAX_QUEUES_PER_QSET. + */ + if (num_online_cpus() <= MAX_QUEUES_PER_QSET) + return 0; + /* Check if its a multi-node environment */ if (nr_node_ids > 1) sqs_per_vf = MAX_SQS_PER_VF; diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c index 0c10635..af04d9f 100644 --- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c +++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c @@ -1537,14 +1537,13 @@ static int nicvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) goto err_release_regions; } - qcount = MAX_CMP_QUEUES_PER_QS; + qcount = min_t(int, MAX_CMP_QUEUES_PER_QS, num_online_cpus()); /* Restrict multiqset support only for host bound VFs */ if (pdev->is_virtfn) { /* Set max number of queues per VF */ - qcount = roundup(num_online_cpus(), MAX_CMP_QUEUES_PER_QS); - qcount = min(qcount, - (MAX_SQS_PER_VF + 1) * MAX_CMP_QUEUES_PER_QS); + qcount = min_t(int, num_online_cpus(), + (MAX_SQS_PER_VF + 1) * MAX_CMP_QUEUES_PER_QS); } netdev = alloc_etherdev_mqs(sizeof(struct nicvf), qcount, qcount); diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c index 0ff8e60..e521a94 100644 --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c @@ -762,10 +762,10 @@ int nicvf_set_qset_resources(struct nicvf *nic) nic->qs = qs; /* Set count of each queue */ - qs->rbdr_cnt = RBDR_CNT; - qs->rq_cnt = RCV_QUEUE_CNT; - qs->sq_cnt = SND_QUEUE_CNT; - qs->cq_cnt = CMP_QUEUE_CNT; + qs->rbdr_cnt = DEFAULT_RBDR_CNT; + qs->rq_cnt = min_t(u8, MAX_RCV_QUEUES_PER_QS, num_online_cpus()); + qs->sq_cnt = min_t(u8, MAX_SND_QUEUES_PER_QS, num_online_cpus()); + qs->cq_cnt = max_t(u8, qs->rq_cnt, qs->sq_cnt); /* Set queue lengths */ qs->rbdr_len = RCV_BUF_COUNT; diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.h b/drivers/net/ethernet/cavium/thunder/nicvf_queues.h index 6673e11..869f338 100644 --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.h +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.h @@ -57,10 +57,7 @@ #define CMP_QUEUE_SIZE6 6ULL /* 64K entries */ /* Default queue count per QS, its lengths and threshold values */ -#define RBDR_CNT 1 -#define RCV_QUEUE_CNT 8 -#define SND_QUEUE_CNT 8 -#define CMP_QUEUE_CNT 8 /* Max of RCV and SND qcount */ +#define DEFAULT_RBDR_CNT 1 #define SND_QSIZE SND_QUEUE_SIZE2 #define SND_QUEUE_LEN (1ULL << (SND_QSIZE + 10))