| From 33e92d7a3c6dee073303304d815264233b73e6bd Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 23 Jun 2020 17:55:25 +0300 |
| Subject: nvme-rdma: assign completion vector correctly |
| |
| From: Max Gurtovoy <maxg@mellanox.com> |
| |
| [ Upstream commit 032a9966a22a3596addf81dacf0c1736dfedc32a ] |
| |
| The completion vector index that is given during CQ creation can't |
| exceed the number of support vectors by the underlying RDMA device. This |
| violation currently can accure, for example, in case one will try to |
| connect with N regular read/write queues and M poll queues and the sum |
| of N + M > num_supported_vectors. This will lead to failure in establish |
| a connection to remote target. Instead, in that case, share a completion |
| vector between queues. |
| |
| Signed-off-by: Max Gurtovoy <maxg@mellanox.com> |
| Signed-off-by: Christoph Hellwig <hch@lst.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/nvme/host/rdma.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c |
| index 73e8475ddc8ab..cd0d499781908 100644 |
| --- a/drivers/nvme/host/rdma.c |
| +++ b/drivers/nvme/host/rdma.c |
| @@ -451,7 +451,7 @@ static int nvme_rdma_create_queue_ib(struct nvme_rdma_queue *queue) |
| * Spread I/O queues completion vectors according their queue index. |
| * Admin queues can always go on completion vector 0. |
| */ |
| - comp_vector = idx == 0 ? idx : idx - 1; |
| + comp_vector = (idx == 0 ? idx : idx - 1) % ibdev->num_comp_vectors; |
| |
| /* Polling queues need direct cq polling context */ |
| if (nvme_rdma_poll_queue(queue)) |
| -- |
| 2.25.1 |
| |