From patchwork Thu Oct 12 12:19:19 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 30256 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 DEDA51B2BC; Thu, 12 Oct 2017 14:20:15 +0200 (CEST) Received: from mail-wm0-f53.google.com (mail-wm0-f53.google.com [74.125.82.53]) by dpdk.org (Postfix) with ESMTP id 82DA61B290 for ; Thu, 12 Oct 2017 14:20:12 +0200 (CEST) Received: by mail-wm0-f53.google.com with SMTP id i124so12805513wmf.3 for ; Thu, 12 Oct 2017 05:20:12 -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=4zHxUGAdahzQnFqKJpNudIexOcx1CMZBEpfCX/BBB3g=; b=B2csZAh5JKc7fnQYXT5tfvo6MRA30xqizGzWx3LjYa84u4J3mXhTjaXt1Oyj3ZirIk QuqYpFXZ+w9BThk4IXGx1ijY6sDGex7WXaF7dp2sP89aA3UBuXh1XTxOihp8/ZaTQhu+ UHwDMpe2idc65cB51d59rwVSg3nQefMioyqLqyFV0+Of8rWL0fbTpTPzbn0B3KHQpWXN d7GzjRS/nTP/UxUx71xIkYZWh5IIjOtasOT3KeJ6pytUBs7UrbLlgR5tfiF/DNShWCSB DT5QHExnnp5zrDcjz9wBcV0+35LRvNNfKb2/+c2yXGXeqPrmf9cxFgMOTZ7eRxbMh2Z0 5CWA== 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=4zHxUGAdahzQnFqKJpNudIexOcx1CMZBEpfCX/BBB3g=; b=WRnlSSTpEpcBZFxSI31YmFBNl2v3fNNrCAIRrgcafDinGQsfrpWWETtBsGHSaga5Cn 1ZYLzwTo6Js1N7rYfuds49kKPfgAFYL4ejZqojgbSpxXqKvvGp4mj6e9zJCGblIp5YZw 3XV6dSC0j8e57dpzUZx7QC0VyFt7ChsDmvRnz2LYce9lx/F4+YCNjDmUOtkT3CVNm9Vd dU4d3Z2Bu38spMBm6lF2MejS/tLk+DY2etiYORQd43awEK4Jne9qJFEDM7UcpqMnNrwy pRmWR/kVAnfRq+CFgVp6NcOxyaXUSizMrwiW8q9w24iL4bQM8V2HWmO45rA2wfszwRv/ WU9g== X-Gm-Message-State: AMCzsaXQWaBVxq71UqNE6OIy425V0m4p3y8NNLtpxZJHO7nXZBfCn4zq OtYN9NN6i2RUx6GTfv1DSVLV1w== X-Google-Smtp-Source: AOwi7QDhknFe/G3Gdyze5xYKF4bafyRFRpEmrwlPj6kmTYPOuAjCFG0gpjFQzNvwrBE0AC1iFdo6gQ== X-Received: by 10.223.170.139 with SMTP id h11mr2165620wrc.167.1507810812113; Thu, 12 Oct 2017 05:20:12 -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 d27sm34028592wrd.67.2017.10.12.05.20.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Oct 2017 05:20:10 -0700 (PDT) From: Adrien Mazarguil To: Ferruh Yigit Cc: Nelio Laranjeiro , dev@dpdk.org Date: Thu, 12 Oct 2017 14:19:19 +0200 Message-Id: <6b54329baf3f351b052befa10de08b7b78e4fb82.1507809961.git.adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 05/29] net/mlx4: expose support for flow rule priorities 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" This PMD supports up to 4096 flow rule priority levels (0 to 4095). Applications were not allowed to use them until now due to overlaps with the default flows (e.g. MAC address, promiscuous mode). This is not an issue in isolated mode when such flows do not exist. Signed-off-by: Adrien Mazarguil Acked-by: Nelio Laranjeiro --- drivers/net/mlx4/mlx4_flow.c | 20 +++++++++++++++++--- drivers/net/mlx4/mlx4_flow.h | 3 +++ drivers/net/mlx4/mlx4_utils.h | 6 ++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c index 018843b..730249b 100644 --- a/drivers/net/mlx4/mlx4_flow.c +++ b/drivers/net/mlx4/mlx4_flow.c @@ -597,8 +597,8 @@ mlx4_flow_prepare(struct priv *priv, .queue = 0, .drop = 0, }; + uint32_t priority_override = 0; - (void)priv; if (attr->group) { rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ATTR_GROUP, @@ -606,11 +606,22 @@ mlx4_flow_prepare(struct priv *priv, "groups are not supported"); return -rte_errno; } - if (attr->priority) { + if (priv->isolated) { + priority_override = attr->priority; + } else if (attr->priority) { rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY, NULL, - "priorities are not supported"); + "priorities are not supported outside" + " isolated mode"); + return -rte_errno; + } + if (attr->priority > MLX4_FLOW_PRIORITY_LAST) { + rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY, + NULL, + "maximum priority level is " + MLX4_STR_EXPAND(MLX4_FLOW_PRIORITY_LAST)); return -rte_errno; } if (attr->egress) { @@ -680,6 +691,9 @@ mlx4_flow_prepare(struct priv *priv, } flow->offset += cur_item->dst_sz; } + /* Use specified priority level when in isolated mode. */ + if (priv->isolated && flow->ibv_attr) + flow->ibv_attr->priority = priority_override; /* Go over actions list */ for (; actions->type != RTE_FLOW_ACTION_TYPE_END; ++actions) { if (actions->type == RTE_FLOW_ACTION_TYPE_VOID) { diff --git a/drivers/net/mlx4/mlx4_flow.h b/drivers/net/mlx4/mlx4_flow.h index 459030c..8ac09f1 100644 --- a/drivers/net/mlx4/mlx4_flow.h +++ b/drivers/net/mlx4/mlx4_flow.h @@ -52,6 +52,9 @@ #include #include +/** Last and lowest priority level for a flow rule. */ +#define MLX4_FLOW_PRIORITY_LAST UINT32_C(0xfff) + /** PMD-specific (mlx4) definition of a flow rule handle. */ struct rte_flow { LIST_ENTRY(rte_flow) next; /**< Pointer to the next flow structure. */ diff --git a/drivers/net/mlx4/mlx4_utils.h b/drivers/net/mlx4/mlx4_utils.h index b9c02d5..13f731a 100644 --- a/drivers/net/mlx4/mlx4_utils.h +++ b/drivers/net/mlx4/mlx4_utils.h @@ -104,6 +104,12 @@ pmd_drv_log_basename(const char *s) \ snprintf(name, sizeof(name), __VA_ARGS__) +/** Generate a string out of the provided arguments. */ +#define MLX4_STR(...) # __VA_ARGS__ + +/** Similar to MLX4_STR() with enclosed macros expanded first. */ +#define MLX4_STR_EXPAND(...) MLX4_STR(__VA_ARGS__) + /* mlx4_utils.c */ int mlx4_fd_set_non_blocking(int fd);