]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
devlink: Add support for u64 parameters
authorIvan Vecera <ivecera@redhat.com>
Fri, 4 Jul 2025 18:21:53 +0000 (20:21 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 10 Jul 2025 02:08:52 +0000 (19:08 -0700)
Only 8, 16 and 32-bit integers are supported for numeric devlink
parameters. The subsequent patch adds support for DPLL clock ID
that is defined as 64-bit number. Add support for u64 parameter
type.

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Link: https://patch.msgid.link/20250704182202.1641943-4-ivecera@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/devlink.h
net/devlink/param.c

index d0ce5a7e984c53db7f4cc0513452ad1279574c08..4a5896b846a42c1543aa33264e5b7612b05ccec1 100644 (file)
@@ -425,6 +425,7 @@ enum devlink_param_type {
        DEVLINK_PARAM_TYPE_U8 = DEVLINK_VAR_ATTR_TYPE_U8,
        DEVLINK_PARAM_TYPE_U16 = DEVLINK_VAR_ATTR_TYPE_U16,
        DEVLINK_PARAM_TYPE_U32 = DEVLINK_VAR_ATTR_TYPE_U32,
+       DEVLINK_PARAM_TYPE_U64 = DEVLINK_VAR_ATTR_TYPE_U64,
        DEVLINK_PARAM_TYPE_STRING = DEVLINK_VAR_ATTR_TYPE_STRING,
        DEVLINK_PARAM_TYPE_BOOL = DEVLINK_VAR_ATTR_TYPE_FLAG,
 };
@@ -433,6 +434,7 @@ union devlink_param_value {
        u8 vu8;
        u16 vu16;
        u32 vu32;
+       u64 vu64;
        char vstr[__DEVLINK_PARAM_MAX_STRING_VALUE];
        bool vbool;
 };
index 396b8a7f60139c61cd4cb604c19a01dd86dd8a7c..9709b41664aae504a3ebaa40fd6483e53df3f597 100644 (file)
@@ -200,6 +200,11 @@ devlink_nl_param_value_fill_one(struct sk_buff *msg,
                if (nla_put_u32(msg, DEVLINK_ATTR_PARAM_VALUE_DATA, val.vu32))
                        goto value_nest_cancel;
                break;
+       case DEVLINK_PARAM_TYPE_U64:
+               if (devlink_nl_put_u64(msg, DEVLINK_ATTR_PARAM_VALUE_DATA,
+                                      val.vu64))
+                       goto value_nest_cancel;
+               break;
        case DEVLINK_PARAM_TYPE_STRING:
                if (nla_put_string(msg, DEVLINK_ATTR_PARAM_VALUE_DATA,
                                   val.vstr))
@@ -434,6 +439,11 @@ devlink_param_value_get_from_info(const struct devlink_param *param,
                        return -EINVAL;
                value->vu32 = nla_get_u32(param_data);
                break;
+       case DEVLINK_PARAM_TYPE_U64:
+               if (nla_len(param_data) != sizeof(u64))
+                       return -EINVAL;
+               value->vu64 = nla_get_u64(param_data);
+               break;
        case DEVLINK_PARAM_TYPE_STRING:
                len = strnlen(nla_data(param_data), nla_len(param_data));
                if (len == nla_len(param_data) ||