| .. | .. |
|---|
| 412 | 412 | struct mlx4_ib_qp *qp, |
|---|
| 413 | 413 | struct mlx4_ib_create_qp *ucmd) |
|---|
| 414 | 414 | { |
|---|
| 415 | + u32 cnt; |
|---|
| 416 | + |
|---|
| 415 | 417 | /* Sanity check SQ size before proceeding */ |
|---|
| 416 | | - if ((1 << ucmd->log_sq_bb_count) > dev->dev->caps.max_wqes || |
|---|
| 417 | | - ucmd->log_sq_stride > |
|---|
| 418 | + if (check_shl_overflow(1, ucmd->log_sq_bb_count, &cnt) || |
|---|
| 419 | + cnt > dev->dev->caps.max_wqes) |
|---|
| 420 | + return -EINVAL; |
|---|
| 421 | + if (ucmd->log_sq_stride > |
|---|
| 418 | 422 | ilog2(roundup_pow_of_two(dev->dev->caps.max_sq_desc_sz)) || |
|---|
| 419 | 423 | ucmd->log_sq_stride < MLX4_IB_MIN_SQ_STRIDE) |
|---|
| 420 | 424 | return -EINVAL; |
|---|
| .. | .. |
|---|
| 526 | 530 | return (-EOPNOTSUPP); |
|---|
| 527 | 531 | } |
|---|
| 528 | 532 | |
|---|
| 529 | | - if (ucmd->rx_hash_fields_mask & ~(MLX4_IB_RX_HASH_SRC_IPV4 | |
|---|
| 530 | | - MLX4_IB_RX_HASH_DST_IPV4 | |
|---|
| 531 | | - MLX4_IB_RX_HASH_SRC_IPV6 | |
|---|
| 532 | | - MLX4_IB_RX_HASH_DST_IPV6 | |
|---|
| 533 | | - MLX4_IB_RX_HASH_SRC_PORT_TCP | |
|---|
| 534 | | - MLX4_IB_RX_HASH_DST_PORT_TCP | |
|---|
| 535 | | - MLX4_IB_RX_HASH_SRC_PORT_UDP | |
|---|
| 536 | | - MLX4_IB_RX_HASH_DST_PORT_UDP | |
|---|
| 537 | | - MLX4_IB_RX_HASH_INNER)) { |
|---|
| 533 | + if (ucmd->rx_hash_fields_mask & ~(u64)(MLX4_IB_RX_HASH_SRC_IPV4 | |
|---|
| 534 | + MLX4_IB_RX_HASH_DST_IPV4 | |
|---|
| 535 | + MLX4_IB_RX_HASH_SRC_IPV6 | |
|---|
| 536 | + MLX4_IB_RX_HASH_DST_IPV6 | |
|---|
| 537 | + MLX4_IB_RX_HASH_SRC_PORT_TCP | |
|---|
| 538 | + MLX4_IB_RX_HASH_DST_PORT_TCP | |
|---|
| 539 | + MLX4_IB_RX_HASH_SRC_PORT_UDP | |
|---|
| 540 | + MLX4_IB_RX_HASH_DST_PORT_UDP | |
|---|
| 541 | + MLX4_IB_RX_HASH_INNER)) { |
|---|
| 538 | 542 | pr_debug("RX Hash fields_mask has unsupported mask (0x%llx)\n", |
|---|
| 539 | 543 | ucmd->rx_hash_fields_mask); |
|---|
| 540 | 544 | return (-EOPNOTSUPP); |
|---|