mirror of https://gitee.com/openkylin/linux.git
Merge branch 'Update-devlink-binary-output'
Aya Levin says:
====================
Update devlink binary output
This series changes the devlink binary interface:
-The first patch forces binary values to be enclosed in an array. In
addition, devlink_fmsg_binary_pair_put breaks the binary value into
chunks to comply with devlink's restriction for value length.
-The second patch removes redundant code and uses the fixed devlink
interface (devlink_fmsg_binary_pair_put).
-The third patch make self test to use the updated devlink
interface.
-The fourth, adds a verification of dumping a very large binary
content. This test verifies breaking the data into chunks in a valid
JSON output.
Series was generated against net-next commit:
ca22d6977b
Merge branch 'stmmac-next'
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
084346be80
|
@ -555,7 +555,6 @@ mlx5_fw_fatal_reporter_recover(struct devlink_health_reporter *reporter,
|
|||
return mlx5_health_try_recover(dev);
|
||||
}
|
||||
|
||||
#define MLX5_CR_DUMP_CHUNK_SIZE 256
|
||||
static int
|
||||
mlx5_fw_fatal_reporter_dump(struct devlink_health_reporter *reporter,
|
||||
struct devlink_fmsg *fmsg, void *priv_ctx,
|
||||
|
@ -564,8 +563,6 @@ mlx5_fw_fatal_reporter_dump(struct devlink_health_reporter *reporter,
|
|||
struct mlx5_core_dev *dev = devlink_health_reporter_priv(reporter);
|
||||
u32 crdump_size = dev->priv.health.crdump_size;
|
||||
u32 *cr_data;
|
||||
u32 data_size;
|
||||
u32 offset;
|
||||
int err;
|
||||
|
||||
if (!mlx5_core_is_pf(dev))
|
||||
|
@ -586,20 +583,7 @@ mlx5_fw_fatal_reporter_dump(struct devlink_health_reporter *reporter,
|
|||
goto free_data;
|
||||
}
|
||||
|
||||
err = devlink_fmsg_arr_pair_nest_start(fmsg, "crdump_data");
|
||||
if (err)
|
||||
goto free_data;
|
||||
for (offset = 0; offset < crdump_size; offset += data_size) {
|
||||
if (crdump_size - offset < MLX5_CR_DUMP_CHUNK_SIZE)
|
||||
data_size = crdump_size - offset;
|
||||
else
|
||||
data_size = MLX5_CR_DUMP_CHUNK_SIZE;
|
||||
err = devlink_fmsg_binary_put(fmsg, (char *)cr_data + offset,
|
||||
data_size);
|
||||
if (err)
|
||||
goto free_data;
|
||||
}
|
||||
err = devlink_fmsg_arr_pair_nest_end(fmsg);
|
||||
err = devlink_fmsg_binary_pair_put(fmsg, "crdump_data", cr_data, crdump_size);
|
||||
|
||||
free_data:
|
||||
kvfree(cr_data);
|
||||
|
|
|
@ -82,18 +82,12 @@ static int nsim_dev_dummy_fmsg_put(struct devlink_fmsg *fmsg, u32 binary_len)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
err = devlink_fmsg_arr_pair_nest_start(fmsg, "test_binary");
|
||||
if (err)
|
||||
return err;
|
||||
binary = kmalloc(binary_len, GFP_KERNEL);
|
||||
if (!binary)
|
||||
return -ENOMEM;
|
||||
get_random_bytes(binary, binary_len);
|
||||
err = devlink_fmsg_binary_put(fmsg, binary, binary_len);
|
||||
err = devlink_fmsg_binary_pair_put(fmsg, "test_binary", binary, binary_len);
|
||||
kfree(binary);
|
||||
if (err)
|
||||
return err;
|
||||
err = devlink_fmsg_arr_pair_nest_end(fmsg);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
|
|
@ -967,8 +967,6 @@ int devlink_fmsg_u8_put(struct devlink_fmsg *fmsg, u8 value);
|
|||
int devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value);
|
||||
int devlink_fmsg_u64_put(struct devlink_fmsg *fmsg, u64 value);
|
||||
int devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value);
|
||||
int devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value,
|
||||
u16 value_len);
|
||||
|
||||
int devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name,
|
||||
bool value);
|
||||
|
@ -981,7 +979,7 @@ int devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name,
|
|||
int devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name,
|
||||
const char *value);
|
||||
int devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name,
|
||||
const void *value, u16 value_len);
|
||||
const void *value, u32 value_len);
|
||||
|
||||
struct devlink_health_reporter *
|
||||
devlink_health_reporter_create(struct devlink *devlink,
|
||||
|
|
|
@ -4414,12 +4414,11 @@ int devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(devlink_fmsg_string_put);
|
||||
|
||||
int devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value,
|
||||
u16 value_len)
|
||||
static int devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value,
|
||||
u16 value_len)
|
||||
{
|
||||
return devlink_fmsg_put_value(fmsg, value, value_len, NLA_BINARY);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devlink_fmsg_binary_put);
|
||||
|
||||
int devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name,
|
||||
bool value)
|
||||
|
@ -4527,19 +4526,26 @@ int devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name,
|
|||
EXPORT_SYMBOL_GPL(devlink_fmsg_string_pair_put);
|
||||
|
||||
int devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name,
|
||||
const void *value, u16 value_len)
|
||||
const void *value, u32 value_len)
|
||||
{
|
||||
u32 data_size;
|
||||
u32 offset;
|
||||
int err;
|
||||
|
||||
err = devlink_fmsg_pair_nest_start(fmsg, name);
|
||||
err = devlink_fmsg_arr_pair_nest_start(fmsg, name);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = devlink_fmsg_binary_put(fmsg, value, value_len);
|
||||
if (err)
|
||||
return err;
|
||||
for (offset = 0; offset < value_len; offset += data_size) {
|
||||
data_size = value_len - offset;
|
||||
if (data_size > DEVLINK_FMSG_MAX_SIZE)
|
||||
data_size = DEVLINK_FMSG_MAX_SIZE;
|
||||
err = devlink_fmsg_binary_put(fmsg, value + offset, data_size);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
err = devlink_fmsg_pair_nest_end(fmsg);
|
||||
err = devlink_fmsg_arr_pair_nest_end(fmsg);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
|
|
@ -431,6 +431,15 @@ dummy_reporter_test()
|
|||
|
||||
check_reporter_info dummy healthy 3 3 10 true
|
||||
|
||||
echo 8192> $DEBUGFS_DIR/health/binary_len
|
||||
check_fail $? "Failed set dummy reporter binary len to 8192"
|
||||
|
||||
local dump=$(devlink health dump show $DL_HANDLE reporter dummy -j)
|
||||
check_err $? "Failed show dump of dummy reporter"
|
||||
|
||||
devlink health dump clear $DL_HANDLE reporter dummy
|
||||
check_err $? "Failed clear dump of dummy reporter"
|
||||
|
||||
log_test "dummy reporter test"
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue