lkml.org 
[lkml]   [2021]   [Jul]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH net-next 2/8] net: hns3: add support for registering devlink for VF
    Date
    From: Yufeng Mo <moyufeng@huawei.com>

    Add devlink register support for HNS3 ethernet VF driver.

    Signed-off-by: Yufeng Mo <moyufeng@huawei.com>
    Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
    ---
    .../net/ethernet/hisilicon/hns3/hns3vf/Makefile | 2 +-
    .../hisilicon/hns3/hns3vf/hclgevf_devlink.c | 54 ++++++++++++++++++++++
    .../hisilicon/hns3/hns3vf/hclgevf_devlink.h | 15 ++++++
    .../ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 8 ++++
    .../ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h | 3 ++
    5 files changed, 81 insertions(+), 1 deletion(-)
    create mode 100644 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.c
    create mode 100644 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.h

    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/Makefile b/drivers/net/ethernet/hisilicon/hns3/hns3vf/Makefile
    index 2c26ea607a53..51ff7d86ee90 100644
    --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/Makefile
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/Makefile
    @@ -7,4 +7,4 @@ ccflags-y := -I $(srctree)/drivers/net/ethernet/hisilicon/hns3
    ccflags-y += -I $(srctree)/$(src)

    obj-$(CONFIG_HNS3_HCLGEVF) += hclgevf.o
    -hclgevf-objs = hclgevf_main.o hclgevf_cmd.o hclgevf_mbx.o
    +hclgevf-objs = hclgevf_main.o hclgevf_cmd.o hclgevf_mbx.o hclgevf_devlink.o
    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.c
    new file mode 100644
    index 000000000000..55337a975981
    --- /dev/null
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.c
    @@ -0,0 +1,54 @@
    +// SPDX-License-Identifier: GPL-2.0+
    +/* Copyright (c) 2021 Hisilicon Limited. */
    +
    +#include <net/devlink.h>
    +
    +#include "hclgevf_devlink.h"
    +
    +static const struct devlink_ops hclgevf_devlink_ops = {
    +};
    +
    +int hclgevf_devlink_init(struct hclgevf_dev *hdev)
    +{
    + struct pci_dev *pdev = hdev->pdev;
    + struct hclgevf_devlink_priv *priv;
    + struct devlink *devlink;
    + int ret;
    +
    + devlink = devlink_alloc(&hclgevf_devlink_ops,
    + sizeof(struct hclgevf_devlink_priv));
    + if (!devlink)
    + return -ENOMEM;
    +
    + priv = devlink_priv(devlink);
    + priv->hdev = hdev;
    +
    + ret = devlink_register(devlink, &pdev->dev);
    + if (ret) {
    + dev_err(&pdev->dev, "failed to register devlink, ret = %d\n",
    + ret);
    + goto out_reg_fail;
    + }
    +
    + hdev->devlink = devlink;
    +
    + return 0;
    +
    +out_reg_fail:
    + devlink_free(devlink);
    + return ret;
    +}
    +
    +void hclgevf_devlink_uninit(struct hclgevf_dev *hdev)
    +{
    + struct devlink *devlink = hdev->devlink;
    +
    + if (!devlink)
    + return;
    +
    + devlink_unregister(devlink);
    +
    + devlink_free(devlink);
    +
    + hdev->devlink = NULL;
    +}
    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.h b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.h
    new file mode 100644
    index 000000000000..e09ea3d8a963
    --- /dev/null
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.h
    @@ -0,0 +1,15 @@
    +/* SPDX-License-Identifier: GPL-2.0+ */
    +/* Copyright (c) 2021 Hisilicon Limited. */
    +
    +#ifndef __HCLGEVF_DEVLINK_H
    +#define __HCLGEVF_DEVLINK_H
    +
    +#include "hclgevf_main.h"
    +
    +struct hclgevf_devlink_priv {
    + struct hclgevf_dev *hdev;
    +};
    +
    +int hclgevf_devlink_init(struct hclgevf_dev *hdev);
    +void hclgevf_devlink_uninit(struct hclgevf_dev *hdev);
    +#endif
    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
    index 52eaf82b7cd7..1e03c4d16125 100644
    --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
    @@ -8,6 +8,7 @@
    #include "hclgevf_main.h"
    #include "hclge_mbx.h"
    #include "hnae3.h"
    +#include "hclgevf_devlink.h"

    #define HCLGEVF_NAME "hclgevf"

    @@ -3327,6 +3328,10 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
    if (ret)
    return ret;

    + ret = hclgevf_devlink_init(hdev);
    + if (ret)
    + goto err_devlink_init;
    +
    ret = hclgevf_cmd_queue_init(hdev);
    if (ret)
    goto err_cmd_queue_init;
    @@ -3431,6 +3436,8 @@ static int hclgevf_init_hdev(struct hclgevf_dev *hdev)
    err_cmd_init:
    hclgevf_cmd_uninit(hdev);
    err_cmd_queue_init:
    + hclgevf_devlink_uninit(hdev);
    +err_devlink_init:
    hclgevf_pci_uninit(hdev);
    clear_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state);
    return ret;
    @@ -3452,6 +3459,7 @@ static void hclgevf_uninit_hdev(struct hclgevf_dev *hdev)
    }

    hclgevf_cmd_uninit(hdev);
    + hclgevf_devlink_uninit(hdev);
    hclgevf_pci_uninit(hdev);
    hclgevf_uninit_mac_list(hdev);
    }
    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
    index d7d02848d674..6f222a3a0bf2 100644
    --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
    @@ -6,6 +6,7 @@
    #include <linux/fs.h>
    #include <linux/if_vlan.h>
    #include <linux/types.h>
    +#include <net/devlink.h>
    #include "hclge_mbx.h"
    #include "hclgevf_cmd.h"
    #include "hnae3.h"
    @@ -330,6 +331,8 @@ struct hclgevf_dev {
    u32 flag;
    unsigned long serv_processed_cnt;
    unsigned long last_serv_processed;
    +
    + struct devlink *devlink;
    };

    static inline bool hclgevf_is_reset_pending(struct hclgevf_dev *hdev)
    --
    2.8.1
    \
     
     \ /
      Last update: 2021-07-06 08:45    [W:2.605 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site