Sun, May 05, 2019 at 02:33:23AM CEST, [email protected] wrote:
>From: Moshe Shemesh <[email protected]>
>
>Create mlx5_devlink_health_reporter for FW reporter. The FW reporter
>implements devlink_health_reporter diagnose callback.
>
>The fw reporter diagnose command can be triggered any time by the user
>to check current fw status.
>In healthy status, it will return clear syndrome. Otherwise it will dump
>the health info buffer.
>
>Command example and output on healthy status:
>$ devlink health diagnose pci/0000:82:00.0 reporter fw
>Syndrome: 0
>
>Command example and output on non healthy status:
>$ devlink health diagnose pci/0000:82:00.0 reporter fw
>diagnose data:
>assert_var[0] 0xfc3fc043
>assert_var[1] 0x0001b41c
>assert_var[2] 0x00000000
>assert_var[3] 0x00000000
>assert_var[4] 0x00000000
>assert_exit_ptr 0x008033b4
>assert_callra 0x0080365c
>fw_ver 16.24.1000
>hw_id 0x0000020d
>irisc_index 0
>synd 0x8: unrecoverable hardware error
>ext_synd 0x003d
>raw fw_ver 0x101803e8
>
>Signed-off-by: Moshe Shemesh <[email protected]>
>Signed-off-by: Eran Ben Elisha <[email protected]>
>Signed-off-by: Saeed Mahameed <[email protected]>
[...]
>+static int
>+mlx5_fw_reporter_diagnose(struct devlink_health_reporter *reporter,
>+ struct devlink_fmsg *fmsg)
>+{
>+ struct mlx5_core_dev *dev = devlink_health_reporter_priv(reporter);
>+ struct mlx5_core_health *health = &dev->priv.health;
>+ u8 synd;
>+ int err;
>+
>+ mutex_lock(&health->info_buf_lock);
>+ mlx5_get_health_info(dev, &synd);
>+
>+ if (!synd) {
>+ mutex_unlock(&health->info_buf_lock);
>+ return devlink_fmsg_u8_pair_put(fmsg, "Syndrome", synd);
>+ }
>+
>+ err = devlink_fmsg_string_pair_put(fmsg, "diagnose data",
>+ health->info_buf);
No! This is wrong! You are sneaking in text blob. Please put the info in
structured form using proper fmsg helpers.