[ofa-general] ***SPAM*** mlx4_ib_post_send(): incorrect test on wr->opcode?

Roel Kluin roel.kluin at gmail.com
Thu Apr 23 08:50:50 PDT 2009


// vi drivers/infiniband/hw/mlx4/qp.c +1523
int mlx4_ib_post_send(..., struct ib_send_wr *wr, ...)
{
...
                if (wr->opcode < 0 || wr->opcode >= ARRAY_SIZE(mlx4_ib_opcode)) {
                        err = -EINVAL;
                        goto out;
                }

                ctrl->owner_opcode = mlx4_ib_opcode[wr->opcode] |
                        (ind & qp->sq.wqe_cnt ? cpu_to_be32(1 << 31) : 0);
...
}

wr->opcode cannot be less than 0, can it? but note below that in mlx4_ib_opcode
IB_WR_RDMA_READ_WITH_INV is missing, so shouldn't this be:

		if (wr->opcode > IB_WR_FAST_REG_MR) {
                        err = -EINVAL;
                        goto out;
                }

// vi include/rdma/ib_verbs.h +714
struct ib_send_wr {
...
        enum ib_wr_opcode       opcode;
...
}

// vi include/rdma/ib_verbs.h +679
enum ib_wr_opcode {
        IB_WR_RDMA_WRITE,
        IB_WR_RDMA_WRITE_WITH_IMM,
        IB_WR_SEND,
        IB_WR_SEND_WITH_IMM,
        IB_WR_RDMA_READ,
        IB_WR_ATOMIC_CMP_AND_SWP,
        IB_WR_ATOMIC_FETCH_AND_ADD,
        IB_WR_LSO,
        IB_WR_SEND_WITH_INV,
        IB_WR_RDMA_READ_WITH_INV,
        IB_WR_LOCAL_INV,
        IB_WR_FAST_REG_MR,
};

// vi drivers/infiniband/hw/mlx4/qp.c +72
static const __be32 mlx4_ib_opcode[] = {
        [IB_WR_SEND]                    = cpu_to_be32(MLX4_OPCODE_SEND),
        [IB_WR_LSO]                     = cpu_to_be32(MLX4_OPCODE_LSO),
        [IB_WR_SEND_WITH_IMM]           = cpu_to_be32(MLX4_OPCODE_SEND_IMM),
        [IB_WR_RDMA_WRITE]              = cpu_to_be32(MLX4_OPCODE_RDMA_WRITE),
        [IB_WR_RDMA_WRITE_WITH_IMM]     = cpu_to_be32(MLX4_OPCODE_RDMA_WRITE_IMM),
        [IB_WR_RDMA_READ]               = cpu_to_be32(MLX4_OPCODE_RDMA_READ),
        [IB_WR_ATOMIC_CMP_AND_SWP]      = cpu_to_be32(MLX4_OPCODE_ATOMIC_CS),
        [IB_WR_ATOMIC_FETCH_AND_ADD]    = cpu_to_be32(MLX4_OPCODE_ATOMIC_FA),
        [IB_WR_SEND_WITH_INV]           = cpu_to_be32(MLX4_OPCODE_SEND_INVAL),
        [IB_WR_LOCAL_INV]               = cpu_to_be32(MLX4_OPCODE_LOCAL_INVAL),
        [IB_WR_FAST_REG_MR]             = cpu_to_be32(MLX4_OPCODE_FMR),
};





More information about the general mailing list