Skip to content

Commit

Permalink
Merge branch 'net-devlink-return-the-driver-name-in-devlink_nl_info_f…
Browse files Browse the repository at this point in the history
…ill'

Vincent Mailhol says:

====================
net: devlink: return the driver name in devlink_nl_info_fill

The driver name is available in device_driver::name. Right now,
drivers still have to report this piece of information themselves in
their devlink_ops::info_get callback function.

The goal of this series is to have the devlink core to report this
information instead of the drivers.

The first patch fulfills the actual goal of this series: modify
devlink core to report the driver name and clean-up all drivers. Both
have to be done in an atomic change to avoid attribute
duplication. This same patch also removes the
devlink_info_driver_name_put() function to prevent future drivers from
reporting the driver name themselves.

The second patch allows the core to call devlink_nl_info_fill() even
if the devlink_ops::info_get() callback is NULL. This leads to the
third and final patch which cleans up the drivers which have an empty
info_get().
====================

Link: https://lore.kernel.org/r/20221129095140.3913303-1-mailhol.vincent@wanadoo.fr
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Jakub Kicinski committed Dec 1, 2022
2 parents a933e7f + cf4590b commit 281f820
Show file tree
Hide file tree
Showing 22 changed files with 26 additions and 130 deletions.
4 changes: 0 additions & 4 deletions drivers/crypto/marvell/octeontx2/otx2_cpt_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,6 @@ static int otx2_cpt_devlink_info_get(struct devlink *dl,
struct otx2_cptpf_dev *cptpf = cpt_dl->cptpf;
int err;

err = devlink_info_driver_name_put(req, "rvu_cptpf");
if (err)
return err;

err = otx2_cpt_dl_info_firmware_version_put(req, cptpf->eng_grps.grp,
"fw.ae", OTX2_CPT_AE_TYPES);
if (err)
Expand Down
5 changes: 0 additions & 5 deletions drivers/net/dsa/hirschmann/hellcreek.c
Original file line number Diff line number Diff line change
Expand Up @@ -1176,11 +1176,6 @@ static int hellcreek_devlink_info_get(struct dsa_switch *ds,
struct netlink_ext_ack *extack)
{
struct hellcreek *hellcreek = ds->priv;
int ret;

ret = devlink_info_driver_name_put(req, "hellcreek");
if (ret)
return ret;

return devlink_info_version_fixed_put(req,
DEVLINK_INFO_VERSION_GENERIC_ASIC_ID,
Expand Down
5 changes: 0 additions & 5 deletions drivers/net/dsa/mv88e6xxx/devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -821,11 +821,6 @@ int mv88e6xxx_devlink_info_get(struct dsa_switch *ds,
struct netlink_ext_ack *extack)
{
struct mv88e6xxx_chip *chip = ds->priv;
int err;

err = devlink_info_driver_name_put(req, "mv88e6xxx");
if (err)
return err;

return devlink_info_version_fixed_put(req,
DEVLINK_INFO_VERSION_GENERIC_ASIC_ID,
Expand Down
12 changes: 3 additions & 9 deletions drivers/net/dsa/sja1105/sja1105_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,16 +120,10 @@ int sja1105_devlink_info_get(struct dsa_switch *ds,
struct netlink_ext_ack *extack)
{
struct sja1105_private *priv = ds->priv;
int rc;

rc = devlink_info_driver_name_put(req, "sja1105");
if (rc)
return rc;

rc = devlink_info_version_fixed_put(req,
DEVLINK_INFO_VERSION_GENERIC_ASIC_ID,
priv->info->name);
return rc;
return devlink_info_version_fixed_put(req,
DEVLINK_INFO_VERSION_GENERIC_ASIC_ID,
priv->info->name);
}

int sja1105_devlink_setup(struct dsa_switch *ds)
Expand Down
4 changes: 0 additions & 4 deletions drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -892,10 +892,6 @@ static int bnxt_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
u32 ver = 0;
int rc;

rc = devlink_info_driver_name_put(req, DRV_MODULE_NAME);
if (rc)
return rc;

if (BNXT_PF(bp) && (bp->flags & BNXT_FLAG_DSN_VALID)) {
sprintf(buf, "%02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X",
bp->dsn[7], bp->dsn[6], bp->dsn[5], bp->dsn[4],
Expand Down
11 changes: 1 addition & 10 deletions drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,9 @@ static int dpaa2_eth_dl_info_get(struct devlink *devlink,
struct dpaa2_eth_devlink_priv *dl_priv = devlink_priv(devlink);
struct dpaa2_eth_priv *priv = dl_priv->dpaa2_priv;
char buf[10];
int err;

err = devlink_info_driver_name_put(req, KBUILD_MODNAME);
if (err)
return err;

scnprintf(buf, 10, "%d.%d", priv->dpni_ver_major, priv->dpni_ver_minor);
err = devlink_info_version_running_put(req, "dpni", buf);
if (err)
return err;

return 0;
return devlink_info_version_running_put(req, "dpni", buf);
}

static struct dpaa2_eth_trap_item *
Expand Down
7 changes: 0 additions & 7 deletions drivers/net/ethernet/fungible/funeth/funeth_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,7 @@
#include "funeth.h"
#include "funeth_devlink.h"

static int fun_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
struct netlink_ext_ack *extack)
{
return devlink_info_driver_name_put(req, KBUILD_MODNAME);
}

static const struct devlink_ops fun_dl_ops = {
.info_get = fun_dl_info_get,
};

struct devlink *fun_devlink_alloc(struct device *dev)
Expand Down
5 changes: 0 additions & 5 deletions drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,6 @@ static int hclge_devlink_info_get(struct devlink *devlink,
struct hclge_devlink_priv *priv = devlink_priv(devlink);
char version_str[HCLGE_DEVLINK_FW_STRING_LEN];
struct hclge_dev *hdev = priv->hdev;
int ret;

ret = devlink_info_driver_name_put(req, KBUILD_MODNAME);
if (ret)
return ret;

snprintf(version_str, sizeof(version_str), "%lu.%lu.%lu.%lu",
hnae3_get_field(hdev->fw_version, HNAE3_FW_VERSION_BYTE3_MASK,
Expand Down
5 changes: 0 additions & 5 deletions drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,6 @@ static int hclgevf_devlink_info_get(struct devlink *devlink,
struct hclgevf_devlink_priv *priv = devlink_priv(devlink);
char version_str[HCLGEVF_DEVLINK_FW_STRING_LEN];
struct hclgevf_dev *hdev = priv->hdev;
int ret;

ret = devlink_info_driver_name_put(req, KBUILD_MODNAME);
if (ret)
return ret;

snprintf(version_str, sizeof(version_str), "%lu.%lu.%lu.%lu",
hnae3_get_field(hdev->fw_version, HNAE3_FW_VERSION_BYTE3_MASK,
Expand Down
6 changes: 0 additions & 6 deletions drivers/net/ethernet/intel/ice/ice_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,12 +311,6 @@ static int ice_devlink_info_get(struct devlink *devlink,
}
}

err = devlink_info_driver_name_put(req, KBUILD_MODNAME);
if (err) {
NL_SET_ERR_MSG_MOD(extack, "Unable to set driver name");
goto out_free_ctx;
}

ice_info_get_dsn(pf, ctx);

err = devlink_info_serial_number_put(req, ctx->buf);
Expand Down
7 changes: 0 additions & 7 deletions drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -1547,14 +1547,7 @@ static int rvu_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode,
return 0;
}

static int rvu_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
struct netlink_ext_ack *extack)
{
return devlink_info_driver_name_put(req, DRV_NAME);
}

static const struct devlink_ops rvu_devlink_ops = {
.info_get = rvu_devlink_info_get,
.eswitch_mode_get = rvu_devlink_eswitch_mode_get,
.eswitch_mode_set = rvu_devlink_eswitch_mode_set,
};
Expand Down
15 changes: 0 additions & 15 deletions drivers/net/ethernet/marvell/octeontx2/nic/otx2_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,22 +77,7 @@ static const struct devlink_param otx2_dl_params[] = {
otx2_dl_mcam_count_validate),
};

/* Devlink OPs */
static int otx2_devlink_info_get(struct devlink *devlink,
struct devlink_info_req *req,
struct netlink_ext_ack *extack)
{
struct otx2_devlink *otx2_dl = devlink_priv(devlink);
struct otx2_nic *pfvf = otx2_dl->pfvf;

if (is_otx2_vf(pfvf->pcifunc))
return devlink_info_driver_name_put(req, "rvu_nicvf");

return devlink_info_driver_name_put(req, "rvu_nicpf");
}

static const struct devlink_ops otx2_devlink_ops = {
.info_get = otx2_devlink_info_get,
};

int otx2_register_dl(struct otx2_nic *pfvf)
Expand Down
5 changes: 0 additions & 5 deletions drivers/net/ethernet/marvell/prestera/prestera_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -355,11 +355,6 @@ static int prestera_dl_info_get(struct devlink *dl,
{
struct prestera_switch *sw = devlink_priv(dl);
char buf[16];
int err;

err = devlink_info_driver_name_put(req, PRESTERA_DRV_NAME);
if (err)
return err;

snprintf(buf, sizeof(buf), "%d.%d.%d",
sw->dev->fw_rev.maj,
Expand Down
4 changes: 0 additions & 4 deletions drivers/net/ethernet/mellanox/mlx5/core/devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,6 @@ mlx5_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
u32 running_fw, stored_fw;
int err;

err = devlink_info_driver_name_put(req, KBUILD_MODNAME);
if (err)
return err;

err = devlink_info_version_fixed_put(req, "fw.psid", dev->board_id);
if (err)
return err;
Expand Down
5 changes: 0 additions & 5 deletions drivers/net/ethernet/mellanox/mlxsw/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1459,11 +1459,6 @@ mlxsw_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
char buf[32];
int err;

err = devlink_info_driver_name_put(req,
mlxsw_core->bus_info->device_kind);
if (err)
return err;

mlxsw_reg_mgir_pack(mgir_pl);
err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mgir), mgir_pl);
if (err)
Expand Down
4 changes: 0 additions & 4 deletions drivers/net/ethernet/netronome/nfp/nfp_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -239,10 +239,6 @@ nfp_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
char *buf = NULL;
int err;

err = devlink_info_driver_name_put(req, "nfp");
if (err)
return err;

vendor = nfp_hwinfo_lookup(pf->hwinfo, "assembly.vendor");
part = nfp_hwinfo_lookup(pf->hwinfo, "assembly.partno");
sn = nfp_hwinfo_lookup(pf->hwinfo, "assembly.serial");
Expand Down
4 changes: 0 additions & 4 deletions drivers/net/ethernet/pensando/ionic/ionic_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,6 @@ static int ionic_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
char buf[16];
int err = 0;

err = devlink_info_driver_name_put(req, IONIC_DRV_NAME);
if (err)
return err;

err = devlink_info_version_running_put(req,
DEVLINK_INFO_VERSION_GENERIC_FW,
idev->dev_info.fw_version);
Expand Down
4 changes: 0 additions & 4 deletions drivers/net/ethernet/qlogic/qed/qed_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,6 @@ static int qed_devlink_info_get(struct devlink *devlink,

dev_info = &cdev->common_dev_info;

err = devlink_info_driver_name_put(req, KBUILD_MODNAME);
if (err)
return err;

memcpy(buf, cdev->hwfns[0].hw_info.part_num, sizeof(cdev->hwfns[0].hw_info.part_num));
buf[sizeof(cdev->hwfns[0].hw_info.part_num)] = 0;

Expand Down
3 changes: 0 additions & 3 deletions drivers/net/netdevsim/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -994,9 +994,6 @@ static int nsim_dev_info_get(struct devlink *devlink,
{
int err;

err = devlink_info_driver_name_put(req, DRV_NAME);
if (err)
return err;
err = devlink_info_version_stored_put_ext(req, "fw.mgmt", "10.20.30",
DEVLINK_INFO_VERSION_TYPE_COMPONENT);
if (err)
Expand Down
4 changes: 0 additions & 4 deletions drivers/ptp/ptp_ocp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1647,10 +1647,6 @@ ptp_ocp_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
char buf[32];
int err;

err = devlink_info_driver_name_put(req, KBUILD_MODNAME);
if (err)
return err;

fw_image = bp->fw_loader ? "loader" : "fw";
sprintf(buf, "%d.%d", bp->fw_tag, bp->fw_version);
err = devlink_info_version_running_put(req, fw_image, buf);
Expand Down
2 changes: 0 additions & 2 deletions include/net/devlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -1762,8 +1762,6 @@ int devlink_region_snapshot_create(struct devlink_region *region,
u8 *data, u32 snapshot_id);
int devlink_info_serial_number_put(struct devlink_info_req *req,
const char *sn);
int devlink_info_driver_name_put(struct devlink_info_req *req,
const char *name);
int devlink_info_board_serial_number_put(struct devlink_info_req *req,
const char *bsn);

Expand Down
35 changes: 22 additions & 13 deletions net/core/devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -6707,14 +6707,6 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,
return err;
}

int devlink_info_driver_name_put(struct devlink_info_req *req, const char *name)
{
if (!req->msg)
return 0;
return nla_put_string(req->msg, DEVLINK_ATTR_INFO_DRIVER_NAME, name);
}
EXPORT_SYMBOL_GPL(devlink_info_driver_name_put);

int devlink_info_serial_number_put(struct devlink_info_req *req, const char *sn)
{
if (!req->msg)
Expand Down Expand Up @@ -6823,11 +6815,25 @@ int devlink_info_version_running_put_ext(struct devlink_info_req *req,
}
EXPORT_SYMBOL_GPL(devlink_info_version_running_put_ext);

static int devlink_nl_driver_info_get(struct device_driver *drv,
struct devlink_info_req *req)
{
if (!drv)
return 0;

if (drv->name[0])
return nla_put_string(req->msg, DEVLINK_ATTR_INFO_DRIVER_NAME,
drv->name);

return 0;
}

static int
devlink_nl_info_fill(struct sk_buff *msg, struct devlink *devlink,
enum devlink_command cmd, u32 portid,
u32 seq, int flags, struct netlink_ext_ack *extack)
{
struct device *dev = devlink_to_dev(devlink);
struct devlink_info_req req = {};
void *hdr;
int err;
Expand All @@ -6841,7 +6847,13 @@ devlink_nl_info_fill(struct sk_buff *msg, struct devlink *devlink,
goto err_cancel_msg;

req.msg = msg;
err = devlink->ops->info_get(devlink, &req, extack);
if (devlink->ops->info_get) {
err = devlink->ops->info_get(devlink, &req, extack);
if (err)
goto err_cancel_msg;
}

err = devlink_nl_driver_info_get(dev->driver, &req);
if (err)
goto err_cancel_msg;

Expand All @@ -6860,9 +6872,6 @@ static int devlink_nl_cmd_info_get_doit(struct sk_buff *skb,
struct sk_buff *msg;
int err;

if (!devlink->ops->info_get)
return -EOPNOTSUPP;

msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
Expand All @@ -6888,7 +6897,7 @@ static int devlink_nl_cmd_info_get_dumpit(struct sk_buff *msg,
int err = 0;

devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
if (idx < start || !devlink->ops->info_get)
if (idx < start)
goto inc;

devl_lock(devlink);
Expand Down

0 comments on commit 281f820

Please sign in to comment.