Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/818095/?format=api
{ "id": 818095, "url": "http://patchwork.ozlabs.org/api/patches/818095/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20170925083230.1193-9-jiri@resnulli.us/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170925083230.1193-9-jiri@resnulli.us>", "list_archive_url": null, "date": "2017-09-25T08:32:28", "name": "[net-next,08/10] mlxsw: spectrum: Add support for setting counters on nexthops", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "c426c1a2697f52c59977297f2a4bc63d468cdbcf", "submitter": { "id": 15321, "url": "http://patchwork.ozlabs.org/api/people/15321/?format=api", "name": "Jiri Pirko", "email": "jiri@resnulli.us" }, "delegate": { "id": 34, "url": "http://patchwork.ozlabs.org/api/users/34/?format=api", "username": "davem", "first_name": "David", "last_name": "Miller", "email": "davem@davemloft.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/20170925083230.1193-9-jiri@resnulli.us/mbox/", "series": [ { "id": 4898, "url": "http://patchwork.ozlabs.org/api/series/4898/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=4898", "date": "2017-09-25T08:32:21", "name": "mlxsw: Add router adjacency dpipe table", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/4898/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/818095/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/818095/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=resnulli-us.20150623.gappssmtp.com\n\theader.i=@resnulli-us.20150623.gappssmtp.com\n\theader.b=\"ZjGAJnG5\"; dkim-atps=neutral" ], "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3y0y5m6dcbz9t62\n\tfor <patchwork-incoming@ozlabs.org>;\n\tMon, 25 Sep 2017 18:33:16 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S934142AbdIYIdC (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tMon, 25 Sep 2017 04:33:02 -0400", "from mail-wm0-f65.google.com ([74.125.82.65]:37721 \"EHLO\n\tmail-wm0-f65.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S934140AbdIYIci (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Mon, 25 Sep 2017 04:32:38 -0400", "by mail-wm0-f65.google.com with SMTP id f4so6471609wmh.4\n\tfor <netdev@vger.kernel.org>; Mon, 25 Sep 2017 01:32:38 -0700 (PDT)", "from localhost (ip-89-177-136-69.net.upcbroadband.cz.\n\t[89.177.136.69]) by smtp.gmail.com with ESMTPSA id\n\tp6sm2790237wrd.10.2017.09.25.01.32.37\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tMon, 25 Sep 2017 01:32:37 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=resnulli-us.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=UZfXbq14ACEs2v364RlOxK5t4yYimPG9lqhRfCn7TUo=;\n\tb=ZjGAJnG5WqlR38AUHSoIz59LmUBrm9W7OChXpbrvAuy4Lvkb14zjCUE644rqygka5o\n\te0JHz0/zL83gRLy+KvdhpCWm+nCgElh/5mceDerZY1L0B4ns1xJIQialoHaLZT9XO+c6\n\ttjC8+W//yDUyO/X87HkCjLnp6BXiwMPEvE4UE4CYU7/GMTlbsDjnGMiFGZofUHXIdDOM\n\tMJzWxLR25XGqiuY5PsW1jDq/ir0Xlf4OKYWqYY8atzLP3PnfLT245/JnjNgbXWWcJsr4\n\twUtEc8fYvZlcrioezMDDoEWqZA4aRMwlhy3waNhvuOSnjll6z11/JrZCA0jQbBEwcEFH\n\tRSkg==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=UZfXbq14ACEs2v364RlOxK5t4yYimPG9lqhRfCn7TUo=;\n\tb=TiD3IqjezXTb94r710fGXc2zRopVIjEteAPC6Ps5T4NsUan4kqJ52tYEe6uA1ps9Ar\n\tVxHAj2cldy9mZpdsr7EHm0cugXEWawR3IWiff0i+XnY7kDOJBSrtRI26XD5HgffHDG9+\n\tN/y8f7E8Gm+/JtSuIwxqRKNeBMSVC/5AxlvJd6YqGyce1kb6G+w7KcGjY40KnjhWsXdD\n\tC6LVAysFJLHDScEv8rZ7Zg2hRtqhz7OereNYFDHlxB4HXjmTR1YGHDxFv5z4O6sJENSD\n\tF1baqoDnxLODpWjrCLheghKCBxatHCf09NI60utOW3BQ3wqCN82dzoGLE9LZ8UpcJoU8\n\te/uw==", "X-Gm-Message-State": "AHPjjUi3okky6+EKyHyBgjfXULBLTHOSV0uNx0GoThYKlpL5fv6Rhu20\n\tRypDM+m34RcP+QaTYoOErnsIzO48", "X-Google-Smtp-Source": "AOwi7QC3XleB5vrd05+XQIoH462Dbc6IASN4Pk6NeLKk1RtCk8WZv+8ymxu4aYhD1JYHCW/1P7OhVg==", "X-Received": "by 10.28.71.211 with SMTP id m80mr1063062wmi.158.1506328357553; \n\tMon, 25 Sep 2017 01:32:37 -0700 (PDT)", "From": "Jiri Pirko <jiri@resnulli.us>", "To": "netdev@vger.kernel.org", "Cc": "davem@davemloft.net, arkadis@mellanox.com, idosch@mellanox.com,\n\tmlxsw@mellanox.com", "Subject": "[patch net-next 08/10] mlxsw: spectrum: Add support for setting\n\tcounters on nexthops", "Date": "Mon, 25 Sep 2017 10:32:28 +0200", "Message-Id": "<20170925083230.1193-9-jiri@resnulli.us>", "X-Mailer": "git-send-email 2.9.5", "In-Reply-To": "<20170925083230.1193-1-jiri@resnulli.us>", "References": "<20170925083230.1193-1-jiri@resnulli.us>", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "From: Arkadi Sharshevsky <arkadis@mellanox.com>\n\nAdd support for setting counters on nexthops based on dpipe's adjacency\ntable counter status. This patch also adds the ability for getting the\ncounter value, which will be used by the dpipe adjacency table dump\nimplementation in the next patches.\n\nSigned-off-by: Arkadi Sharshevsky <arkadis@mellanox.com>\nSigned-off-by: Jiri Pirko <jiri@mellanox.com>\n---\n .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 52 ++++++++++++++++++++--\n .../net/ethernet/mellanox/mlxsw/spectrum_router.h | 2 +\n 2 files changed, 51 insertions(+), 3 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c\nindex 78e0420..2400fff 100644\n--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c\n+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c\n@@ -2067,6 +2067,8 @@ struct mlxsw_sp_nexthop {\n \t\tstruct mlxsw_sp_neigh_entry *neigh_entry;\n \t\tstruct mlxsw_sp_ipip_entry *ipip_entry;\n \t};\n+\tunsigned int counter_index;\n+\tbool counter_valid;\n };\n \n struct mlxsw_sp_nexthop_group {\n@@ -2083,6 +2085,41 @@ struct mlxsw_sp_nexthop_group {\n #define nh_rif\tnexthops[0].rif\n };\n \n+static void mlxsw_sp_nexthop_counter_alloc(struct mlxsw_sp *mlxsw_sp,\n+\t\t\t\t\t struct mlxsw_sp_nexthop *nh)\n+{\n+\tstruct devlink *devlink;\n+\n+\tdevlink = priv_to_devlink(mlxsw_sp->core);\n+\tif (!devlink_dpipe_table_counter_enabled(devlink,\n+\t\t\t\t\t\t MLXSW_SP_DPIPE_TABLE_NAME_ADJ))\n+\t\treturn;\n+\n+\tif (mlxsw_sp_flow_counter_alloc(mlxsw_sp, &nh->counter_index))\n+\t\treturn;\n+\n+\tnh->counter_valid = true;\n+}\n+\n+static void mlxsw_sp_nexthop_counter_free(struct mlxsw_sp *mlxsw_sp,\n+\t\t\t\t\t struct mlxsw_sp_nexthop *nh)\n+{\n+\tif (!nh->counter_valid)\n+\t\treturn;\n+\tmlxsw_sp_flow_counter_free(mlxsw_sp, nh->counter_index);\n+\tnh->counter_valid = false;\n+}\n+\n+int mlxsw_sp_nexthop_counter_get(struct mlxsw_sp *mlxsw_sp,\n+\t\t\t\t struct mlxsw_sp_nexthop *nh, u64 *p_counter)\n+{\n+\tif (!nh->counter_valid)\n+\t\treturn -EINVAL;\n+\n+\treturn mlxsw_sp_flow_counter_get(mlxsw_sp, nh->counter_index,\n+\t\t\t\t\t p_counter, NULL);\n+}\n+\n struct mlxsw_sp_nexthop *mlxsw_sp_nexthop_next(struct mlxsw_sp_router *router,\n \t\t\t\t\t struct mlxsw_sp_nexthop *nh)\n {\n@@ -2411,8 +2448,8 @@ static int mlxsw_sp_adj_index_mass_update(struct mlxsw_sp *mlxsw_sp,\n \treturn 0;\n }\n \n-static int mlxsw_sp_nexthop_mac_update(struct mlxsw_sp *mlxsw_sp, u32 adj_index,\n-\t\t\t\t struct mlxsw_sp_nexthop *nh)\n+static int mlxsw_sp_nexthop_update(struct mlxsw_sp *mlxsw_sp, u32 adj_index,\n+\t\t\t\t struct mlxsw_sp_nexthop *nh)\n {\n \tstruct mlxsw_sp_neigh_entry *neigh_entry = nh->neigh_entry;\n \tchar ratr_pl[MLXSW_REG_RATR_LEN];\n@@ -2421,6 +2458,11 @@ static int mlxsw_sp_nexthop_mac_update(struct mlxsw_sp *mlxsw_sp, u32 adj_index,\n \t\t\t true, MLXSW_REG_RATR_TYPE_ETHERNET,\n \t\t\t adj_index, neigh_entry->rif);\n \tmlxsw_reg_ratr_eth_entry_pack(ratr_pl, neigh_entry->ha);\n+\tif (nh->counter_valid)\n+\t\tmlxsw_reg_ratr_counter_pack(ratr_pl, nh->counter_index, true);\n+\telse\n+\t\tmlxsw_reg_ratr_counter_pack(ratr_pl, 0, false);\n+\n \treturn mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ratr), ratr_pl);\n }\n \n@@ -2455,7 +2497,7 @@ mlxsw_sp_nexthop_group_update(struct mlxsw_sp *mlxsw_sp,\n \t\tif (nh->update || reallocate) {\n \t\t\tswitch (nh->type) {\n \t\t\tcase MLXSW_SP_NEXTHOP_TYPE_ETH:\n-\t\t\t\terr = mlxsw_sp_nexthop_mac_update\n+\t\t\t\terr = mlxsw_sp_nexthop_update\n \t\t\t\t\t (mlxsw_sp, adj_index, nh);\n \t\t\t\tbreak;\n \t\t\tcase MLXSW_SP_NEXTHOP_TYPE_IPIP:\n@@ -2872,6 +2914,7 @@ static int mlxsw_sp_nexthop4_init(struct mlxsw_sp *mlxsw_sp,\n \tif (err)\n \t\treturn err;\n \n+\tmlxsw_sp_nexthop_counter_alloc(mlxsw_sp, nh);\n \tlist_add_tail(&nh->router_list_node, &mlxsw_sp->router->nexthop_list);\n \n \tif (!dev)\n@@ -2898,6 +2941,7 @@ static void mlxsw_sp_nexthop4_fini(struct mlxsw_sp *mlxsw_sp,\n {\n \tmlxsw_sp_nexthop4_type_fini(mlxsw_sp, nh);\n \tlist_del(&nh->router_list_node);\n+\tmlxsw_sp_nexthop_counter_free(mlxsw_sp, nh);\n \tmlxsw_sp_nexthop_remove(mlxsw_sp, nh);\n }\n \n@@ -4135,6 +4179,7 @@ static int mlxsw_sp_nexthop6_init(struct mlxsw_sp *mlxsw_sp,\n \n \tnh->nh_grp = nh_grp;\n \tmemcpy(&nh->gw_addr, &rt->rt6i_gateway, sizeof(nh->gw_addr));\n+\tmlxsw_sp_nexthop_counter_alloc(mlxsw_sp, nh);\n \n \tlist_add_tail(&nh->router_list_node, &mlxsw_sp->router->nexthop_list);\n \n@@ -4150,6 +4195,7 @@ static void mlxsw_sp_nexthop6_fini(struct mlxsw_sp *mlxsw_sp,\n {\n \tmlxsw_sp_nexthop6_type_fini(mlxsw_sp, nh);\n \tlist_del(&nh->router_list_node);\n+\tmlxsw_sp_nexthop_counter_free(mlxsw_sp, nh);\n }\n \n static bool mlxsw_sp_rt6_is_gateway(const struct mlxsw_sp *mlxsw_sp,\ndiff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.h\nindex d6951d5..a6e8659 100644\n--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.h\n+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.h\n@@ -120,5 +120,7 @@ bool mlxsw_sp_nexthop_group_has_ipip(struct mlxsw_sp_nexthop *nh);\n #define mlxsw_sp_nexthop_for_each(nh, router)\t\t\t\t\\\n \tfor (nh = mlxsw_sp_nexthop_next(router, NULL); nh;\t\t\\\n \t nh = mlxsw_sp_nexthop_next(router, nh))\n+int mlxsw_sp_nexthop_counter_get(struct mlxsw_sp *mlxsw_sp,\n+\t\t\t\t struct mlxsw_sp_nexthop *nh, u64 *p_counter);\n \n #endif /* _MLXSW_ROUTER_H_*/\n", "prefixes": [ "net-next", "08/10" ] }