get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 30794,
    "url": "http://patches.dpdk.org/api/patches/30794/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20171024131630.16595-2-luca.boccassi@gmail.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20171024131630.16595-2-luca.boccassi@gmail.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20171024131630.16595-2-luca.boccassi@gmail.com",
    "date": "2017-10-24T13:16:28",
    "name": "[dpdk-dev,1/3] net/i40e: implement VF reset",
    "commit_ref": null,
    "pull_url": null,
    "state": "rfc",
    "archived": true,
    "hash": "231bb37498504c25378009629636e2e24089e2cd",
    "submitter": {
        "id": 566,
        "url": "http://patches.dpdk.org/api/people/566/?format=api",
        "name": "Luca Boccassi",
        "email": "luca.boccassi@gmail.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20171024131630.16595-2-luca.boccassi@gmail.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/30794/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/30794/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id B629C1B7F0;\n\tTue, 24 Oct 2017 15:16:46 +0200 (CEST)",
            "from mail-wm0-f65.google.com (mail-wm0-f65.google.com\n\t[74.125.82.65]) by dpdk.org (Postfix) with ESMTP id 18DBC1B7FD\n\tfor <dev@dpdk.org>; Tue, 24 Oct 2017 15:16:43 +0200 (CEST)",
            "by mail-wm0-f65.google.com with SMTP id u138so15650275wmu.5\n\tfor <dev@dpdk.org>; Tue, 24 Oct 2017 06:16:43 -0700 (PDT)",
            "from localhost ([213.251.34.151]) by smtp.gmail.com with ESMTPSA id\n\ta99sm179938edf.54.2017.10.24.06.16.41\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tTue, 24 Oct 2017 06:16:41 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=sAZ0aJlib/wnRbgKjaW/EGzYkzCHxy6S0Xp8z8WSuDQ=;\n\tb=I5hG9J2iupjHmmK66+G2RKgObpAhvVk1soVPPb9qnXzUReFrmmy2zRqIL0bKwTnQ2t\n\t5NhBicLcSPHry1Sk4EUb1jaGFBuc0coKgdWony25U57Kmt7fnCb8KbRIrdlq65Lq1m4J\n\tNdA9AP4MHx71Ffq9g7P3bVcdhX+WvCosg1EIKMWDq5bxuj8VBMCOm5pZ1hbCjS4ZPguJ\n\tl6Irwg7nQQcf066tS3AGsW7KMrsQ/Tosb4LbRb3on66MEaoXS/fgY8jLbPuGLGRqk+8w\n\tSMZ4RCrPu6X/0sz7nqVC5+FUTpv66k5p7kWqXczk0pFnGvgbQpNgHOr39YNaXVxHleoZ\n\tkxKQ==",
        "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=sAZ0aJlib/wnRbgKjaW/EGzYkzCHxy6S0Xp8z8WSuDQ=;\n\tb=EukrhLm37FN3rqhTXYpeJmcCj8BUTVzJmjEwW/eMUOFfGFV9WELPMS6KCKi9jDVbdj\n\tuqAe/ULUMTGA1rlT9kS48Zc9wHaoPrnsxyEicr5xCUDyqUpoTplbbATNAGy3D2PPBxec\n\taUr/K4Xq0FKvzJLEiO20jh4FDwczt7bPvd5kGEFvWhrnmCKVhlr/txB8dsMKhfIzGFw0\n\tjqiUycm7/ciWRQrGSeGka+tA4HP+MqVnmQCMFb3QT4xxb9HC8db8/wzYsL7IH72ayn2B\n\t+JHrRetq/WKrapA+T1DpWCDNRuNus3iBQ08++tV1k+jM+uvgMD4zzEataCks0TaLq2yP\n\tkmIA==",
        "X-Gm-Message-State": "AMCzsaU98BUq+TOhStHYt+347ShCdaVykFgzVP0nhPqqBcpqGufLaPxb\n\two1qgj2cHouNL6HIthvEcKPhlNaF",
        "X-Google-Smtp-Source": "ABhQp+QWTDiI7AR4x5eIx0APq4keCwlaumwp636DkddV448DgGG5Vjb+AW7TBlj4NjUiyFdnWIk8bw==",
        "X-Received": "by 10.80.215.209 with SMTP id m17mr6785656edj.63.1508851002481; \n\tTue, 24 Oct 2017 06:16:42 -0700 (PDT)",
        "From": "luca.boccassi@gmail.com",
        "To": "dev@dpdk.org",
        "Cc": "wenzhuo.lu@intel.com, wei.dai@intel.com, remy.horton@intel.com,\n\tLuca Boccassi <bluca@debian.org>",
        "Date": "Tue, 24 Oct 2017 14:16:28 +0100",
        "Message-Id": "<20171024131630.16595-2-luca.boccassi@gmail.com>",
        "X-Mailer": "git-send-email 2.11.0",
        "In-Reply-To": "<20171024131630.16595-1-luca.boccassi@gmail.com>",
        "References": "<20171024131630.16595-1-luca.boccassi@gmail.com>",
        "Subject": "[dpdk-dev] [PATCH 1/3] net/i40e: implement VF reset",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <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": "From: Luca Boccassi <bluca@debian.org>\n\nThis reset function will detach then re-attach the device, reconfigure\nit, and re-setup the Rx/Tx queues.\n\nSigned-off-by: Luca Boccassi <bluca@debian.org>\n---\n drivers/net/i40e/i40e_ethdev.h    |  3 +++\n drivers/net/i40e/i40e_ethdev_vf.c | 56 ++++++++++++++++++++++++++++++++++++---\n drivers/net/i40e/i40e_rxtx.c      | 11 ++++++++\n drivers/net/i40e/i40e_rxtx.h      |  4 +++\n 4 files changed, 70 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h\nindex 2f1905e13..45714959a 100644\n--- a/drivers/net/i40e/i40e_ethdev.h\n+++ b/drivers/net/i40e/i40e_ethdev.h\n@@ -1047,6 +1047,9 @@ struct i40e_adapter {\n \tstruct rte_timecounter rx_tstamp_tc;\n \tstruct rte_timecounter tx_tstamp_tc;\n \n+\t/* For VF reset */\n+\tuint8_t reset_number;\n+\n \t/* ptype mapping table */\n \tuint32_t ptype_tbl[I40E_MAX_PKT_TYPE] __rte_cache_min_aligned;\n \t/* flow type to pctype mapping table */\ndiff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c\nindex 9f1487509..333ddb4ca 100644\n--- a/drivers/net/i40e/i40e_ethdev_vf.c\n+++ b/drivers/net/i40e/i40e_ethdev_vf.c\n@@ -2294,21 +2294,69 @@ i40evf_dev_close(struct rte_eth_dev *dev)\n \ti40evf_disable_irq0(hw);\n }\n \n-/*\n- * Reset VF device only to re-initialize resources in PMD layer\n- */\n+static void\n+i40e_vf_queue_reset(struct rte_eth_dev *dev)\n+{\n+\tuint16_t i;\n+\n+\tfor (i = 0; i < dev->data->nb_rx_queues; i++) {\n+\t\t struct i40e_rx_queue *rxq = dev->data->rx_queues[i];\n+\n+\t\t if (rxq->q_set) {\n+\t\t\t  i40e_dev_rx_queue_setup(dev,\n+\t\t\t\t\t\t     rxq->queue_id,\n+\t\t\t\t\t\t     rxq->nb_rx_desc,\n+\t\t\t\t\t\t     rxq->socket_id,\n+\t\t\t\t\t\t     &rxq->rxconf,\n+\t\t\t\t\t\t     rxq->mp);\n+\t\t }\n+\t}\n+\tfor (i = 0; i < dev->data->nb_tx_queues; i++) {\n+\t\t struct i40e_tx_queue *txq = dev->data->tx_queues[i];\n+\n+\t\t if (txq->q_set) {\n+\t\t\t  i40e_dev_tx_queue_setup(dev,\n+\t\t\t\t\t\t     txq->queue_id,\n+\t\t\t\t\t\t     txq->nb_tx_desc,\n+\t\t\t\t\t\t     txq->socket_id,\n+\t\t\t\t\t\t     &txq->txconf);\n+\t\t }\n+\t}\n+}\n+\n static int\n i40evf_dev_reset(struct rte_eth_dev *dev)\n {\n \tint ret;\n+\tstruct i40e_adapter *adapter =\n+\t\t I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);\n \n+\tif (!dev->data->dev_started)\n+\t\t return -EAGAIN;\n+\n+\tadapter->reset_number = 1;\n+\ti40evf_dev_close(dev);\n+\tPMD_DRV_LOG(DEBUG, \"i40evf dev close complete\");\n \tret = i40evf_dev_uninit(dev);\n \tif (ret)\n \t\treturn ret;\n+\tPMD_DRV_LOG(DEBUG, \"i40evf dev detached\");\n+\tmemset(dev->data->dev_private, 0,\n+\t\t(uint64_t)&adapter->reset_number - (uint64_t)adapter);\n \n+\ti40evf_dev_configure(dev);\n \tret = i40evf_dev_init(dev);\n+\tif (ret)\n+\t\treturn ret;\n+\tPMD_DRV_LOG(DEBUG, \"i40evf dev attached\");\n \n-\treturn ret;\n+\ti40e_vf_queue_reset(dev);\n+\tPMD_DRV_LOG(DEBUG, \"i40evf queue reset\");\n+\ti40evf_dev_start(dev);\n+\tPMD_DRV_LOG(DEBUG, \"i40evf dev restart\");\n+\tadapter->reset_number = 0;\n+\n+\treturn 0;\n }\n \n static int\ndiff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c\nindex f21c1c5d2..3d5125260 100644\n--- a/drivers/net/i40e/i40e_rxtx.c\n+++ b/drivers/net/i40e/i40e_rxtx.c\n@@ -1745,6 +1745,7 @@ i40e_dev_rx_queue_setup(struct rte_eth_dev *dev,\n \tuint32_t ring_size;\n \tuint16_t len, i;\n \tuint16_t reg_idx, base, bsf, tc_mapping;\n+\tstruct rte_eth_rxconf conf = *rx_conf;\n \tint q_offset, use_def_burst_func = 1;\n \n \tif (hw->mac.type == I40E_MAC_VF || hw->mac.type == I40E_MAC_X722_VF) {\n@@ -1789,6 +1790,8 @@ i40e_dev_rx_queue_setup(struct rte_eth_dev *dev,\n \t\treturn -ENOMEM;\n \t}\n \trxq->mp = mp;\n+\trxq->socket_id = socket_id;\n+\trxq->rxconf = conf;\n \trxq->nb_rx_desc = nb_desc;\n \trxq->rx_free_thresh = rx_conf->rx_free_thresh;\n \trxq->queue_id = queue_idx;\n@@ -2024,6 +2027,8 @@ i40e_dev_tx_queue_setup(struct rte_eth_dev *dev,\n \tuint16_t reg_idx, i, base, bsf, tc_mapping;\n \tint q_offset;\n \n+\tstruct rte_eth_txconf conf = *tx_conf;\n+\n \tif (hw->mac.type == I40E_MAC_VF || hw->mac.type == I40E_MAC_X722_VF) {\n \t\tvf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);\n \t\tvsi = &vf->vsi;\n@@ -2149,6 +2154,8 @@ i40e_dev_tx_queue_setup(struct rte_eth_dev *dev,\n \t}\n \n \ttxq->nb_tx_desc = nb_desc;\n+\ttxq->socket_id = socket_id;\n+\ttxq->txconf = conf;\n \ttxq->tx_rs_thresh = tx_rs_thresh;\n \ttxq->tx_free_thresh = tx_free_thresh;\n \ttxq->pthresh = tx_conf->tx_thresh.pthresh;\n@@ -2628,8 +2635,12 @@ void\n i40e_dev_free_queues(struct rte_eth_dev *dev)\n {\n \tuint16_t i;\n+\tstruct i40e_adapter *adapter =\n+\t\tI40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);\n \n \tPMD_INIT_FUNC_TRACE();\n+\tif (adapter->reset_number)\n+\t\treturn;\n \n \tfor (i = 0; i < dev->data->nb_rx_queues; i++) {\n \t\tif (!dev->data->rx_queues[i])\ndiff --git a/drivers/net/i40e/i40e_rxtx.h b/drivers/net/i40e/i40e_rxtx.h\nindex 06c6a6592..43e227a52 100644\n--- a/drivers/net/i40e/i40e_rxtx.h\n+++ b/drivers/net/i40e/i40e_rxtx.h\n@@ -136,6 +136,8 @@ struct i40e_rx_queue {\n \tbool rx_deferred_start; /**< don't start this queue in dev start */\n \tuint16_t rx_using_sse; /**<flag indicate the usage of vPMD for rx */\n \tuint8_t dcb_tc;         /**< Traffic class of rx queue */\n+\tuint8_t socket_id;\n+\tstruct rte_eth_rxconf rxconf;\n };\n \n struct i40e_tx_entry {\n@@ -177,6 +179,8 @@ struct i40e_tx_queue {\n \tbool q_set; /**< indicate if tx queue has been configured */\n \tbool tx_deferred_start; /**< don't start this queue in dev start */\n \tuint8_t dcb_tc;         /**< Traffic class of tx queue */\n+\tuint8_t socket_id;\n+\tstruct rte_eth_txconf txconf;\n };\n \n /** Offload features */\n",
    "prefixes": [
        "dpdk-dev",
        "1/3"
    ]
}