Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/806681/?format=api
{ "id": 806681, "url": "http://patchwork.ozlabs.org/api/patches/806681/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1503942035-24924-12-git-send-email-michael.chan@broadcom.com/", "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": "<1503942035-24924-12-git-send-email-michael.chan@broadcom.com>", "list_archive_url": null, "date": "2017-08-28T17:40:35", "name": "[net-next,11/11] bnxt_en: add code to query TC flower offload stats", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "2dadbe40cd1094624c729128ca65e5e1f65a287c", "submitter": { "id": 68365, "url": "http://patchwork.ozlabs.org/api/people/68365/?format=api", "name": "Michael Chan", "email": "michael.chan@broadcom.com" }, "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/1503942035-24924-12-git-send-email-michael.chan@broadcom.com/mbox/", "series": [ { "id": 225, "url": "http://patchwork.ozlabs.org/api/series/225/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=225", "date": "2017-08-28T17:40:24", "name": "bnxt_en: Updates.", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/225/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/806681/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/806681/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 (1024-bit key;\n\tunprotected) header.d=broadcom.com header.i=@broadcom.com\n\theader.b=\"CUYowT5w\"; dkim-atps=neutral" ], "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xgzZs1F7Vz9sMN\n\tfor <patchwork-incoming@ozlabs.org>;\n\tTue, 29 Aug 2017 03:41:09 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751660AbdH1RlH (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tMon, 28 Aug 2017 13:41:07 -0400", "from mail-qk0-f171.google.com ([209.85.220.171]:34627 \"EHLO\n\tmail-qk0-f171.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751564AbdH1RlE (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Mon, 28 Aug 2017 13:41:04 -0400", "by mail-qk0-f171.google.com with SMTP id a77so5390709qkb.1\n\tfor <netdev@vger.kernel.org>; Mon, 28 Aug 2017 10:41:04 -0700 (PDT)", "from localhost.dhcp.broadcom.net ([192.19.255.250])\n\tby smtp.gmail.com with ESMTPSA id\n\t20sm592006qtu.52.2017.08.28.10.41.02\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tMon, 28 Aug 2017 10:41:03 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=broadcom.com; s=google;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=FGE4fZX2T3ONou7ZdGeauySZizcLuvmeMLRneu7CPzs=;\n\tb=CUYowT5wf+wnvHMVqrKTf4YKlfUseNakBTBsJoPrC8SkR0jvIfcDKFw9jQnKxNlTcT\n\t3whzIdtexTjCQZS7iIbVSiBsssj2lWnLzQbo5N9aUR9kDLhDrdp5wCyh5WcP9jYgeEFe\n\tqjLUbvYU13iYefPC9pFHPa9msj7CKu6DKOlNY=", "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=FGE4fZX2T3ONou7ZdGeauySZizcLuvmeMLRneu7CPzs=;\n\tb=bHq3+z/lb0VpTvVoMsD4Pmdtp/24zYjsFopwPIiK+wY2Lw807zwpWsoVAsBAYTcqJe\n\tGamIV3Jo/hVYuh2A+irWR9NzL6Pe1wZQtc7qzvZY7JFHNCbUa0JI0f/BStPtSSwKUcgn\n\tCE+2C44LeQwK1q1sTyPbQ9aXudLTWByOAxMiEhURv8VpT9EPowmkX9Tz2rWXVrLSgTCV\n\tw/22K/mnssMgcKhqujiX9So38IzwUAKWY+nZixEmYWfZbLmtlJrYt82T7g55nTbFcM4o\n\tlLqL5R09Mb46SG8iZgm5GUQ/jMdZVhx9vHc/oXGMUg/qJ0sB2O+6s+/BjPHKq/m993io\n\t/fgw==", "X-Gm-Message-State": "AHYfb5jyK+qfl6pYFOqft7tZrx7fSDjmMpfz8bxSvA89RqRFLS7I3nyn\n\tRXGQs/9qPKjNRiVA", "X-Received": "by 10.233.232.73 with SMTP id a70mr1794540qkg.287.1503942063728; \n\tMon, 28 Aug 2017 10:41:03 -0700 (PDT)", "From": "Michael Chan <michael.chan@broadcom.com>", "To": "davem@davemloft.net", "Cc": "netdev@vger.kernel.org, Sathya Perla <sathya.perla@broadcom.com>", "Subject": "[PATCH net-next 11/11] bnxt_en: add code to query TC flower offload\n\tstats", "Date": "Mon, 28 Aug 2017 13:40:35 -0400", "Message-Id": "<1503942035-24924-12-git-send-email-michael.chan@broadcom.com>", "X-Mailer": "git-send-email 1.8.3.1", "In-Reply-To": "<1503942035-24924-1-git-send-email-michael.chan@broadcom.com>", "References": "<1503942035-24924-1-git-send-email-michael.chan@broadcom.com>", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "From: Sathya Perla <sathya.perla@broadcom.com>\n\nThis patch adds code to implement TC_CLSFLOWER_STATS TC-cmd and the\nrequired FW code to query the stats from the HW.\n\nSigned-off-by: Sathya Perla <sathya.perla@broadcom.com>\nSigned-off-by: Michael Chan <michael.chan@broadcom.com>\n---\n drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c | 95 ++++++++++++++++++++++++++++\n 1 file changed, 95 insertions(+)", "diff": "diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c\nindex 5fa0835..ccd699f 100644\n--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c\n+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c\n@@ -405,6 +405,81 @@ static int bnxt_hwrm_cfa_flow_alloc(struct bnxt *bp, struct bnxt_tc_flow *flow,\n \treturn rc;\n }\n \n+/* Add val to accum while handling a possible wraparound\n+ * of val. Eventhough val is of type u64, its actual width\n+ * is denoted by mask and will wrap-around beyond that width.\n+ */\n+static void accumulate_val(u64 *accum, u64 val, u64 mask)\n+{\n+#define low_bits(x, mask)\t\t((x) & (mask))\n+#define high_bits(x, mask)\t\t((x) & ~(mask))\n+\tbool wrapped = val < low_bits(*accum, mask);\n+\n+\t*accum = high_bits(*accum, mask) + val;\n+\tif (wrapped)\n+\t\t*accum += (mask + 1);\n+}\n+\n+/* The HW counters' width is much less than 64bits.\n+ * Handle possible wrap-around while updating the stat counters\n+ */\n+static void bnxt_flow_stats_fix_wraparound(struct bnxt_tc_info *tc_info,\n+\t\t\t\t\t struct bnxt_tc_flow_stats *stats,\n+\t\t\t\t\t struct bnxt_tc_flow_stats *hw_stats)\n+{\n+\taccumulate_val(&stats->bytes, hw_stats->bytes, tc_info->bytes_mask);\n+\taccumulate_val(&stats->packets, hw_stats->packets,\n+\t\t tc_info->packets_mask);\n+}\n+\n+/* Fix possible wraparound of the stats queried from HW, calculate\n+ * the delta from prev_stats, and also update the prev_stats.\n+ * The HW flow stats are fetched under the hwrm_cmd_lock mutex.\n+ * This routine is best called while under the mutex so that the\n+ * stats processing happens atomically.\n+ */\n+static void bnxt_flow_stats_calc(struct bnxt_tc_info *tc_info,\n+\t\t\t\t struct bnxt_tc_flow *flow,\n+\t\t\t\t struct bnxt_tc_flow_stats *stats)\n+{\n+\tstruct bnxt_tc_flow_stats *acc_stats, *prev_stats;\n+\n+\tacc_stats = &flow->stats;\n+\tbnxt_flow_stats_fix_wraparound(tc_info, acc_stats, stats);\n+\n+\tprev_stats = &flow->prev_stats;\n+\tstats->bytes = acc_stats->bytes - prev_stats->bytes;\n+\tstats->packets = acc_stats->packets - prev_stats->packets;\n+\t*prev_stats = *acc_stats;\n+}\n+\n+static int bnxt_hwrm_cfa_flow_stats_get(struct bnxt *bp,\n+\t\t\t\t\t__le16 flow_handle,\n+\t\t\t\t\tstruct bnxt_tc_flow *flow,\n+\t\t\t\t\tstruct bnxt_tc_flow_stats *stats)\n+{\n+\tstruct hwrm_cfa_flow_stats_output *resp = bp->hwrm_cmd_resp_addr;\n+\tstruct hwrm_cfa_flow_stats_input req = { 0 };\n+\tint rc;\n+\n+\tbnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_CFA_FLOW_STATS, -1, -1);\n+\treq.num_flows = cpu_to_le16(1);\n+\treq.flow_handle_0 = flow_handle;\n+\n+\tmutex_lock(&bp->hwrm_cmd_lock);\n+\trc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);\n+\tif (!rc) {\n+\t\tstats->packets = le64_to_cpu(resp->packet_0);\n+\t\tstats->bytes = le64_to_cpu(resp->byte_0);\n+\t\tbnxt_flow_stats_calc(&bp->tc_info, flow, stats);\n+\t} else {\n+\t\tnetdev_info(bp->dev, \"error rc=%d\", rc);\n+\t}\n+\n+\tmutex_unlock(&bp->hwrm_cmd_lock);\n+\treturn rc;\n+}\n+\n static int bnxt_tc_put_l2_node(struct bnxt *bp,\n \t\t\t struct bnxt_tc_flow_node *flow_node)\n {\n@@ -647,6 +722,26 @@ static int bnxt_tc_del_flow(struct bnxt *bp,\n static int bnxt_tc_get_flow_stats(struct bnxt *bp,\n \t\t\t\t struct tc_cls_flower_offload *tc_flow_cmd)\n {\n+\tstruct bnxt_tc_info *tc_info = &bp->tc_info;\n+\tstruct bnxt_tc_flow_node *flow_node;\n+\tstruct bnxt_tc_flow_stats stats;\n+\tint rc;\n+\n+\tflow_node = rhashtable_lookup_fast(&tc_info->flow_table,\n+\t\t\t\t\t &tc_flow_cmd->cookie,\n+\t\t\t\t\t tc_info->flow_ht_params);\n+\tif (!flow_node) {\n+\t\tnetdev_info(bp->dev, \"Error: no flow_node for cookie %lx\",\n+\t\t\t tc_flow_cmd->cookie);\n+\t\treturn -1;\n+\t}\n+\n+\trc = bnxt_hwrm_cfa_flow_stats_get(bp, flow_node->flow_handle,\n+\t\t\t\t\t &flow_node->flow, &stats);\n+\tif (rc)\n+\t\treturn rc;\n+\n+\ttcf_exts_stats_update(tc_flow_cmd->exts, stats.bytes, stats.packets, 0);\n \treturn 0;\n }\n \n", "prefixes": [ "net-next", "11/11" ] }