diff options
author | Yishai Hadas <yishaih@nvidia.com> | 2024-02-05 14:48:26 +0200 |
---|---|---|
committer | Alex Williamson <alex.williamson@redhat.com> | 2024-02-22 12:17:32 -0700 |
commit | 793d4bfa3103a238c6e48eb13c38fa31acd18b94 (patch) | |
tree | 6c3f9a368f949b3fb9714af5701fdf92d573f9cd /drivers/vfio | |
parent | f886473071d6c0c98857eb5d7871a5e5ac26e950 (diff) | |
download | linux-793d4bfa3103a238c6e48eb13c38fa31acd18b94.tar.gz linux-793d4bfa3103a238c6e48eb13c38fa31acd18b94.tar.bz2 linux-793d4bfa3103a238c6e48eb13c38fa31acd18b94.zip |
vfio/mlx5: Handle the EREMOTEIO error upon the SAVE command
The SAVE command uses the async command interface over the PF.
Upon a failure in the firmware -EREMOTEIO is returned.
In that case call mlx5_cmd_out_err() to let it print the command failure
details including the firmware syndrome.
Note:
The other commands in the driver use the sync command interface in a way
that a firmware syndrome is printed upon an error inside mlx5_core.
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Acked-by: Leon Romanovsky <leon@kernel.org>
Link: https://lore.kernel.org/r/20240205124828.232701-4-yishaih@nvidia.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'drivers/vfio')
-rw-r--r-- | drivers/vfio/pci/mlx5/cmd.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/vfio/pci/mlx5/cmd.c b/drivers/vfio/pci/mlx5/cmd.c index 8a39ff19da28..6b45bd7d89ad 100644 --- a/drivers/vfio/pci/mlx5/cmd.c +++ b/drivers/vfio/pci/mlx5/cmd.c @@ -614,8 +614,13 @@ static void mlx5vf_save_callback(int status, struct mlx5_async_work *context) err: /* The error flow can't run from an interrupt context */ - if (status == -EREMOTEIO) + if (status == -EREMOTEIO) { status = MLX5_GET(save_vhca_state_out, async_data->out, status); + /* Failed in FW, print cmd out failure details */ + mlx5_cmd_out_err(migf->mvdev->mdev, MLX5_CMD_OP_SAVE_VHCA_STATE, 0, + async_data->out); + } + async_data->status = status; queue_work(migf->mvdev->cb_wq, &async_data->work); } |