Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1276665/?format=api
{ "id": 1276665, "url": "http://patchwork.ozlabs.org/api/patches/1276665/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20200424201623.10971-9-andre.guedes@intel.com/", "project": { "id": 46, "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api", "name": "Intel Wired Ethernet development", "link_name": "intel-wired-lan", "list_id": "intel-wired-lan.osuosl.org", "list_email": "intel-wired-lan@osuosl.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20200424201623.10971-9-andre.guedes@intel.com>", "list_archive_url": null, "date": "2020-04-24T20:16:12", "name": "[08/19] igc: Refactor igc_ethtool_add_nfc_rule()", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "6d7e7804bd46c0e20cf3e300456a62142cfd908d", "submitter": { "id": 72323, "url": "http://patchwork.ozlabs.org/api/people/72323/?format=api", "name": "Andre Guedes", "email": "andre.guedes@intel.com" }, "delegate": { "id": 68, "url": "http://patchwork.ozlabs.org/api/users/68/?format=api", "username": "jtkirshe", "first_name": "Jeff", "last_name": "Kirsher", "email": "jeffrey.t.kirsher@intel.com" }, "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20200424201623.10971-9-andre.guedes@intel.com/mbox/", "series": [ { "id": 172579, "url": "http://patchwork.ozlabs.org/api/series/172579/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=172579", "date": "2020-04-24T20:16:07", "name": "igc: Fixes to NFC support code", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/172579/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1276665/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1276665/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<intel-wired-lan-bounces@osuosl.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Delivered-To": [ "patchwork-incoming@bilbo.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Authentication-Results": [ "ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=osuosl.org\n (client-ip=140.211.166.137; helo=fraxinus.osuosl.org;\n envelope-from=intel-wired-lan-bounces@osuosl.org; receiver=<UNKNOWN>)", "ozlabs.org;\n dmarc=fail (p=none dis=none) header.from=intel.com" ], "Received": [ "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 49857h155Pz9sSJ\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 25 Apr 2020 06:17:35 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id BE755868A9;\n\tFri, 24 Apr 2020 20:17:33 +0000 (UTC)", "from fraxinus.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id 1-UAKOEzJ0T0; Fri, 24 Apr 2020 20:17:32 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id E224B868BC;\n\tFri, 24 Apr 2020 20:17:32 +0000 (UTC)", "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n by ash.osuosl.org (Postfix) with ESMTP id BB6141BF9C2\n for <intel-wired-lan@lists.osuosl.org>; Fri, 24 Apr 2020 20:17:27 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n by fraxinus.osuosl.org (Postfix) with ESMTP id B279E86B59\n for <intel-wired-lan@lists.osuosl.org>; Fri, 24 Apr 2020 20:17:27 +0000 (UTC)", "from fraxinus.osuosl.org ([127.0.0.1])\n by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n with ESMTP id Zh844B2ZICuX for <intel-wired-lan@lists.osuosl.org>;\n Fri, 24 Apr 2020 20:17:27 +0000 (UTC)", "from mga04.intel.com (mga04.intel.com [192.55.52.120])\n by fraxinus.osuosl.org (Postfix) with ESMTPS id F1387868C9\n for <intel-wired-lan@lists.osuosl.org>; Fri, 24 Apr 2020 20:17:26 +0000 (UTC)", "from orsmga001.jf.intel.com ([10.7.209.18])\n by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 24 Apr 2020 13:17:26 -0700", "from kleandre-mobl.amr.corp.intel.com ([10.213.164.39])\n by orsmga001.jf.intel.com with ESMTP; 24 Apr 2020 13:17:26 -0700" ], "X-Virus-Scanned": [ "amavisd-new at osuosl.org", "amavisd-new at osuosl.org" ], "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6", "IronPort-SDR": [ "\n Th0tszmc3hYS0yzlPGDGYF2/yfwzo0QsJ54w1hUL8EsJCuSnjiQDny7G3dT0YSzqz/0IoD9dIt\n 6yeCS/IXxaJw==", "\n G1jvgECB+GOj/nQJbnHDvqpuLm3I6+JF2EUprSIwrl5k+GxxDuuzBFrZL0d08B91cxa737vr6N\n O7NKG/pYJLhA==" ], "X-Amp-Result": "SKIPPED(no attachment in message)", "X-Amp-File-Uploaded": "False", "X-ExtLoop1": "1", "X-IronPort-AV": "E=Sophos;i=\"5.73,313,1583222400\"; d=\"scan'208\";a=\"335474510\"", "From": "Andre Guedes <andre.guedes@intel.com>", "To": "intel-wired-lan@lists.osuosl.org", "Date": "Fri, 24 Apr 2020 13:16:12 -0700", "Message-Id": "<20200424201623.10971-9-andre.guedes@intel.com>", "X-Mailer": "git-send-email 2.26.0", "In-Reply-To": "<20200424201623.10971-1-andre.guedes@intel.com>", "References": "<20200424201623.10971-1-andre.guedes@intel.com>", "MIME-Version": "1.0", "Subject": "[Intel-wired-lan] [PATCH 08/19] igc: Refactor\n igc_ethtool_add_nfc_rule()", "X-BeenThere": "intel-wired-lan@osuosl.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n <intel-wired-lan.osuosl.org>", "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>,\n <mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>", "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>", "List-Post": "<mailto:intel-wired-lan@osuosl.org>", "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>", "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>,\n <mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "intel-wired-lan-bounces@osuosl.org", "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>" }, "content": "Current implementation of igc_ethtool_add_nfc_rule() is quite long and a\nbit convoluted so this patch does a code refactoring to improve the\ncode.\n\nCode related to NFC rule object initialization is refactored out to the\nlocal helper function igc_ethtool_init_nfc_rule(). Likewise, code\nrelated to NFC rule validation is refactored out to another local\nhelper, igc_ethtool_is_nfc_rule_valid().\n\nRX_CLS_FLOW_DISC check is removed since it is redundant. The macro is\ndefined as the max value fsp->ring_cookie can have, so checking if\nfsp->ring_cookie >= adapter->num_rx_queues is already sufficient.\n\nFinally, some log messages are improved or added, and obvious comments\nare removed.\n\nSigned-off-by: Andre Guedes <andre.guedes@intel.com>\n---\n drivers/net/ethernet/intel/igc/igc_ethtool.c | 150 ++++++++++++-------\n 1 file changed, 92 insertions(+), 58 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c\nindex f9518aa1375b..bdb7c99f66be 100644\n--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c\n+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c\n@@ -1271,9 +1271,6 @@ static int igc_ethtool_update_nfc_rule(struct igc_adapter *adapter,\n \tif (!input)\n \t\treturn err;\n \n-\t/* initialize node */\n-\tINIT_HLIST_NODE(&input->nfc_node);\n-\n \t/* add filter to the list */\n \tif (parent)\n \t\thlist_add_behind(&input->nfc_node, &parent->nfc_node);\n@@ -1286,41 +1283,19 @@ static int igc_ethtool_update_nfc_rule(struct igc_adapter *adapter,\n \treturn 0;\n }\n \n-static int igc_ethtool_add_nfc_rule(struct igc_adapter *adapter,\n-\t\t\t\t struct ethtool_rxnfc *cmd)\n+static void igc_ethtool_init_nfc_rule(struct igc_nfc_rule *rule,\n+\t\t\t\t const struct ethtool_rx_flow_spec *fsp)\n {\n-\tstruct net_device *netdev = adapter->netdev;\n-\tstruct ethtool_rx_flow_spec *fsp =\n-\t\t(struct ethtool_rx_flow_spec *)&cmd->fs;\n-\tstruct igc_nfc_rule *rule, *tmp;\n-\tint err = 0;\n-\n-\tif (!(netdev->hw_features & NETIF_F_NTUPLE))\n-\t\treturn -EOPNOTSUPP;\n+\tINIT_HLIST_NODE(&rule->nfc_node);\n \n-\t/* Don't allow programming if the action is a queue greater than\n-\t * the number of online Rx queues.\n-\t */\n-\tif (fsp->ring_cookie == RX_CLS_FLOW_DISC ||\n-\t fsp->ring_cookie >= adapter->num_rx_queues) {\n-\t\tnetdev_err(netdev,\n-\t\t\t \"ethtool -N: The specified action is invalid\");\n-\t\treturn -EINVAL;\n-\t}\n+\trule->action = fsp->ring_cookie;\n+\trule->sw_idx = fsp->location;\n \n-\t/* Don't allow indexes to exist outside of available space */\n-\tif (fsp->location >= IGC_MAX_RXNFC_RULES) {\n-\t\tnetdev_err(netdev, \"Location out of range\");\n-\t\treturn -EINVAL;\n+\tif ((fsp->flow_type & FLOW_EXT) && fsp->m_ext.vlan_tci) {\n+\t\trule->filter.vlan_tci = ntohs(fsp->h_ext.vlan_tci);\n+\t\trule->filter.match_flags |= IGC_FILTER_FLAG_VLAN_TCI;\n \t}\n \n-\tif ((fsp->flow_type & ~FLOW_EXT) != ETHER_FLOW)\n-\t\treturn -EINVAL;\n-\n-\trule = kzalloc(sizeof(*rule), GFP_KERNEL);\n-\tif (!rule)\n-\t\treturn -ENOMEM;\n-\n \tif (fsp->m_u.ether_spec.h_proto == ETHER_TYPE_FULL_MASK) {\n \t\trule->filter.etype = ntohs(fsp->h_u.ether_spec.h_proto);\n \t\trule->filter.match_flags = IGC_FILTER_FLAG_ETHER_TYPE;\n@@ -1340,51 +1315,110 @@ static int igc_ethtool_add_nfc_rule(struct igc_adapter *adapter,\n \t\tether_addr_copy(rule->filter.dst_addr,\n \t\t\t\tfsp->h_u.ether_spec.h_dest);\n \t}\n+}\n \n-\tif (rule->filter.match_flags & IGC_FILTER_FLAG_DST_MAC_ADDR &&\n-\t rule->filter.match_flags & IGC_FILTER_FLAG_SRC_MAC_ADDR) {\n-\t\tnetdev_dbg(netdev, \"Filters with both dst and src are not supported\");\n-\t\terr = -EOPNOTSUPP;\n-\t\tgoto err_out;\n-\t}\n+/**\n+ * igc_ethtool_check_nfc_rule() - Check if NFC rule is valid.\n+ * @adapter: Pointer to adapter.\n+ * @rule: Rule under evaluation.\n+ *\n+ * Rules with both destination and source MAC addresses are considered invalid\n+ * since the driver doesn't support them.\n+ *\n+ * Also, if there is already another rule with the same filter, @rule is\n+ * considered invalid.\n+ *\n+ * Context: Expects adapter->nfc_rule_lock to be held by caller.\n+ *\n+ * Return: 0 in case of success, negative errno code otherwise.\n+ */\n+static int igc_ethtool_check_nfc_rule(struct igc_adapter *adapter,\n+\t\t\t\t struct igc_nfc_rule *rule)\n+{\n+\tstruct net_device *dev = adapter->netdev;\n+\tu8 flags = rule->filter.match_flags;\n+\tstruct igc_nfc_rule *tmp;\n \n-\tif ((fsp->flow_type & FLOW_EXT) && fsp->m_ext.vlan_tci) {\n-\t\tif (fsp->m_ext.vlan_tci != htons(VLAN_PRIO_MASK)) {\n-\t\t\tnetdev_dbg(netdev, \"VLAN mask not supported\");\n-\t\t\terr = -EOPNOTSUPP;\n-\t\t\tgoto err_out;\n-\t\t}\n-\t\trule->filter.vlan_tci = ntohs(fsp->h_ext.vlan_tci);\n-\t\trule->filter.match_flags |= IGC_FILTER_FLAG_VLAN_TCI;\n+\tif (!flags) {\n+\t\tnetdev_dbg(dev, \"Rule with no match\");\n+\t\treturn -EINVAL;\n \t}\n \n-\trule->action = fsp->ring_cookie;\n-\trule->sw_idx = fsp->location;\n-\n-\tspin_lock(&adapter->nfc_rule_lock);\n+\tif (flags & IGC_FILTER_FLAG_DST_MAC_ADDR &&\n+\t flags & IGC_FILTER_FLAG_SRC_MAC_ADDR) {\n+\t\tnetdev_dbg(dev, \"Filters with both dst and src are not supported\");\n+\t\treturn -EOPNOTSUPP;\n+\t}\n \n \thlist_for_each_entry(tmp, &adapter->nfc_rule_list, nfc_node) {\n \t\tif (!memcmp(&rule->filter, &tmp->filter,\n \t\t\t sizeof(rule->filter))) {\n-\t\t\terr = -EEXIST;\n-\t\t\tnetdev_err(netdev,\n-\t\t\t\t \"ethtool: this filter is already set\");\n-\t\t\tgoto err_out_w_lock;\n+\t\t\tnetdev_dbg(dev, \"Rule already exists\");\n+\t\t\treturn -EEXIST;\n \t\t}\n \t}\n \n+\treturn 0;\n+}\n+\n+static int igc_ethtool_add_nfc_rule(struct igc_adapter *adapter,\n+\t\t\t\t struct ethtool_rxnfc *cmd)\n+{\n+\tstruct net_device *netdev = adapter->netdev;\n+\tstruct ethtool_rx_flow_spec *fsp =\n+\t\t(struct ethtool_rx_flow_spec *)&cmd->fs;\n+\tstruct igc_nfc_rule *rule;\n+\tint err;\n+\n+\tif (!(netdev->hw_features & NETIF_F_NTUPLE)) {\n+\t\tnetdev_dbg(netdev, \"N-tuple filters disabled\");\n+\t\treturn -EOPNOTSUPP;\n+\t}\n+\n+\tif ((fsp->flow_type & ~FLOW_EXT) != ETHER_FLOW) {\n+\t\tnetdev_dbg(netdev, \"Only ethernet flow type is supported\");\n+\t\treturn -EOPNOTSUPP;\n+\t}\n+\n+\tif ((fsp->flow_type & FLOW_EXT) &&\n+\t fsp->m_ext.vlan_tci != htons(VLAN_PRIO_MASK)) {\n+\t\tnetdev_dbg(netdev, \"VLAN mask not supported\");\n+\t\treturn -EOPNOTSUPP;\n+\t}\n+\n+\tif (fsp->ring_cookie >= adapter->num_rx_queues) {\n+\t\tnetdev_dbg(netdev, \"Invalid action\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (fsp->location >= IGC_MAX_RXNFC_RULES) {\n+\t\tnetdev_dbg(netdev, \"Invalid location\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\trule = kzalloc(sizeof(*rule), GFP_KERNEL);\n+\tif (!rule)\n+\t\treturn -ENOMEM;\n+\n+\tigc_ethtool_init_nfc_rule(rule, fsp);\n+\n+\tspin_lock(&adapter->nfc_rule_lock);\n+\n+\terr = igc_ethtool_check_nfc_rule(adapter, rule);\n+\tif (err)\n+\t\tgoto err;\n+\n \terr = igc_enable_nfc_rule(adapter, rule);\n \tif (err)\n-\t\tgoto err_out_w_lock;\n+\t\tgoto err;\n \n \tigc_ethtool_update_nfc_rule(adapter, rule, rule->sw_idx);\n \n \tspin_unlock(&adapter->nfc_rule_lock);\n \treturn 0;\n \n-err_out_w_lock:\n+err:\n \tspin_unlock(&adapter->nfc_rule_lock);\n-err_out:\n \tkfree(rule);\n \treturn err;\n }\n", "prefixes": [ "08/19" ] }