Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: IB/ipath: Fix receiving UD messages with immediate datahifive-unleashed-5.1
commit
5db501d7e3
|
@ -455,6 +455,28 @@ void ipath_ud_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The opcode is in the low byte when its in network order
|
||||||
|
* (top byte when in host order).
|
||||||
|
*/
|
||||||
|
opcode = be32_to_cpu(ohdr->bth[0]) >> 24;
|
||||||
|
if (qp->ibqp.qp_num > 1 &&
|
||||||
|
opcode == IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE) {
|
||||||
|
if (header_in_data) {
|
||||||
|
wc.imm_data = *(__be32 *) data;
|
||||||
|
data += sizeof(__be32);
|
||||||
|
} else
|
||||||
|
wc.imm_data = ohdr->u.ud.imm_data;
|
||||||
|
wc.wc_flags = IB_WC_WITH_IMM;
|
||||||
|
hdrsize += sizeof(u32);
|
||||||
|
} else if (opcode == IB_OPCODE_UD_SEND_ONLY) {
|
||||||
|
wc.imm_data = 0;
|
||||||
|
wc.wc_flags = 0;
|
||||||
|
} else {
|
||||||
|
dev->n_pkt_drops++;
|
||||||
|
goto bail;
|
||||||
|
}
|
||||||
|
|
||||||
/* Get the number of bytes the message was padded by. */
|
/* Get the number of bytes the message was padded by. */
|
||||||
pad = (be32_to_cpu(ohdr->bth[0]) >> 20) & 3;
|
pad = (be32_to_cpu(ohdr->bth[0]) >> 20) & 3;
|
||||||
if (unlikely(tlen < (hdrsize + pad + 4))) {
|
if (unlikely(tlen < (hdrsize + pad + 4))) {
|
||||||
|
@ -481,28 +503,6 @@ void ipath_ud_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr,
|
||||||
*/
|
*/
|
||||||
wc.byte_len = tlen + sizeof(struct ib_grh);
|
wc.byte_len = tlen + sizeof(struct ib_grh);
|
||||||
|
|
||||||
/*
|
|
||||||
* The opcode is in the low byte when its in network order
|
|
||||||
* (top byte when in host order).
|
|
||||||
*/
|
|
||||||
opcode = be32_to_cpu(ohdr->bth[0]) >> 24;
|
|
||||||
if (qp->ibqp.qp_num > 1 &&
|
|
||||||
opcode == IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE) {
|
|
||||||
if (header_in_data) {
|
|
||||||
wc.imm_data = *(__be32 *) data;
|
|
||||||
data += sizeof(__be32);
|
|
||||||
} else
|
|
||||||
wc.imm_data = ohdr->u.ud.imm_data;
|
|
||||||
wc.wc_flags = IB_WC_WITH_IMM;
|
|
||||||
hdrsize += sizeof(u32);
|
|
||||||
} else if (opcode == IB_OPCODE_UD_SEND_ONLY) {
|
|
||||||
wc.imm_data = 0;
|
|
||||||
wc.wc_flags = 0;
|
|
||||||
} else {
|
|
||||||
dev->n_pkt_drops++;
|
|
||||||
goto bail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the next work request entry to find where to put the data.
|
* Get the next work request entry to find where to put the data.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue