Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp2904788ybx; Fri, 8 Nov 2019 11:04:19 -0800 (PST) X-Google-Smtp-Source: APXvYqx9YKod2BojiXgZwNYJILGaot0zEPH8BU0jx5oKB1FYmv1g9EfskY5kzBE7X+bHsKSQpoDA X-Received: by 2002:a50:9555:: with SMTP id v21mr12354749eda.90.1573239859530; Fri, 08 Nov 2019 11:04:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573239859; cv=none; d=google.com; s=arc-20160816; b=IzuU7EqPazhhp7XL/AYHtF9q2gZyftjb04IXKlAxH//jwqD8LFGjUwZEK7xZnpgY9s sYeG+TujQDSCjNHoAKN8697SrfWTb1qHL8nkFqLFDJ5E7fAx7pnstTPH87GbIcQFUqma EJ9gilvbZ53mtYho/FOuL3lo6y1jMJ1QUmjBXhcVt/XiGZbrgFMmXgVSSbBjJD/O/yg4 Ta9FsSunrCuLIveqzHEiCAEbmsrNwiTVmCGvmkFKc3NInw0J88K6eokA7jOPfZsHbj9l UavwaTx4AywRscwZXy1t9laiSX6wkae9dt1hGnQJvmlfiBv6SKSsf+slsRQF8TLxqjwB XuOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Aj/j1zZzXQzhKsbM5pPJbtETBSkfqfAtIKYkH6UM3Hg=; b=jrQV5Et9A3CQRZLwEnzsBJxEqb50xNvv0ymr3GZrqB6vto65HvV38QmzsLov3ISEGO FILD4cBoCBCDivYrSNzUpiNkFUaI2nSJS706Zhjw85KzUolbf2+lbB+ndt+BC4hRCn99 fBPI40IAvVSOMbjkC825nUgK58PBbqCHDUiVYM2olag5AZFnVE9WiY076DoehRN1RlCg B4/WCTfII8+XuYNV8cahqvlhZOUGIHmA8LWM457+H15nnqUY4mpDLNV75r6dmHBmcteT Gh7XHSo8pNZGIjt08z2FkpL7y0oc5lfrZdMJgE/vJfP6VZ9yjnjtfLdzeUKLvDiArfgr fZLw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=GnJArXjw; 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 d28si4870149edb.10.2019.11.08.11.03.56; Fri, 08 Nov 2019 11:04:19 -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; dkim=pass header.i=@kernel.org header.s=default header.b=GnJArXjw; 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 S2390522AbfKHTC0 (ORCPT + 99 others); Fri, 8 Nov 2019 14:02:26 -0500 Received: from mail.kernel.org ([198.145.29.99]:60042 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733166AbfKHTCY (ORCPT ); Fri, 8 Nov 2019 14:02:24 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6F62621D7E; Fri, 8 Nov 2019 19:02:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1573239743; bh=hkUr9mVII/pWMUyNQSBGENs7BmcYT7x/GDuTB7r/VGo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GnJArXjwpJuax39BwJ5n80pTWEqhB2xVOJXiJQw/yxq6xilonohd0jlM9STK9Dss6 KKqXb1mGdja9TZZ+RQzRzrV+Q72Tcup4JZP97F9WBchYCee9L81/CI+UTIdLTVaLIh Lej6NwNiexti387+Gmu9I2cPjODDLIRUSxd2Zxuw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Eran Ben Elisha , Jack Morgenstein , Tariq Toukan , "David S. Miller" Subject: [PATCH 4.19 47/79] net/mlx4_core: Dynamically set guaranteed amount of counters per VF Date: Fri, 8 Nov 2019 19:50:27 +0100 Message-Id: <20191108174812.729362991@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191108174745.495640141@linuxfoundation.org> References: <20191108174745.495640141@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Eran Ben Elisha [ Upstream commit e19868efea0c103f23b4b7e986fd0a703822111f ] Prior to this patch, the amount of counters guaranteed per VF in the resource tracker was MLX4_VF_COUNTERS_PER_PORT * MLX4_MAX_PORTS. It was set regardless if the VF was single or dual port. This caused several VFs to have no guaranteed counters although the system could satisfy their request. The fix is to dynamically guarantee counters, based on each VF specification. Fixes: 9de92c60beaa ("net/mlx4_core: Adjust counter grant policy in the resource tracker") Signed-off-by: Eran Ben Elisha Signed-off-by: Jack Morgenstein Signed-off-by: Tariq Toukan Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | 42 +++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c @@ -471,12 +471,31 @@ void mlx4_init_quotas(struct mlx4_dev *d priv->mfunc.master.res_tracker.res_alloc[RES_MPT].quota[pf]; } -static int get_max_gauranteed_vfs_counter(struct mlx4_dev *dev) +static int +mlx4_calc_res_counter_guaranteed(struct mlx4_dev *dev, + struct resource_allocator *res_alloc, + int vf) { - /* reduce the sink counter */ - return (dev->caps.max_counters - 1 - - (MLX4_PF_COUNTERS_PER_PORT * MLX4_MAX_PORTS)) - / MLX4_MAX_PORTS; + struct mlx4_active_ports actv_ports; + int ports, counters_guaranteed; + + /* For master, only allocate according to the number of phys ports */ + if (vf == mlx4_master_func_num(dev)) + return MLX4_PF_COUNTERS_PER_PORT * dev->caps.num_ports; + + /* calculate real number of ports for the VF */ + actv_ports = mlx4_get_active_ports(dev, vf); + ports = bitmap_weight(actv_ports.ports, dev->caps.num_ports); + counters_guaranteed = ports * MLX4_VF_COUNTERS_PER_PORT; + + /* If we do not have enough counters for this VF, do not + * allocate any for it. '-1' to reduce the sink counter. + */ + if ((res_alloc->res_reserved + counters_guaranteed) > + (dev->caps.max_counters - 1)) + return 0; + + return counters_guaranteed; } int mlx4_init_resource_tracker(struct mlx4_dev *dev) @@ -484,7 +503,6 @@ int mlx4_init_resource_tracker(struct ml struct mlx4_priv *priv = mlx4_priv(dev); int i, j; int t; - int max_vfs_guarantee_counter = get_max_gauranteed_vfs_counter(dev); priv->mfunc.master.res_tracker.slave_list = kcalloc(dev->num_slaves, sizeof(struct slave_list), @@ -603,16 +621,8 @@ int mlx4_init_resource_tracker(struct ml break; case RES_COUNTER: res_alloc->quota[t] = dev->caps.max_counters; - if (t == mlx4_master_func_num(dev)) - res_alloc->guaranteed[t] = - MLX4_PF_COUNTERS_PER_PORT * - MLX4_MAX_PORTS; - else if (t <= max_vfs_guarantee_counter) - res_alloc->guaranteed[t] = - MLX4_VF_COUNTERS_PER_PORT * - MLX4_MAX_PORTS; - else - res_alloc->guaranteed[t] = 0; + res_alloc->guaranteed[t] = + mlx4_calc_res_counter_guaranteed(dev, res_alloc, t); break; default: break;