From patchwork Wed Oct 11 14:35:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 30127 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 BFCCA1B1F8; Wed, 11 Oct 2017 16:36:28 +0200 (CEST) Received: from mail-wm0-f48.google.com (mail-wm0-f48.google.com [74.125.82.48]) by dpdk.org (Postfix) with ESMTP id 204261B1CE for ; Wed, 11 Oct 2017 16:36:23 +0200 (CEST) Received: by mail-wm0-f48.google.com with SMTP id l68so5398863wmd.5 for ; Wed, 11 Oct 2017 07:36:23 -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=YOrBwv6g7HluHpFD1l+Oi3anU9X6keHWHNvykkXqztAarLBhgkB+rzK7HNPHIGKDz3 5cBKbdqu99xj1aF9ZHG/+U0kI9lGAbbOElTQIM5Tl2Tqs4ksdNQGyrV65bzhoYOvKiOv 5fNVcOD7gfldNmWJdiW5TMtJgL5U/XbMJnNgT+/xF3fWIfgaW35wf6tXk+2QR+lFnbw8 AoNUXP1mpjSbYOIRMsPefCiDJ4ciWptWfpTy6XWLy7Io35ht5QWaUIsIQcDCUxXIxhEx zi4oiwcmQSZ+1uEu4BE9gVqh8ol1+RlhkK3+nS7WHTomeem1n3B6S5Kc5lTDqzzsj0sH LfOA== 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=hgUueOd7jaXJevk7F3J+srcCnmkNY5sqxC6F06oUoRyjQM1u6EXCNrXgACkc92mh1k xDXG0f9TVZhpTrULjpijjoZ13JSKtFIiITJCAUPkfvw8/YSDpnr8fecBGNonXDXfVdza mLwkS7SLIhP9mCnLkEX73oz7w6ku2rc/NEwmKgSwTcmbkBAwRRu7yJ58fBQlOoC2v3uB kGfcYPl2po39CFBtn/nZmcs2O8tM3XO372FP2yVvoTDek2ub2aPxcTB1eUZxaanD9TgB POeK+N89nQ+PdyYZRYmodjiM+x2T/mcTEnqDgNmyH8JpvRjKm0GaWpBWro6cpjN7+HVx V2FQ== X-Gm-Message-State: AMCzsaXxdyYiJCwGppUnnHgx3qDYP/RgQTSUrGRQevTn+QQ3ZNZHpG6e tS6NXCf93rDquK0Zi8FwqWl12nRT X-Google-Smtp-Source: AOwi7QCG5axMt6GROoLw2btaRcIrLBn+2MpKF3cVgWxt0nT7ZwFpPVDdb499blpui0VqcZZ/9kkcEQ== X-Received: by 10.28.232.138 with SMTP id f10mr13480244wmi.130.1507732582778; Wed, 11 Oct 2017 07:36:22 -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 p78sm24519502wma.11.2017.10.11.07.36.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Oct 2017 07:36:22 -0700 (PDT) From: Adrien Mazarguil To: Ferruh Yigit Cc: dev@dpdk.org Date: Wed, 11 Oct 2017 16:35:07 +0200 Message-Id: <7f637e96f093e817c7078c802575be1f50ae2b42.1507730496.git.adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 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);