get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/7211/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 7211,
    "url": "https://patches.dpdk.org/api/patches/7211/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1443426751-4906-5-git-send-email-wenzhuo.lu@intel.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1443426751-4906-5-git-send-email-wenzhuo.lu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1443426751-4906-5-git-send-email-wenzhuo.lu@intel.com",
    "date": "2015-09-28T07:52:31",
    "name": "[dpdk-dev,4/4] ixgbe: VF RSS reta query and update",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "d37e4ff868a9c9752a18ea4f1fb4e054b6ef124e",
    "submitter": {
        "id": 258,
        "url": "https://patches.dpdk.org/api/people/258/?format=api",
        "name": "Wenzhuo Lu",
        "email": "wenzhuo.lu@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1443426751-4906-5-git-send-email-wenzhuo.lu@intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/7211/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/7211/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 522F78D94;\n\tMon, 28 Sep 2015 09:52:49 +0200 (CEST)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n\tby dpdk.org (Postfix) with ESMTP id E574B379E\n\tfor <dev@dpdk.org>; Mon, 28 Sep 2015 09:52:46 +0200 (CEST)",
            "from fmsmga002.fm.intel.com ([10.253.24.26])\n\tby fmsmga101.fm.intel.com with ESMTP; 28 Sep 2015 00:52:46 -0700",
            "from shvmail01.sh.intel.com ([10.239.29.42])\n\tby fmsmga002.fm.intel.com with ESMTP; 28 Sep 2015 00:52:46 -0700",
            "from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com\n\t[10.239.29.89])\n\tby shvmail01.sh.intel.com with ESMTP id t8S7qirD028662;\n\tMon, 28 Sep 2015 15:52:44 +0800",
            "from shecgisg004.sh.intel.com (localhost [127.0.0.1])\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP\n\tid t8S7qfcL004972; Mon, 28 Sep 2015 15:52:43 +0800",
            "(from wenzhuol@localhost)\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t8S7qf7Q004968; \n\tMon, 28 Sep 2015 15:52:41 +0800"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.17,602,1437462000\"; d=\"scan'208\";a=\"814316475\"",
        "From": "Wenzhuo Lu <wenzhuo.lu@intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Mon, 28 Sep 2015 15:52:31 +0800",
        "Message-Id": "<1443426751-4906-5-git-send-email-wenzhuo.lu@intel.com>",
        "X-Mailer": "git-send-email 1.7.4.1",
        "In-Reply-To": "<1443426751-4906-1-git-send-email-wenzhuo.lu@intel.com>",
        "References": "<1443426751-4906-1-git-send-email-wenzhuo.lu@intel.com>",
        "Subject": "[dpdk-dev] [PATCH 4/4] ixgbe: VF RSS reta query and update",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This patch implements the VF RSS redirection table query and update function\non 10G NICs. But the update function is only provided for x550. Because the\nother NICs don't have the separate registers for VF, we don't want to let a\nVF NIC change the shared RSS reta registers. It may cause PF and other VF NICs'\nbehavior change without being noticed.\n\nSigned-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>\n---\n drivers/net/ixgbe/ixgbe_ethdev.c | 103 +++++++++++++++++++++++++++++++++++++++\n 1 file changed, 103 insertions(+)",
    "diff": "diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c\nindex 5e50ee6..44baadf 100644\n--- a/drivers/net/ixgbe/ixgbe_ethdev.c\n+++ b/drivers/net/ixgbe/ixgbe_ethdev.c\n@@ -326,6 +326,13 @@ static int ixgbe_timesync_read_rx_timestamp(struct rte_eth_dev *dev,\n static int ixgbe_timesync_read_tx_timestamp(struct rte_eth_dev *dev,\n \t\t\t\t\t    struct timespec *timestamp);\n \n+static int ixgbevf_dev_rss_reta_update(struct rte_eth_dev *dev,\n+\t\t\t\tstruct rte_eth_rss_reta_entry64 *reta_conf,\n+\t\t\t\tuint16_t reta_size);\n+static int ixgbevf_dev_rss_reta_query(struct rte_eth_dev *dev,\n+\t\t\t\tstruct rte_eth_rss_reta_entry64 *reta_conf,\n+\t\t\t\tuint16_t reta_size);\n+\n /*\n  * Define VF Stats MACRO for Non \"cleared on read\" register\n  */\n@@ -497,6 +504,8 @@ static const struct eth_dev_ops ixgbevf_eth_dev_ops = {\n \t.mac_addr_set         = ixgbevf_set_default_mac_addr,\n \t.get_reg_length       = ixgbevf_get_reg_length,\n \t.get_reg              = ixgbevf_get_regs,\n+\t.reta_update          = ixgbevf_dev_rss_reta_update,\n+\t.reta_query           = ixgbevf_dev_rss_reta_query,\n \t.rss_hash_update      = ixgbevf_dev_rss_hash_update,\n \t.rss_hash_conf_get    = ixgbevf_dev_rss_hash_conf_get,\n };\n@@ -5557,6 +5566,100 @@ ixgbe_set_eeprom(struct rte_eth_dev *dev,\n \treturn eeprom->ops.write_buffer(hw,  first, length, data);\n }\n \n+static int\n+ixgbevf_dev_rss_reta_update(struct rte_eth_dev *dev,\n+\t\t\tstruct rte_eth_rss_reta_entry64 *reta_conf,\n+\t\t\tuint16_t reta_size)\n+{\n+\tstruct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n+\tuint32_t reta, r;\n+\tuint16_t i, j;\n+\tuint16_t idx, shift;\n+\tuint8_t mask;\n+\n+\tif (hw->mac.type != ixgbe_mac_X550_vf &&\n+\t\thw->mac.type != ixgbe_mac_X550EM_x_vf) {\n+\t\tPMD_DRV_LOG(ERR, \"RSS reta update is not supported on this \"\n+\t\t\t\"VF NIC.\");\n+\t\treturn -ENOTSUP;\n+\t}\n+\n+\tif (reta_size != ETH_RSS_RETA_SIZE_64) {\n+\t\tPMD_DRV_LOG(ERR, \"The size of hash lookup table configured \"\n+\t\t\t\"(%d) doesn't match the number of hardware can \"\n+\t\t\t\"support (%d)\\n\", reta_size, ETH_RSS_RETA_SIZE_64);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tfor (i = 0; i < reta_size; i += IXGBE_4_BIT_WIDTH) {\n+\t\tidx = i / RTE_RETA_GROUP_SIZE;\n+\t\tshift = i % RTE_RETA_GROUP_SIZE;\n+\t\tmask = (uint8_t)((reta_conf[idx].mask >> shift) &\n+\t\t\t\tIXGBE_4_BIT_WIDTH);\n+\t\tif (!mask)\n+\t\t\tcontinue;\n+\t\tif (mask == IXGBE_4_BIT_WIDTH)\n+\t\t\tr = 0;\n+\t\telse\n+\t\t\tr = IXGBE_READ_REG(hw, IXGBE_VFRETA(i >> 2));\n+\n+\t\tfor (j = 0, reta = 0; j < IXGBE_4_BIT_WIDTH; j++) {\n+\t\t\tif (mask & (0x1 << j))\n+\t\t\t\treta |= reta_conf[idx].reta[shift + j] <<\n+\t\t\t\t\t(CHAR_BIT * j);\n+\t\t\telse\n+\t\t\t\treta |= r &\n+\t\t\t\t\t(IXGBE_8_BIT_MASK << (CHAR_BIT * j));\n+\t\t}\n+\t\tIXGBE_WRITE_REG(hw, IXGBE_VFRETA(i >> 2), reta);\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int\n+ixgbevf_dev_rss_reta_query(struct rte_eth_dev *dev,\n+\t\t\tstruct rte_eth_rss_reta_entry64 *reta_conf,\n+\t\t\tuint16_t reta_size)\n+{\n+\tstruct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n+\tuint32_t reta;\n+\tuint16_t i, j;\n+\tuint16_t idx, shift;\n+\tuint8_t mask;\n+\n+\tif (hw->mac.type != ixgbe_mac_X550_vf &&\n+\t\thw->mac.type != ixgbe_mac_X550EM_x_vf) {\n+\t\treturn ixgbe_dev_rss_reta_query(dev, reta_conf, reta_size);\n+\t}\n+\n+\tif (reta_size != ETH_RSS_RETA_SIZE_64) {\n+\t\tPMD_DRV_LOG(ERR, \"The size of hash lookup table configured \"\n+\t\t\t\"(%d) doesn't match the number of hardware can \"\n+\t\t\t\"support (%d)\\n\", reta_size, ETH_RSS_RETA_SIZE_64);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tfor (i = 0; i < reta_size; i += IXGBE_4_BIT_WIDTH) {\n+\t\tidx = i / RTE_RETA_GROUP_SIZE;\n+\t\tshift = i % RTE_RETA_GROUP_SIZE;\n+\t\tmask = (uint8_t)((reta_conf[idx].mask >> shift) &\n+\t\t\t\t\tIXGBE_4_BIT_MASK);\n+\t\tif (!mask)\n+\t\t\tcontinue;\n+\n+\t\treta = IXGBE_READ_REG(hw, IXGBE_VFRETA(i >> 2));\n+\t\tfor (j = 0; j < IXGBE_4_BIT_WIDTH; j++) {\n+\t\t\tif (mask & (0x1 << j))\n+\t\t\t\treta_conf[idx].reta[shift + j] =\n+\t\t\t\t\t((reta >> (CHAR_BIT * j)) &\n+\t\t\t\t\t\tIXGBE_8_BIT_MASK);\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n static struct rte_driver rte_ixgbe_driver = {\n \t.type = PMD_PDEV,\n \t.init = rte_ixgbe_pmd_init,\n",
    "prefixes": [
        "dpdk-dev",
        "4/4"
    ]
}