From patchwork Thu Oct 12 12:19:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 30280 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6FC781B34D; Thu, 12 Oct 2017 14:20:57 +0200 (CEST) Received: from mail-wm0-f43.google.com (mail-wm0-f43.google.com [74.125.82.43]) by dpdk.org (Postfix) with ESMTP id DA2861B31E for ; Thu, 12 Oct 2017 14:20:44 +0200 (CEST) Received: by mail-wm0-f43.google.com with SMTP id q132so12826035wmd.2 for ; Thu, 12 Oct 2017 05:20:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mJOKhP2Czu4obZcHJjHAbo0fYb8mYcNS9Mko8VyJIbg=; b=LJIb16SdIJhW00Sgd2uxc4VCVdhYEN1AvISP3+++ue1EDzW2BjpCKrFyLKOBmvLO1O AVPydlSG8f+1dCuTScPiqKl6g5f+KpRPStmWnNNTDSYmBXpBdAjPjLUyMNDwCaGbmpzg s76Gyvs0PawVEM9J0+BtgXSaQsVddhtTtyu4mmhH/5IYf0rWbVmrfcBGoOr9N4+x4ZX8 qbCaTieoURejAn9JcuqeZQmDs32Sj7rVbHXrPh2funfEZ2mF70kkVB29TTm1tIp+0+LH 1QPmcT7GWZ93SjSLcVJkOdi3WerMP794bTWwpheykXAC6+fFKlq4zsJKVZ7oGK6vmIb6 k4nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mJOKhP2Czu4obZcHJjHAbo0fYb8mYcNS9Mko8VyJIbg=; b=PfhECYC/NOw5eqRAxNjrdKRPUUW6qUXqxuUGVB+/kfvoP+T3DJEDJT73KLH7pI4mQU z2J8stulqsEWzXgG0zKTBuxyfWqvoTqVTB6iAo5qmuHde7zY658Y3VqdlqzQKHHYtz4R H6CRH4XmfGxzeDIfHHCJ2nrh7ilj+uir6voTSgcXVaCqIZwCU6Ea8Veh6PSC/Y9urjT6 BiJQQspoyUx45+8jeybcM8ZBPlcWO9rwDo6/J8il8+7A7efcPsyepNmFEH3NMB+RNwtr DqYOuJUzO51vexQc0uY54DPxqi/IRVszv08ZdEBuKuIMwBdpgLjHM2YmeqLoGS2Vqk7G yFcA== X-Gm-Message-State: AMCzsaVYdwNEtEHuliJUj4T3gCHM0U8McpmZECmN7ApeHNri4jHmKoWu mKzI6FWcqw/JeyPYMQa5p0rU/Q== X-Google-Smtp-Source: AOwi7QDO1X0p3GHwVYaJ1Y/0I0Wjzvj6LOaPdigyPIVkHmNEt9gCYxGAV9Vjpg85sVHOQhrLVd6+zA== X-Received: by 10.28.49.137 with SMTP id x131mr1675626wmx.116.1507810844549; Thu, 12 Oct 2017 05:20:44 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id t8sm10724945wra.52.2017.10.12.05.20.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Oct 2017 05:20:43 -0700 (PDT) From: Adrien Mazarguil To: Ferruh Yigit Cc: Nelio Laranjeiro , dev@dpdk.org Date: Thu, 12 Oct 2017 14:19:43 +0200 Message-Id: <6e412f333dc9f2882d3968d07a53ffae5aa225cd.1507809961.git.adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 29/29] net/mlx4: add RSS support outside flow API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Bring back support for automatic RSS with the default flow rules when not in isolated mode. Balancing is done according to unspecified default settings, as was the case before this entire rework. Since the number of queues part of RSS contexts is limited to power of two values, the number of configured queues is rounded down to its previous power of two; extra queues are silently discarded. This does not prevent dedicated flow rules from targeting them. Signed-off-by: Adrien Mazarguil Acked-by: Nelio Laranjeiro --- drivers/net/mlx4/mlx4_flow.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c index 4c498f0..5c4bf8e 100644 --- a/drivers/net/mlx4/mlx4_flow.c +++ b/drivers/net/mlx4/mlx4_flow.c @@ -1256,12 +1256,21 @@ mlx4_flow_internal(struct priv *priv, struct rte_flow_error *error) .type = RTE_FLOW_ITEM_TYPE_END, }, }; + /* + * Round number of queues down to their previous power of 2 to + * comply with RSS context limitations. Extra queues silently do not + * get RSS by default. + */ + uint32_t queues = + rte_align32pow2(priv->dev->data->nb_rx_queues + 1) >> 1; + alignas(struct rte_flow_action_rss) uint8_t rss_conf_data + [offsetof(struct rte_flow_action_rss, queue) + + sizeof(((struct rte_flow_action_rss *)0)->queue[0]) * queues]; + struct rte_flow_action_rss *rss_conf = (void *)rss_conf_data; struct rte_flow_action actions[] = { { - .type = RTE_FLOW_ACTION_TYPE_QUEUE, - .conf = &(struct rte_flow_action_queue){ - .index = 0, - }, + .type = RTE_FLOW_ACTION_TYPE_RSS, + .conf = rss_conf, }, { .type = RTE_FLOW_ACTION_TYPE_END, @@ -1281,6 +1290,13 @@ mlx4_flow_internal(struct priv *priv, struct rte_flow_error *error) unsigned int i; int err = 0; + /* Prepare default RSS configuration. */ + *rss_conf = (struct rte_flow_action_rss){ + .rss_conf = NULL, /* Rely on default fallback settings. */ + .num = queues, + }; + for (i = 0; i != queues; ++i) + rss_conf->queue[i] = i; /* * Set up VLAN item if filtering is enabled and at least one VLAN * filter is configured.