IB/mlx4: Put priority bits in WQE of IBoE MLX QP
authorOren Duer <oren@mellanox.co.il>
Sun, 29 Apr 2012 14:04:24 +0000 (17:04 +0300)
committerRoland Dreier <roland@purestorage.com>
Tue, 8 May 2012 18:48:09 +0000 (11:48 -0700)
Otherwise CM packets going over MLX QP1 get fixed scheduling priority 0.
We want CM packets to get the same scheduling priority, and therefore
map to the same SQ (Schedule Queue) and eventually TC (Traffic Class),
as the application requested for the actual QP used for the connection.

Signed-off-by: Oren Duer <oren@mellanox.co.il>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/mlx4/qp.c
include/linux/mlx4/qp.h

index 3a78489666277eeb97a77ce65c5fa9ff804b5339..6da2e9755091f8efa2ad467a57efc55c4c8d9784 100644 (file)
@@ -1424,6 +1424,9 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr,
 
        if (is_eth) {
                u8 *smac;
+               u16 pcp = (be32_to_cpu(ah->av.ib.sl_tclass_flowlabel) >> 29) << 13;
+
+               mlx->sched_prio = cpu_to_be16(pcp);
 
                memcpy(sqp->ud_header.eth.dmac_h, ah->av.eth.mac, 6);
                /* FIXME: cache smac value? */
@@ -1434,10 +1437,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr,
                if (!is_vlan) {
                        sqp->ud_header.eth.type = cpu_to_be16(MLX4_IB_IBOE_ETHERTYPE);
                } else {
-                       u16 pcp;
-
                        sqp->ud_header.vlan.type = cpu_to_be16(MLX4_IB_IBOE_ETHERTYPE);
-                       pcp = (be32_to_cpu(ah->av.ib.sl_tclass_flowlabel) >> 29) << 13;
                        sqp->ud_header.vlan.tag = cpu_to_be16(vlan | pcp);
                }
        } else {
index 091f9e7dc8b9629387a3d8e0d4bee9e3f915b702..bb57d5c58df2fea4ee6c821d3bb8a8dbc87a8653 100644 (file)
@@ -233,7 +233,8 @@ struct mlx4_wqe_mlx_seg {
        u8                      owner;
        u8                      reserved1[2];
        u8                      opcode;
-       u8                      reserved2[3];
+       __be16                  sched_prio;
+       u8                      reserved2;
        u8                      size;
        /*
         * [17]    VL15