get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 111910,
    "url": "https://patches.dpdk.org/api/patches/111910/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20220526084550.243121-3-ivan.malov@oktetlabs.ru/",
    "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": "<20220526084550.243121-3-ivan.malov@oktetlabs.ru>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220526084550.243121-3-ivan.malov@oktetlabs.ru",
    "date": "2022-05-26T08:45:50",
    "name": "[3/3] net/sfc: allow to control the represented entity MAC address",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "22b5c0012dc7d6616c1169e8a37d83b1e659b346",
    "submitter": {
        "id": 869,
        "url": "https://patches.dpdk.org/api/people/869/?format=api",
        "name": "Ivan Malov",
        "email": "Ivan.Malov@oktetlabs.ru"
    },
    "delegate": {
        "id": 3961,
        "url": "https://patches.dpdk.org/api/users/3961/?format=api",
        "username": "arybchenko",
        "first_name": "Andrew",
        "last_name": "Rybchenko",
        "email": "andrew.rybchenko@oktetlabs.ru"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20220526084550.243121-3-ivan.malov@oktetlabs.ru/mbox/",
    "series": [
        {
            "id": 23183,
            "url": "https://patches.dpdk.org/api/series/23183/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=23183",
            "date": "2022-05-26T08:45:48",
            "name": "[1/3] common/sfc_efx/base: convert EFX PCIe INTF to MCDI value",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/23183/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/111910/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/111910/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 24135A0555;\n\tThu, 26 May 2022 10:46:05 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id C26B7427F7;\n\tThu, 26 May 2022 10:45:55 +0200 (CEST)",
            "from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113])\n by mails.dpdk.org (Postfix) with ESMTP id 84D4840DF7\n for <dev@dpdk.org>; Thu, 26 May 2022 10:45:53 +0200 (CEST)",
            "from bree.oktetlabs.ru (bree.oktetlabs.ru [192.168.34.5])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by shelob.oktetlabs.ru (Postfix) with ESMTPS id ED14694;\n Thu, 26 May 2022 11:45:52 +0300 (MSK)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru ED14694",
        "Authentication-Results": "shelob.oktetlabs.ru/ED14694; dkim=none;\n dkim-atps=neutral",
        "From": "Ivan Malov <ivan.malov@oktetlabs.ru>",
        "To": "dev@dpdk.org",
        "Cc": "Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,\n Andy Moreton <amoreton@xilinx.com>",
        "Subject": "[PATCH 3/3] net/sfc: allow to control the represented entity MAC\n address",
        "Date": "Thu, 26 May 2022 11:45:50 +0300",
        "Message-Id": "<20220526084550.243121-3-ivan.malov@oktetlabs.ru>",
        "X-Mailer": "git-send-email 2.30.2",
        "In-Reply-To": "<20220526084550.243121-1-ivan.malov@oktetlabs.ru>",
        "References": "<20220526084550.243121-1-ivan.malov@oktetlabs.ru>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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"
    },
    "content": "The MAC address is accessed via the representor ethdev's one.\n\nSigned-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>\nReviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>\nReviewed-by: Andy Moreton <amoreton@xilinx.com>\n---\n drivers/net/sfc/sfc_port.c           |  1 +\n drivers/net/sfc/sfc_repr.c           | 29 ++++++++++++++++--\n drivers/net/sfc/sfc_repr_proxy.c     | 45 +++++++++++++++++++++++++++-\n drivers/net/sfc/sfc_repr_proxy.h     |  1 +\n drivers/net/sfc/sfc_repr_proxy_api.h |  7 ++++-\n 5 files changed, 78 insertions(+), 5 deletions(-)",
    "diff": "diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c\nindex 91139375ea..5f312ab1ba 100644\n--- a/drivers/net/sfc/sfc_port.c\n+++ b/drivers/net/sfc/sfc_port.c\n@@ -8,6 +8,7 @@\n  */\n \n #include <rte_bitmap.h>\n+#include <rte_ether.h>\n \n #include \"efx.h\"\n \ndiff --git a/drivers/net/sfc/sfc_repr.c b/drivers/net/sfc/sfc_repr.c\nindex 9d88d554c1..d0e5385889 100644\n--- a/drivers/net/sfc/sfc_repr.c\n+++ b/drivers/net/sfc/sfc_repr.c\n@@ -853,6 +853,17 @@ sfc_repr_dev_close(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n+static int\n+sfc_repr_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr)\n+{\n+\tstruct sfc_repr_shared *srs = sfc_repr_shared_by_eth_dev(dev);\n+\tint ret;\n+\n+\tret = sfc_repr_proxy_repr_entity_mac_addr_set(srs->pf_port_id,\n+\t\t\t\t\t\t      srs->repr_id, mac_addr);\n+\treturn -ret;\n+}\n+\n static int\n sfc_repr_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)\n {\n@@ -889,6 +900,7 @@ static const struct eth_dev_ops sfc_repr_dev_ops = {\n \t.dev_close\t\t\t= sfc_repr_dev_close,\n \t.dev_infos_get\t\t\t= sfc_repr_dev_infos_get,\n \t.link_update\t\t\t= sfc_repr_dev_link_update,\n+\t.mac_addr_set\t\t\t= sfc_repr_mac_addr_set,\n \t.stats_get\t\t\t= sfc_repr_stats_get,\n \t.rx_queue_setup\t\t\t= sfc_repr_rx_queue_setup,\n \t.rx_queue_release\t\t= sfc_repr_rx_queue_release,\n@@ -956,9 +968,9 @@ sfc_repr_eth_dev_init(struct rte_eth_dev *dev, void *init_params)\n \t}\n \n \tret = sfc_repr_proxy_add_port(repr_data->pf_port_id,\n-\t\t\t\t      srs->switch_port_id,\n-\t\t\t\t      dev->data->port_id,\n-\t\t\t\t      &repr_data->mport_sel);\n+\t\t\t\t      srs->switch_port_id, dev->data->port_id,\n+\t\t\t\t      &repr_data->mport_sel, repr_data->intf,\n+\t\t\t\t      repr_data->pf, repr_data->vf);\n \tif (ret != 0) {\n \t\tSFC_GENERIC_LOG(ERR, \"%s() failed to add repr proxy port\",\n \t\t\t\t__func__);\n@@ -996,6 +1008,16 @@ sfc_repr_eth_dev_init(struct rte_eth_dev *dev, void *init_params)\n \t\tgoto fail_mac_addrs;\n \t}\n \n+\trte_eth_random_addr(dev->data->mac_addrs[0].addr_bytes);\n+\n+\tret = sfc_repr_proxy_repr_entity_mac_addr_set(repr_data->pf_port_id,\n+\t\t\t\t\t\t      srs->repr_id,\n+\t\t\t\t\t\t      &dev->data->mac_addrs[0]);\n+\tif (ret != 0) {\n+\t\tret = -ret;\n+\t\tgoto fail_mac_addr_set;\n+\t}\n+\n \tdev->rx_pkt_burst = sfc_repr_rx_burst;\n \tdev->tx_pkt_burst = sfc_repr_tx_burst;\n \tdev->dev_ops = &sfc_repr_dev_ops;\n@@ -1005,6 +1027,7 @@ sfc_repr_eth_dev_init(struct rte_eth_dev *dev, void *init_params)\n \n \treturn 0;\n \n+fail_mac_addr_set:\n fail_mac_addrs:\n \tsfc_repr_unlock(sr);\n \tfree(sr);\ndiff --git a/drivers/net/sfc/sfc_repr_proxy.c b/drivers/net/sfc/sfc_repr_proxy.c\nindex 8660d419a3..4b958ced61 100644\n--- a/drivers/net/sfc/sfc_repr_proxy.c\n+++ b/drivers/net/sfc/sfc_repr_proxy.c\n@@ -1280,7 +1280,8 @@ sfc_repr_proxy_stop(struct sfc_adapter *sa)\n \n int\n sfc_repr_proxy_add_port(uint16_t pf_port_id, uint16_t repr_id,\n-\t\t\tuint16_t rte_port_id, const efx_mport_sel_t *mport_sel)\n+\t\t\tuint16_t rte_port_id, const efx_mport_sel_t *mport_sel,\n+\t\t\tefx_pcie_interface_t intf, uint16_t pf, uint16_t vf)\n {\n \tstruct sfc_repr_proxy_port *port;\n \tstruct sfc_repr_proxy *rp;\n@@ -1319,6 +1320,14 @@ sfc_repr_proxy_add_port(uint16_t pf_port_id, uint16_t repr_id,\n \tport->rte_port_id = rte_port_id;\n \tport->repr_id = repr_id;\n \n+\trc = efx_mcdi_get_client_handle(sa->nic, intf, pf, vf,\n+\t\t\t\t\t&port->remote_vnic_mcdi_client_handle);\n+\tif (rc != 0) {\n+\t\tsfc_err(sa, \"failed to get the represented VNIC's MCDI handle (repr_id=%u): %s\",\n+\t\t\trepr_id, rte_strerror(rc));\n+\t\tgoto fail_client_handle;\n+\t}\n+\n \tif (rp->started) {\n \t\trc = sfc_repr_proxy_mbox_send(&rp->mbox, port,\n \t\t\t\t\t      SFC_REPR_PROXY_MBOX_ADD_PORT);\n@@ -1337,6 +1346,7 @@ sfc_repr_proxy_add_port(uint16_t pf_port_id, uint16_t repr_id,\n \treturn 0;\n \n fail_port_add:\n+fail_client_handle:\n fail_mport_id:\n \trte_free(port);\n fail_alloc_port:\n@@ -1664,3 +1674,36 @@ sfc_repr_proxy_stop_repr(uint16_t pf_port_id, uint16_t repr_id)\n \n \treturn 0;\n }\n+\n+int\n+sfc_repr_proxy_repr_entity_mac_addr_set(uint16_t pf_port_id, uint16_t repr_id,\n+\t\t\t\t\tconst struct rte_ether_addr *mac_addr)\n+{\n+\tstruct sfc_repr_proxy_port *port;\n+\tstruct sfc_repr_proxy *rp;\n+\tstruct sfc_adapter *sa;\n+\tint rc;\n+\n+\tsa = sfc_get_adapter_by_pf_port_id(pf_port_id);\n+\trp = sfc_repr_proxy_by_adapter(sa);\n+\n+\tport = sfc_repr_proxy_find_port(rp, repr_id);\n+\tif (port == NULL) {\n+\t\tsfc_err(sa, \"%s() failed: no such port (repr_id=%u)\",\n+\t\t\t__func__, repr_id);\n+\t\tsfc_put_adapter(sa);\n+\t\treturn ENOENT;\n+\t}\n+\n+\trc = efx_mcdi_client_mac_addr_set(sa->nic,\n+\t\t\t\t\t  port->remote_vnic_mcdi_client_handle,\n+\t\t\t\t\t  mac_addr->addr_bytes);\n+\tif (rc != 0) {\n+\t\tsfc_err(sa, \"%s() failed: cannot set MAC address (repr_id=%u): %s\",\n+\t\t\t__func__, repr_id, rte_strerror(rc));\n+\t}\n+\n+\tsfc_put_adapter(sa);\n+\n+\treturn rc;\n+}\ndiff --git a/drivers/net/sfc/sfc_repr_proxy.h b/drivers/net/sfc/sfc_repr_proxy.h\nindex b49b1a2a96..260e2cab30 100644\n--- a/drivers/net/sfc/sfc_repr_proxy.h\n+++ b/drivers/net/sfc/sfc_repr_proxy.h\n@@ -64,6 +64,7 @@ struct sfc_repr_proxy_port {\n \tuint16_t\t\t\t\trepr_id;\n \tuint16_t\t\t\t\trte_port_id;\n \tefx_mport_id_t\t\t\t\tegress_mport;\n+\tuint32_t\t\t\t\tremote_vnic_mcdi_client_handle;\n \tstruct sfc_repr_proxy_rxq\t\trxq[SFC_REPR_RXQ_MAX];\n \tstruct sfc_repr_proxy_txq\t\ttxq[SFC_REPR_TXQ_MAX];\n \tstruct sfc_mae_rule\t\t\t*mae_rule;\ndiff --git a/drivers/net/sfc/sfc_repr_proxy_api.h b/drivers/net/sfc/sfc_repr_proxy_api.h\nindex 95b065801d..1d38ab2451 100644\n--- a/drivers/net/sfc/sfc_repr_proxy_api.h\n+++ b/drivers/net/sfc/sfc_repr_proxy_api.h\n@@ -23,7 +23,9 @@ extern \"C\" {\n \n int sfc_repr_proxy_add_port(uint16_t pf_port_id, uint16_t repr_id,\n \t\t\t    uint16_t rte_port_id,\n-\t\t\t    const efx_mport_sel_t *mport_set);\n+\t\t\t    const efx_mport_sel_t *mport_sel,\n+\t\t\t    efx_pcie_interface_t intf, uint16_t pf,\n+\t\t\t    uint16_t vf);\n int sfc_repr_proxy_del_port(uint16_t pf_port_id, uint16_t repr_id);\n \n int sfc_repr_proxy_add_rxq(uint16_t pf_port_id, uint16_t repr_id,\n@@ -41,6 +43,9 @@ void sfc_repr_proxy_del_txq(uint16_t pf_port_id, uint16_t repr_id,\n int sfc_repr_proxy_start_repr(uint16_t pf_port_id, uint16_t repr_id);\n int sfc_repr_proxy_stop_repr(uint16_t pf_port_id, uint16_t repr_id);\n \n+int sfc_repr_proxy_repr_entity_mac_addr_set(uint16_t pf_port_id,\n+\t\tuint16_t repr_id, const struct rte_ether_addr *mac_addr);\n+\n #ifdef __cplusplus\n }\n #endif\n",
    "prefixes": [
        "3/3"
    ]
}