diff options
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/core/cm.c | 2 | ||||
-rw-r--r-- | drivers/infiniband/hw/mlx4/cm.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c index 98281fe5ea4b..784b97cb05b0 100644 --- a/drivers/infiniband/core/cm.c +++ b/drivers/infiniband/core/cm.c | |||
@@ -390,7 +390,7 @@ static int cm_alloc_id(struct cm_id_private *cm_id_priv) | |||
390 | 390 | ||
391 | id = idr_alloc(&cm.local_id_table, cm_id_priv, next_id, 0, GFP_NOWAIT); | 391 | id = idr_alloc(&cm.local_id_table, cm_id_priv, next_id, 0, GFP_NOWAIT); |
392 | if (id >= 0) | 392 | if (id >= 0) |
393 | next_id = ((unsigned) id + 1) & MAX_IDR_MASK; | 393 | next_id = max(id + 1, 0); |
394 | 394 | ||
395 | spin_unlock_irqrestore(&cm.lock, flags); | 395 | spin_unlock_irqrestore(&cm.lock, flags); |
396 | idr_preload_end(); | 396 | idr_preload_end(); |
diff --git a/drivers/infiniband/hw/mlx4/cm.c b/drivers/infiniband/hw/mlx4/cm.c index 80e59ed864b3..e0d79b2395e4 100644 --- a/drivers/infiniband/hw/mlx4/cm.c +++ b/drivers/infiniband/hw/mlx4/cm.c | |||
@@ -225,7 +225,7 @@ id_map_alloc(struct ib_device *ibdev, int slave_id, u32 sl_cm_id) | |||
225 | 225 | ||
226 | ret = idr_alloc(&sriov->pv_id_table, ent, next_id, 0, GFP_NOWAIT); | 226 | ret = idr_alloc(&sriov->pv_id_table, ent, next_id, 0, GFP_NOWAIT); |
227 | if (ret >= 0) { | 227 | if (ret >= 0) { |
228 | next_id = ((unsigned)ret + 1) & MAX_IDR_MASK; | 228 | next_id = max(ret + 1, 0); |
229 | ent->pv_cm_id = (u32)ret; | 229 | ent->pv_cm_id = (u32)ret; |
230 | sl_id_map_add(ibdev, ent); | 230 | sl_id_map_add(ibdev, ent); |
231 | list_add_tail(&ent->list, &sriov->cm_list); | 231 | list_add_tail(&ent->list, &sriov->cm_list); |