From patchwork Fri Nov 6 03:09:57 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yevgeny Petrilin X-Patchwork-Id: 57963 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id nA60Ccbu027749 for ; Fri, 6 Nov 2009 00:12:38 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759210AbZKFAMX (ORCPT ); Thu, 5 Nov 2009 19:12:23 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1759209AbZKFAMX (ORCPT ); Thu, 5 Nov 2009 19:12:23 -0500 Received: from mail.mellanox.co.il ([194.90.237.43]:43226 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1759203AbZKFAMV (ORCPT ); Thu, 5 Nov 2009 19:12:21 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from yevgenyp@mellanox.co.il) with SMTP; 6 Nov 2009 02:18:14 +0200 Received: from [10.4.12.75] ([10.4.12.75]) by mtlexch01.mtl.com with Microsoft SMTPSVC(6.0.3790.3959); Fri, 6 Nov 2009 02:12:25 +0200 Message-ID: <4AF39385.1060706@mellanox.co.il> Date: Fri, 06 Nov 2009 05:09:57 +0200 From: Yevgeny Petrilin User-Agent: Thunderbird 2.0.0.23 (X11/20090812) MIME-Version: 1.0 To: rdreier@cisco.com CC: linux-rdma@vger.kernel.org, netdev@vger.kernel.org, liranl@mellanox.co.il, tziporet@mellanox.co.il, yevgenyp@mellanox.co.il Subject: [PATCH 18/25 v2] mlx4_en: Use reasonable resources for slaves. X-OriginalArrivalTime: 06 Nov 2009 00:12:25.0751 (UTC) FILETIME=[D1CC9270:01CA5E75] Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org diff --git a/drivers/net/mlx4/en_main.c b/drivers/net/mlx4/en_main.c index 507e11f..3883071 100644 --- a/drivers/net/mlx4/en_main.c +++ b/drivers/net/mlx4/en_main.c @@ -93,8 +93,6 @@ static int mlx4_en_get_profile(struct mlx4_en_dev *mdev) params->prof[i].tx_ppp = pfctx; params->prof[i].tx_ring_size = MLX4_EN_DEF_TX_RING_SIZE; params->prof[i].rx_ring_size = MLX4_EN_DEF_RX_RING_SIZE; - params->prof[i].tx_ring_num = MLX4_EN_NUM_TX_RINGS + - (!!pfcrx) * MLX4_EN_NUM_PPP_RINGS; } return 0; @@ -216,11 +214,15 @@ static void *mlx4_en_add(struct mlx4_dev *dev) /* If we did not receive an explicit number of Rx rings, default to * the number of completion vectors populated by the mlx4_core */ mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH) { + mdev->profile.prof[i].tx_ring_num = max_t(int, + min_t(int, roundup_pow_of_two(dev->caps.num_comp_vectors), + NUM_TX_RINGS), MIN_TX_RINGS) + + (!!pfcrx) * MLX4_EN_NUM_PPP_RINGS; mlx4_info(mdev, "Using %d tx rings for port:%d\n", mdev->profile.prof[i].tx_ring_num, i); - mdev->profile.prof[i].rx_ring_num = min_t(int, - roundup_pow_of_two(dev->caps.num_comp_vectors), - MAX_RX_RINGS); + mdev->profile.prof[i].rx_ring_num = max_t(int, + min_t(int, roundup_pow_of_two(dev->caps.num_comp_vectors), + MAX_RX_RINGS), MIN_RX_RINGS); mlx4_info(mdev, "Defaulting to %d rx rings for port:%d\n", mdev->profile.prof[i].rx_ring_num, i); } diff --git a/drivers/net/mlx4/en_netdev.c b/drivers/net/mlx4/en_netdev.c index fd96078..488f967 100644 --- a/drivers/net/mlx4/en_netdev.c +++ b/drivers/net/mlx4/en_netdev.c @@ -1024,7 +1024,8 @@ int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port, */ dev->netdev_ops = &mlx4_netdev_ops; dev->watchdog_timeo = MLX4_EN_WATCHDOG_TIMEOUT; - dev->real_num_tx_queues = MLX4_EN_NUM_TX_RINGS; + dev->real_num_tx_queues = priv->tx_ring_num - + !!(priv->prof->rx_ppp) * MLX4_EN_NUM_PPP_RINGS; SET_ETHTOOL_OPS(dev, &mlx4_en_ethtool_ops); diff --git a/drivers/net/mlx4/en_tx.c b/drivers/net/mlx4/en_tx.c index 8c72799..a893733 100644 --- a/drivers/net/mlx4/en_tx.c +++ b/drivers/net/mlx4/en_tx.c @@ -583,7 +583,7 @@ u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb) */ if (priv->prof->rx_ppp && priv->vlgrp && vlan_tx_tag_present(skb)) { vlan_tag = vlan_tx_tag_get(skb); - return MLX4_EN_NUM_TX_RINGS + (vlan_tag >> 13); + return priv->tx_ring_num - MLX4_EN_NUM_PPP_RINGS + (vlan_tag >> 13); } return skb_tx_hash(dev, skb); diff --git a/drivers/net/mlx4/mlx4_en.h b/drivers/net/mlx4/mlx4_en.h index 4376147..6e0c9ed 100644 --- a/drivers/net/mlx4/mlx4_en.h +++ b/drivers/net/mlx4/mlx4_en.h @@ -95,6 +95,9 @@ #define MLX4_EN_PAGE_SIZE (1 << MLX4_EN_PAGE_SHIFT) #define MAX_TX_RINGS 16 #define MAX_RX_RINGS 16 +#define MIN_RX_RINGS 4 +#define NUM_TX_RINGS 8 +#define MIN_TX_RINGS 4 #define TXBB_SIZE 64 #define HEADROOM (2048 / TXBB_SIZE + 1) #define STAMP_STRIDE 64 @@ -137,7 +140,6 @@ enum { #define MLX4_EN_MIN_TX_SIZE (4096 / TXBB_SIZE) #define MLX4_EN_SMALL_PKT_SIZE 64 -#define MLX4_EN_NUM_TX_RINGS 8 #define MLX4_EN_NUM_PPP_RINGS 8 #define MLX4_EN_DEF_TX_RING_SIZE 512 #define MLX4_EN_DEF_RX_RING_SIZE 1024