Skip to content

Commit 084346b

Browse files
committed
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: ca22d69 Merge branch 'stmmac-next' ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 6c08670 + ff18176 commit 084346b

File tree

5 files changed

+27
-36
lines changed

5 files changed

+27
-36
lines changed

drivers/net/ethernet/mellanox/mlx5/core/health.c

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,6 @@ mlx5_fw_fatal_reporter_recover(struct devlink_health_reporter *reporter,
555555
return mlx5_health_try_recover(dev);
556556
}
557557

558-
#define MLX5_CR_DUMP_CHUNK_SIZE 256
559558
static int
560559
mlx5_fw_fatal_reporter_dump(struct devlink_health_reporter *reporter,
561560
struct devlink_fmsg *fmsg, void *priv_ctx,
@@ -564,8 +563,6 @@ mlx5_fw_fatal_reporter_dump(struct devlink_health_reporter *reporter,
564563
struct mlx5_core_dev *dev = devlink_health_reporter_priv(reporter);
565564
u32 crdump_size = dev->priv.health.crdump_size;
566565
u32 *cr_data;
567-
u32 data_size;
568-
u32 offset;
569566
int err;
570567

571568
if (!mlx5_core_is_pf(dev))
@@ -586,20 +583,7 @@ mlx5_fw_fatal_reporter_dump(struct devlink_health_reporter *reporter,
586583
goto free_data;
587584
}
588585

589-
err = devlink_fmsg_arr_pair_nest_start(fmsg, "crdump_data");
590-
if (err)
591-
goto free_data;
592-
for (offset = 0; offset < crdump_size; offset += data_size) {
593-
if (crdump_size - offset < MLX5_CR_DUMP_CHUNK_SIZE)
594-
data_size = crdump_size - offset;
595-
else
596-
data_size = MLX5_CR_DUMP_CHUNK_SIZE;
597-
err = devlink_fmsg_binary_put(fmsg, (char *)cr_data + offset,
598-
data_size);
599-
if (err)
600-
goto free_data;
601-
}
602-
err = devlink_fmsg_arr_pair_nest_end(fmsg);
586+
err = devlink_fmsg_binary_pair_put(fmsg, "crdump_data", cr_data, crdump_size);
603587

604588
free_data:
605589
kvfree(cr_data);

drivers/net/netdevsim/health.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,12 @@ static int nsim_dev_dummy_fmsg_put(struct devlink_fmsg *fmsg, u32 binary_len)
8282
if (err)
8383
return err;
8484

85-
err = devlink_fmsg_arr_pair_nest_start(fmsg, "test_binary");
86-
if (err)
87-
return err;
8885
binary = kmalloc(binary_len, GFP_KERNEL);
8986
if (!binary)
9087
return -ENOMEM;
9188
get_random_bytes(binary, binary_len);
92-
err = devlink_fmsg_binary_put(fmsg, binary, binary_len);
89+
err = devlink_fmsg_binary_pair_put(fmsg, "test_binary", binary, binary_len);
9390
kfree(binary);
94-
if (err)
95-
return err;
96-
err = devlink_fmsg_arr_pair_nest_end(fmsg);
9791
if (err)
9892
return err;
9993

include/net/devlink.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -967,8 +967,6 @@ int devlink_fmsg_u8_put(struct devlink_fmsg *fmsg, u8 value);
967967
int devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value);
968968
int devlink_fmsg_u64_put(struct devlink_fmsg *fmsg, u64 value);
969969
int devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value);
970-
int devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value,
971-
u16 value_len);
972970

973971
int devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name,
974972
bool value);
@@ -981,7 +979,7 @@ int devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name,
981979
int devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name,
982980
const char *value);
983981
int devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name,
984-
const void *value, u16 value_len);
982+
const void *value, u32 value_len);
985983

986984
struct devlink_health_reporter *
987985
devlink_health_reporter_create(struct devlink *devlink,

net/core/devlink.c

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4414,12 +4414,11 @@ int devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value)
44144414
}
44154415
EXPORT_SYMBOL_GPL(devlink_fmsg_string_put);
44164416

4417-
int devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value,
4418-
u16 value_len)
4417+
static int devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value,
4418+
u16 value_len)
44194419
{
44204420
return devlink_fmsg_put_value(fmsg, value, value_len, NLA_BINARY);
44214421
}
4422-
EXPORT_SYMBOL_GPL(devlink_fmsg_binary_put);
44234422

44244423
int devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name,
44254424
bool value)
@@ -4527,19 +4526,26 @@ int devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name,
45274526
EXPORT_SYMBOL_GPL(devlink_fmsg_string_pair_put);
45284527

45294528
int devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name,
4530-
const void *value, u16 value_len)
4529+
const void *value, u32 value_len)
45314530
{
4531+
u32 data_size;
4532+
u32 offset;
45324533
int err;
45334534

4534-
err = devlink_fmsg_pair_nest_start(fmsg, name);
4535+
err = devlink_fmsg_arr_pair_nest_start(fmsg, name);
45354536
if (err)
45364537
return err;
45374538

4538-
err = devlink_fmsg_binary_put(fmsg, value, value_len);
4539-
if (err)
4540-
return err;
4539+
for (offset = 0; offset < value_len; offset += data_size) {
4540+
data_size = value_len - offset;
4541+
if (data_size > DEVLINK_FMSG_MAX_SIZE)
4542+
data_size = DEVLINK_FMSG_MAX_SIZE;
4543+
err = devlink_fmsg_binary_put(fmsg, value + offset, data_size);
4544+
if (err)
4545+
return err;
4546+
}
45414547

4542-
err = devlink_fmsg_pair_nest_end(fmsg);
4548+
err = devlink_fmsg_arr_pair_nest_end(fmsg);
45434549
if (err)
45444550
return err;
45454551

tools/testing/selftests/drivers/net/netdevsim/devlink.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,15 @@ dummy_reporter_test()
431431

432432
check_reporter_info dummy healthy 3 3 10 true
433433

434+
echo 8192> $DEBUGFS_DIR/health/binary_len
435+
check_fail $? "Failed set dummy reporter binary len to 8192"
436+
437+
local dump=$(devlink health dump show $DL_HANDLE reporter dummy -j)
438+
check_err $? "Failed show dump of dummy reporter"
439+
440+
devlink health dump clear $DL_HANDLE reporter dummy
441+
check_err $? "Failed clear dump of dummy reporter"
442+
434443
log_test "dummy reporter test"
435444
}
436445

0 commit comments

Comments
 (0)