From 117fb3403d18ba35caa613def72b69dd2cb0aa6c Mon Sep 17 00:00:00 2001 From: Jack Morgenstein Date: Mon, 18 Jun 2007 08:13:59 -0700 Subject: [PATCH] --- yaml --- r: 57899 b: refs/heads/master c: 082dee3216c99a838af40be403799f60bcea2e97 h: refs/heads/master i: 57897: 4b25f13db0ac5519420f8cae8c078398a7e6203f 57895: b50d5d0a7fd356cbfa9813606475796203d95930 v: v3 --- [refs] | 2 +- trunk/drivers/infiniband/hw/mlx4/cq.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 3d2e74d0d291..d709e2cf23ac 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 54e95f8dcbd7d86f79b423e8d11053ec9a2d9946 +refs/heads/master: 082dee3216c99a838af40be403799f60bcea2e97 diff --git a/trunk/drivers/infiniband/hw/mlx4/cq.c b/trunk/drivers/infiniband/hw/mlx4/cq.c index e940521e9c8d..660b27aecae5 100644 --- a/trunk/drivers/infiniband/hw/mlx4/cq.c +++ b/trunk/drivers/infiniband/hw/mlx4/cq.c @@ -478,7 +478,8 @@ void __mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq) { u32 prod_index; int nfreed = 0; - struct mlx4_cqe *cqe; + struct mlx4_cqe *cqe, *dest; + u8 owner_bit; /* * First we need to find the current producer index, so we @@ -501,9 +502,13 @@ void __mlx4_ib_cq_clean(struct mlx4_ib_cq *cq, u32 qpn, struct mlx4_ib_srq *srq) if (srq && !(cqe->owner_sr_opcode & MLX4_CQE_IS_SEND_MASK)) mlx4_ib_free_srq_wqe(srq, be16_to_cpu(cqe->wqe_index)); ++nfreed; - } else if (nfreed) - memcpy(get_cqe(cq, (prod_index + nfreed) & cq->ibcq.cqe), - cqe, sizeof *cqe); + } else if (nfreed) { + dest = get_cqe(cq, (prod_index + nfreed) & cq->ibcq.cqe); + owner_bit = dest->owner_sr_opcode & MLX4_CQE_OWNER_MASK; + memcpy(dest, cqe, sizeof *cqe); + dest->owner_sr_opcode = owner_bit | + (dest->owner_sr_opcode & ~MLX4_CQE_OWNER_MASK); + } } if (nfreed) {