get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 75010,
    "url": "http://patches.dpdk.org/api/patches/75010/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200729140459.5227-5-somnath.kotur@broadcom.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": "<20200729140459.5227-5-somnath.kotur@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200729140459.5227-5-somnath.kotur@broadcom.com",
    "date": "2020-07-29T14:04:59",
    "name": "[4/4] net/bnxt: fix vfrep port add when it's endpoint interface is down",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "469abe2e6609e12be4f0145d3d532aebf8bbfbc9",
    "submitter": {
        "id": 908,
        "url": "http://patches.dpdk.org/api/people/908/?format=api",
        "name": "Somnath Kotur",
        "email": "somnath.kotur@broadcom.com"
    },
    "delegate": {
        "id": 1766,
        "url": "http://patches.dpdk.org/api/users/1766/?format=api",
        "username": "ajitkhaparde",
        "first_name": "Ajit",
        "last_name": "Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200729140459.5227-5-somnath.kotur@broadcom.com/mbox/",
    "series": [
        {
            "id": 11403,
            "url": "http://patches.dpdk.org/api/series/11403/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=11403",
            "date": "2020-07-29T14:04:55",
            "name": "bnxt patches",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/11403/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/75010/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/75010/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 3A1F4A052B;\n\tWed, 29 Jul 2020 16:11:26 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id BCDDE1C0AD;\n\tWed, 29 Jul 2020 16:10:43 +0200 (CEST)",
            "from relay.smtp.broadcom.com (relay.smtp.broadcom.com\n [192.19.232.149]) by dpdk.org (Postfix) with ESMTP id 3CC3D1C027\n for <dev@dpdk.org>; Wed, 29 Jul 2020 16:10:38 +0200 (CEST)",
            "from dhcp-10-123-153-55.dhcp.broadcom.net\n (bgccx-dev-host-lnx35.bec.broadcom.net [10.123.153.55])\n by relay.smtp.broadcom.com (Postfix) with ESMTP id B7B651BDA99;\n Wed, 29 Jul 2020 07:10:36 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com B7B651BDA99",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1596031837;\n bh=u44Z+J6EWD4hrt0MeaWrbi1KWh8zzSGTsu1u8XepV/w=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=Wi8BRt/CMBsy2LqUpdz2YKebD32bH3DVl1GpPCNOiK4BazEcGqkeS9BikvDzOwmxN\n xstzEKigC8fBg3N1uv2mqQkQVqtFmEOfXVGqbQXUeILrsnLFCUseoGAOLOqqJsrB8G\n ldCQSjIE9Ri/KJtxIoX7s13Oxb7YOaSteP1ad2hE=",
        "From": "Somnath Kotur <somnath.kotur@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com",
        "Date": "Wed, 29 Jul 2020 19:34:59 +0530",
        "Message-Id": "<20200729140459.5227-5-somnath.kotur@broadcom.com>",
        "X-Mailer": "git-send-email 2.10.1.613.g2cc2e70",
        "In-Reply-To": "<20200729140459.5227-1-somnath.kotur@broadcom.com>",
        "References": "<20200729140459.5227-1-somnath.kotur@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH 4/4] net/bnxt: fix vfrep port add when it's\n\tendpoint interface is down",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\n\nWhile adding vfrep port to OVS bridge, vnic & svif information of\nvfrep's endpoint(VF) would be needed to program default flow rules.\nHowever, if the endpoint interface is down when vfrep port is added,\nfirmware will return invalid vnic & svif information.\n\nThis patch fixes the problem by registering to DEFAULT_VNIC_CHANGE\nasync event and once the async event is received, use the endpoint\ninformation(VF's fid) to fetch it's vnic & svif information and\nprogram the default flow rules.\n\nFixes: 322bd6e70272 (\"net/bnxt: add port representor infrastructure\")\n\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\nReviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>\n---\n drivers/net/bnxt/bnxt.h        | 21 +++++++++++++\n drivers/net/bnxt/bnxt_cpr.c    | 51 ++++++++++++++++++++++++++++++\n drivers/net/bnxt/bnxt_ethdev.c | 12 +++++++-\n drivers/net/bnxt/bnxt_hwrm.c   |  4 +++\n drivers/net/bnxt/bnxt_hwrm.h   |  2 ++\n drivers/net/bnxt/bnxt_reps.c   | 70 ++++++++++++++++++++++++++++++------------\n 6 files changed, 140 insertions(+), 20 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex f4b2a3f..74e2c9a 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -147,6 +147,23 @@\n #define BNXT_CMPL_AGGR_DMA_TMR_DURING_INT\t50\n #define BNXT_NUM_CMPL_DMA_AGGR_DURING_INT\t12\n \n+#define\tBNXT_DEFAULT_VNIC_STATE_MASK\t\t\t\\\n+\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_MASK\n+#define\tBNXT_DEFAULT_VNIC_STATE_SFT\t\t\t\\\n+\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_SFT\n+#define\tBNXT_DEFAULT_VNIC_ALLOC\t\t\t\t\\\n+\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_ALLOC\n+#define\tBNXT_DEFAULT_VNIC_FREE\t\t\t\t\\\n+\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE\n+#define\tBNXT_DEFAULT_VNIC_CHANGE_PF_ID_MASK\t\t\\\n+\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_MASK\n+#define\tBNXT_DEFAULT_VNIC_CHANGE_PF_ID_SFT\t\t\\\n+\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_SFT\n+#define\tBNXT_DEFAULT_VNIC_CHANGE_VF_ID_MASK\t\t\\\n+\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_MASK\n+#define\tBNXT_DEFAULT_VNIC_CHANGE_VF_ID_SFT\t\t\\\n+\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_SFT\n+\n struct bnxt_led_info {\n \tuint8_t\t     num_leds;\n \tuint8_t      led_id;\n@@ -498,6 +515,8 @@ struct bnxt_mark_info {\n struct bnxt_rep_info {\n \tstruct rte_eth_dev\t*vfr_eth_dev;\n \tpthread_mutex_t\t\tvfr_lock;\n+\tpthread_mutex_t\t\tvfr_start_lock;\n+\tbool\t\t\tconduit_valid;\n };\n \n /* address space location of register */\n@@ -796,6 +815,7 @@ struct bnxt_vf_representor {\n \tuint16_t\t\tswitch_domain_id;\n \tuint16_t\t\tvf_id;\n \tuint16_t\t\tfw_fid;\n+#define\tBNXT_DFLT_VNIC_ID_INVALID\t0xFFFF\n \tuint16_t\t\tdflt_vnic_id;\n \tuint16_t\t\tsvif;\n \tuint16_t\t\tvfr_tx_cfa_action;\n@@ -884,6 +904,7 @@ uint16_t bnxt_get_phy_port_id(uint16_t port);\n uint16_t bnxt_get_vport(uint16_t port);\n enum bnxt_ulp_intf_type\n bnxt_get_interface_type(uint16_t port);\n+int bnxt_vf_rep_dev_start_op(struct rte_eth_dev *eth_dev);\n \n void bnxt_cancel_fc_thread(struct bnxt *bp);\n void bnxt_flow_cnt_alarm_cb(void *arg);\ndiff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c\nindex 40e5350..464ca8b 100644\n--- a/drivers/net/bnxt/bnxt_cpr.c\n+++ b/drivers/net/bnxt/bnxt_cpr.c\n@@ -46,6 +46,54 @@ void bnxt_wait_for_device_shutdown(struct bnxt *bp)\n \t} while (timeout);\n }\n \n+static void\n+bnxt_process_default_vnic_change(struct bnxt *bp,\n+\t\t\t\t struct hwrm_async_event_cmpl *async_cmp)\n+{\n+\tuint16_t fid, vnic_state, parent_id, vf_fid, vf_id;\n+\tstruct bnxt_vf_representor *vf_rep_bp;\n+\tstruct rte_eth_dev *eth_dev;\n+\tbool vfr_found = false;\n+\tuint32_t event_data;\n+\n+\tif (!BNXT_TRUFLOW_EN(bp))\n+\t\treturn;\n+\n+\tPMD_DRV_LOG(INFO, \"Default vnic change async event received\\n\");\n+\tevent_data = rte_le_to_cpu_32(async_cmp->event_data1);\n+\n+\tvnic_state = (event_data & BNXT_DEFAULT_VNIC_STATE_MASK) >>\n+\t\t\tBNXT_DEFAULT_VNIC_STATE_SFT;\n+\tif (vnic_state != BNXT_DEFAULT_VNIC_ALLOC)\n+\t\treturn;\n+\n+\tparent_id = (event_data & BNXT_DEFAULT_VNIC_CHANGE_PF_ID_MASK) >>\n+\t\t\tBNXT_DEFAULT_VNIC_CHANGE_PF_ID_SFT;\n+\tfid = BNXT_PF(bp) ? bp->fw_fid : bp->parent->fid;\n+\tif (parent_id != fid || !bp->rep_info)\n+\t\treturn;\n+\n+\tvf_fid = (event_data & BNXT_DEFAULT_VNIC_CHANGE_VF_ID_MASK) >>\n+\t\t\tBNXT_DEFAULT_VNIC_CHANGE_VF_ID_SFT;\n+\tPMD_DRV_LOG(INFO, \"async event received vf_id 0x%x\\n\", vf_fid);\n+\n+\tfor (vf_id = 0; vf_id < BNXT_MAX_VF_REPS; vf_id++) {\n+\t\teth_dev = bp->rep_info[vf_id].vfr_eth_dev;\n+\t\tif (!eth_dev)\n+\t\t\tcontinue;\n+\t\tvf_rep_bp = eth_dev->data->dev_private;\n+\t\tif (vf_rep_bp &&\n+\t\t    vf_rep_bp->fw_fid == vf_fid) {\n+\t\t\tvfr_found = true;\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\tif (!vfr_found)\n+\t\treturn;\n+\n+\tbnxt_vf_rep_dev_start_op(eth_dev);\n+}\n+\n /*\n  * Async event handling\n  */\n@@ -144,6 +192,9 @@ void bnxt_handle_async_event(struct bnxt *bp,\n \t\t\t    rte_le_to_cpu_32(async_cmp->event_data1),\n \t\t\t    rte_le_to_cpu_32(async_cmp->event_data2));\n \t\tbreak;\n+\tcase HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE:\n+\t\tbnxt_process_default_vnic_change(bp, async_cmp);\n+\t\tbreak;\n \tdefault:\n \t\tPMD_DRV_LOG(DEBUG, \"handle_async_event id = 0x%x\\n\", event_id);\n \t\tbreak;\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 510a0d9..c2dda07 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -5833,8 +5833,10 @@ bnxt_uninit_locks(struct bnxt *bp)\n {\n \tpthread_mutex_destroy(&bp->flow_lock);\n \tpthread_mutex_destroy(&bp->def_cp_lock);\n-\tif (bp->rep_info)\n+\tif (bp->rep_info) {\n \t\tpthread_mutex_destroy(&bp->rep_info->vfr_lock);\n+\t\tpthread_mutex_destroy(&bp->rep_info->vfr_start_lock);\n+\t}\n }\n \n static int\n@@ -5937,6 +5939,14 @@ static int bnxt_init_rep_info(struct bnxt *bp)\n \t\tbnxt_free_rep_info(bp);\n \t\treturn rc;\n \t}\n+\n+\trc = pthread_mutex_init(&bp->rep_info->vfr_start_lock, NULL);\n+\tif (rc) {\n+\t\tPMD_DRV_LOG(ERR, \"Unable to initialize vfr_start_lock\\n\");\n+\t\tbnxt_free_rep_info(bp);\n+\t\treturn rc;\n+\t}\n+\n \treturn rc;\n }\n \ndiff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c\nindex 8296d1d..b0a0aab 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.c\n+++ b/drivers/net/bnxt/bnxt_hwrm.c\n@@ -918,6 +918,10 @@ int bnxt_hwrm_func_driver_register(struct bnxt *bp)\n \t\treq.async_event_fwd[1] |=\n \t\t\trte_cpu_to_le_32(ASYNC_CMPL_EVENT_ID_DBG_NOTIFICATION);\n \n+\tif (BNXT_VF_IS_TRUSTED(bp))\n+\t\treq.async_event_fwd[1] |=\n+\t\trte_cpu_to_le_32(ASYNC_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE);\n+\n \trc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB);\n \n \tHWRM_CHECK_RESULT();\ndiff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h\nindex 4a2af13..f55b6f9 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.h\n+++ b/drivers/net/bnxt/bnxt_hwrm.h\n@@ -34,6 +34,8 @@ struct hwrm_func_qstats_output;\n \t(1 << (HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE - 32))\n #define ASYNC_CMPL_EVENT_ID_DBG_NOTIFICATION\t\\\n \t(1 << (HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEBUG_NOTIFICATION - 32))\n+#define\tASYNC_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE\t\\\n+\t(1 << (HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE - 32))\n \n #define HWRM_QUEUE_SERVICE_PROFILE_LOSSY \\\n \tHWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSY\ndiff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c\nindex 2941aff..a1b2c4b 100644\n--- a/drivers/net/bnxt/bnxt_reps.c\n+++ b/drivers/net/bnxt/bnxt_reps.c\n@@ -135,6 +135,32 @@ bnxt_vf_rep_tx_burst(void *tx_queue,\n \treturn rc;\n }\n \n+static int\n+bnxt_get_dflt_vnic_svif(struct bnxt *bp, struct bnxt_vf_representor *vf_rep_bp)\n+{\n+\tstruct bnxt_rep_info *rep_info;\n+\tint rc;\n+\n+\trc = bnxt_hwrm_get_dflt_vnic_svif(bp, vf_rep_bp->fw_fid,\n+\t\t\t\t\t  &vf_rep_bp->dflt_vnic_id,\n+\t\t\t\t\t  &vf_rep_bp->svif);\n+\tif (rc) {\n+\t\tPMD_DRV_LOG(ERR, \"Failed to get default vnic id of VF\\n\");\n+\t\tvf_rep_bp->dflt_vnic_id = BNXT_DFLT_VNIC_ID_INVALID;\n+\t\tvf_rep_bp->svif = BNXT_SVIF_INVALID;\n+\t} else {\n+\t\tPMD_DRV_LOG(INFO, \"vf_rep->dflt_vnic_id = %d\\n\",\n+\t\t\t\tvf_rep_bp->dflt_vnic_id);\n+\t}\n+\tif (vf_rep_bp->dflt_vnic_id != BNXT_DFLT_VNIC_ID_INVALID &&\n+\t    vf_rep_bp->svif != BNXT_SVIF_INVALID) {\n+\t\trep_info = &bp->rep_info[vf_rep_bp->vf_id];\n+\t\trep_info->conduit_valid = true;\n+\t}\n+\n+\treturn rc;\n+}\n+\n int bnxt_vf_representor_init(struct rte_eth_dev *eth_dev, void *params)\n {\n \tstruct bnxt_vf_representor *vf_rep_bp = eth_dev->data->dev_private;\n@@ -142,7 +168,6 @@ int bnxt_vf_representor_init(struct rte_eth_dev *eth_dev, void *params)\n \t\t\t\t (struct bnxt_vf_representor *)params;\n \tstruct rte_eth_link *link;\n \tstruct bnxt *parent_bp;\n-\tint rc = 0;\n \n \tvf_rep_bp->vf_id = rep_params->vf_id;\n \tvf_rep_bp->switch_domain_id = rep_params->switch_domain_id;\n@@ -172,17 +197,6 @@ int bnxt_vf_representor_init(struct rte_eth_dev *eth_dev, void *params)\n \teth_dev->data->dev_link.link_status = link->link_status;\n \teth_dev->data->dev_link.link_autoneg = link->link_autoneg;\n \n-\tvf_rep_bp->fw_fid = rep_params->vf_id + parent_bp->first_vf_id;\n-\tPMD_DRV_LOG(INFO, \"vf_rep->fw_fid = %d\\n\", vf_rep_bp->fw_fid);\n-\trc = bnxt_hwrm_get_dflt_vnic_svif(parent_bp, vf_rep_bp->fw_fid,\n-\t\t\t\t\t  &vf_rep_bp->dflt_vnic_id,\n-\t\t\t\t\t  &vf_rep_bp->svif);\n-\tif (rc)\n-\t\tPMD_DRV_LOG(ERR, \"Failed to get default vnic id of VF\\n\");\n-\telse\n-\t\tPMD_DRV_LOG(INFO, \"vf_rep->dflt_vnic_id = %d\\n\",\n-\t\t\t    vf_rep_bp->dflt_vnic_id);\n-\n \tPMD_DRV_LOG(INFO, \"calling bnxt_print_link_info\\n\");\n \tbnxt_print_link_info(eth_dev);\n \n@@ -194,6 +208,9 @@ int bnxt_vf_representor_init(struct rte_eth_dev *eth_dev, void *params)\n \t\t    \"Switch domain id %d: Representor Device %d init done\\n\",\n \t\t    vf_rep_bp->switch_domain_id, vf_rep_bp->vf_id);\n \n+\tvf_rep_bp->fw_fid = rep_params->vf_id + parent_bp->first_vf_id;\n+\tPMD_DRV_LOG(INFO, \"vf_rep->fw_fid = %d\\n\", vf_rep_bp->fw_fid);\n+\n \treturn 0;\n }\n \n@@ -369,21 +386,36 @@ static void bnxt_vf_rep_free_rx_mbufs(struct bnxt_vf_representor *rep_bp)\n int bnxt_vf_rep_dev_start_op(struct rte_eth_dev *eth_dev)\n {\n \tstruct bnxt_vf_representor *rep_bp = eth_dev->data->dev_private;\n+\tstruct bnxt_rep_info *rep_info;\n+\tstruct bnxt *parent_bp;\n \tint rc;\n \n-\trc = bnxt_vfr_alloc(eth_dev);\n+\tparent_bp = rep_bp->parent_dev->data->dev_private;\n+\trep_info = &parent_bp->rep_info[rep_bp->vf_id];\n \n-\tif (!rc) {\n-\t\teth_dev->rx_pkt_burst = &bnxt_vf_rep_rx_burst;\n-\t\teth_dev->tx_pkt_burst = &bnxt_vf_rep_tx_burst;\n+\tpthread_mutex_lock(&rep_info->vfr_start_lock);\n+\tif (rep_info->conduit_valid) {\n+\t\tpthread_mutex_unlock(&rep_info->vfr_start_lock);\n+\t\treturn 0;\n+\t}\n+\trc = bnxt_get_dflt_vnic_svif(parent_bp, rep_bp);\n+\tif (rc || !rep_info->conduit_valid) {\n+\t\tpthread_mutex_unlock(&rep_info->vfr_start_lock);\n+\t\treturn rc;\n+\t}\n+\tpthread_mutex_unlock(&rep_info->vfr_start_lock);\n \n-\t\tbnxt_vf_rep_link_update_op(eth_dev, 1);\n-\t} else {\n+\trc = bnxt_vfr_alloc(eth_dev);\n+\tif (rc) {\n \t\teth_dev->data->dev_link.link_status = 0;\n \t\tbnxt_vf_rep_free_rx_mbufs(rep_bp);\n+\t\treturn rc;\n \t}\n+\teth_dev->rx_pkt_burst = &bnxt_vf_rep_rx_burst;\n+\teth_dev->tx_pkt_burst = &bnxt_vf_rep_tx_burst;\n+\tbnxt_vf_rep_link_update_op(eth_dev, 1);\n \n-\treturn rc;\n+\treturn 0;\n }\n \n static int bnxt_tf_vfr_free(struct bnxt_vf_representor *vfr)\n",
    "prefixes": [
        "4/4"
    ]
}