vdpa/mlx5: Avoid destroying MR on empty iotlb
authorEli Cohen <elic@nvidia.com>
Wed, 11 Aug 2021 05:37:13 +0000 (08:37 +0300)
committerSasha Levin <sashal@kernel.org>
Thu, 26 Aug 2021 12:35:42 +0000 (08:35 -0400)
commit1b6fc6f739d412d42f64c8dcaf817ba831bb198a
tree42c52ae13cf85423fb299f4f3218885e6f98e30b
parentecdd7c48806293d1ac2543a4ef81d6da8869c2d9
vdpa/mlx5: Avoid destroying MR on empty iotlb

[ Upstream commit 08dbd5660232bede7916d8568003012c1182cc9a ]

The current code treats an empty iotlb provdied in set_map() as a
special case and destroy the memory region object. This must not be done
since the virtqueue objects reference this MR. Doing so will cause the
driver unload to emit errors and log timeouts caused by the firmware
complaining on busy resources.

This patch treats an empty iotlb as any other change of mapping. In this
case, mlx5_vdpa_create_mr() will fail and the entire set_map() call to
fail.

This issue has not been encountered before but was seen to occur in a
non-official version of qemu. Since qemu is a userspace program, the
driver must protect against such case.

Fixes: 94abbccdf291 ("vdpa/mlx5: Add shared memory registration code")
Signed-off-by: Eli Cohen <elic@nvidia.com>
Link: https://lore.kernel.org/r/20210811053713.66658-1-elic@nvidia.com
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/vdpa/mlx5/core/mr.c