diff options
author | Jack Morgenstein <jackm@dev.mellanox.co.il> | 2006-12-25 02:24:52 -0500 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2007-01-07 23:25:24 -0500 |
commit | 98714cb161b4b1a5d0c5bd0337a8578196b73677 (patch) | |
tree | 7ea22e79dc95a7c16bcba73430939ca2b21c348b /drivers/infiniband/hw | |
parent | 0cefcf0bbc2d252eb48bff3289fb59c3817dd405 (diff) |
IB/mthca: Fix PRM compliance problem in atomic-send completions
According to the Tavor and Arbel programmer's reference manuals, the
number of bytes transferred is not provided in the byte_cnt field of
the CQ entry for atomic operation completions. For atomic operations,
the number of bytes transferred is always 8 (when the status is
"success"), and this constant value should always be used by the
driver in the ib_wc entry returned, rather than using the CQE.
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_cq.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c index 283d50b76c3d..1159c8a0f2c5 100644 --- a/drivers/infiniband/hw/mthca/mthca_cq.c +++ b/drivers/infiniband/hw/mthca/mthca_cq.c | |||
@@ -54,6 +54,10 @@ enum { | |||
54 | MTHCA_CQ_ENTRY_SIZE = 0x20 | 54 | MTHCA_CQ_ENTRY_SIZE = 0x20 |
55 | }; | 55 | }; |
56 | 56 | ||
57 | enum { | ||
58 | MTHCA_ATOMIC_BYTE_LEN = 8 | ||
59 | }; | ||
60 | |||
57 | /* | 61 | /* |
58 | * Must be packed because start is 64 bits but only aligned to 32 bits. | 62 | * Must be packed because start is 64 bits but only aligned to 32 bits. |
59 | */ | 63 | */ |
@@ -599,11 +603,11 @@ static inline int mthca_poll_one(struct mthca_dev *dev, | |||
599 | break; | 603 | break; |
600 | case MTHCA_OPCODE_ATOMIC_CS: | 604 | case MTHCA_OPCODE_ATOMIC_CS: |
601 | entry->opcode = IB_WC_COMP_SWAP; | 605 | entry->opcode = IB_WC_COMP_SWAP; |
602 | entry->byte_len = be32_to_cpu(cqe->byte_cnt); | 606 | entry->byte_len = MTHCA_ATOMIC_BYTE_LEN; |
603 | break; | 607 | break; |
604 | case MTHCA_OPCODE_ATOMIC_FA: | 608 | case MTHCA_OPCODE_ATOMIC_FA: |
605 | entry->opcode = IB_WC_FETCH_ADD; | 609 | entry->opcode = IB_WC_FETCH_ADD; |
606 | entry->byte_len = be32_to_cpu(cqe->byte_cnt); | 610 | entry->byte_len = MTHCA_ATOMIC_BYTE_LEN; |
607 | break; | 611 | break; |
608 | case MTHCA_OPCODE_BIND_MW: | 612 | case MTHCA_OPCODE_BIND_MW: |
609 | entry->opcode = IB_WC_BIND_MW; | 613 | entry->opcode = IB_WC_BIND_MW; |