From patchwork Wed Oct 11 14:35:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 30152 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 92C0F1B2D9; Wed, 11 Oct 2017 16:37:04 +0200 (CEST) Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by dpdk.org (Postfix) with ESMTP id 4EAF21B27A for ; Wed, 11 Oct 2017 16:36:53 +0200 (CEST) Received: by mail-wm0-f51.google.com with SMTP id t69so5372948wmt.2 for ; Wed, 11 Oct 2017 07:36:53 -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=Rd3jp9WIa2jY84uaKxCHzwzI0WGi9q/ZwZDeMuUbMUI=; b=fs5j5SBoByZzKmm2ZxFr+lwnwVIO6S3mgvbNQ/qOllUcx6kc1T+a2Zoo8x41OGdOYY GOgZP/dhCBf4G3L5VXAXMmv1hfQACkee6TS0RFuJ1XH1oFAa/x2I5G2VuKoJ/faqpVLk y3QoO3a1VISlgRl5NJ9ngwuii1gONNNpYYeaTNwFfykxuf1bU+3JukRYdbnvfChd/aD8 TkoDvjuCkaOQCnHrQ280bQK9ZVXmloi5jIMB3hN+kRS+cf5czUcLWI5dAOh54deBItIO JlZgUw9aaKHh04q5UcefXN4DgOsD/HLkLYRxQSH9iSNvfxPswj9NAVrnuxX1TStzuEK0 2Zgg== 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=Rd3jp9WIa2jY84uaKxCHzwzI0WGi9q/ZwZDeMuUbMUI=; b=FlVz218QCAXzIqZOUzih2T/ZqIAVDDZLBlDWRzXbcyhPFi+YyG5cOfl8M/xWz00rFI R+SfMmZoeO6OefY1RBXXkSHaUZ8D3wWtrrxRv96TZ/eFzH7DZ9ftg+DqqZyFDm4QE4yE MVyb+ME0oanIEAhCubsMoQdx1zqegpCZ3xT6lGyVBBGGBw5q4z3iq2J3c+swSTQhG2o0 hxPIP/mrbMZh6R8Q8LxrY6YdmJzTPRg2KBb1+F43+Gq8hJlLlmVDg9oCVguSyI5rRW5F YuVqcfNtk6qLOf/h325rz09QgWWuCZqiU6mfSj+Z5xwlVVmcxQhoRbkDk74wQolY3fWk XHfw== X-Gm-Message-State: AMCzsaUb3WpA1XvECmWwyC6CvX8yXohCzAWJxQnerWBc4SDQrD6tySA+ LW5cG3/REnKEdZlcvCpbdD0IiKeS X-Google-Smtp-Source: AOwi7QA+YnmqKUa33mg4X3l9VJTsjTOWrUdkDgTCedA/oOslo7f4MQ3sBTVEElhOn9yB8Cmx4jwo7g== X-Received: by 10.28.7.78 with SMTP id 75mr13324267wmh.31.1507732613054; Wed, 11 Oct 2017 07:36:53 -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 l37sm9017940wrl.47.2017.10.11.07.36.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Oct 2017 07:36:52 -0700 (PDT) From: Adrien Mazarguil To: Ferruh Yigit Cc: dev@dpdk.org Date: Wed, 11 Oct 2017 16:35:31 +0200 Message-Id: <813e1709b974860013ee4c95f03de39a07adc3f6.1507730496.git.adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 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 41b7a4c..eca3990 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.