Skip to content

Commit 5fc24e6

Browse files
committed
RDMA/rxe: Fix compile warnings on 32-bit
Move the conditional code into a function, with two varients so it is harder to make these kinds of mistakes. drivers/infiniband/sw/rxe/rxe_resp.c: In function 'atomic_write_reply': drivers/infiniband/sw/rxe/rxe_resp.c:794:13: error: unused variable 'payload' [-Werror=unused-variable] 794 | int payload = payload_size(pkt); | ^~~~~~~ drivers/infiniband/sw/rxe/rxe_resp.c:793:24: error: unused variable 'mr' [-Werror=unused-variable] 793 | struct rxe_mr *mr = qp->resp.mr; | ^~ drivers/infiniband/sw/rxe/rxe_resp.c:791:19: error: unused variable 'dst' [-Werror=unused-variable] 791 | u64 src, *dst; | ^~~ drivers/infiniband/sw/rxe/rxe_resp.c:791:13: error: unused variable 'src' [-Werror=unused-variable] 791 | u64 src, *dst; Fixes: 034e285 ("RDMA/rxe: Make responder support atomic write on RC service") Link: https://lore.kernel.org/linux-rdma/[email protected]/ Reported-by: Guenter Roeck <[email protected]> Signed-off-by: Jason Gunthorpe <[email protected]>
1 parent dbc94a0 commit 5fc24e6

File tree

1 file changed

+40
-32
lines changed

1 file changed

+40
-32
lines changed

drivers/infiniband/sw/rxe/rxe_resp.c

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -785,53 +785,61 @@ static enum resp_states atomic_reply(struct rxe_qp *qp,
785785
return ret;
786786
}
787787

788-
static enum resp_states atomic_write_reply(struct rxe_qp *qp,
789-
struct rxe_pkt_info *pkt)
788+
#ifdef CONFIG_64BIT
789+
static enum resp_states do_atomic_write(struct rxe_qp *qp,
790+
struct rxe_pkt_info *pkt)
790791
{
791-
u64 src, *dst;
792-
struct resp_res *res = qp->resp.res;
793792
struct rxe_mr *mr = qp->resp.mr;
794793
int payload = payload_size(pkt);
794+
u64 src, *dst;
795795

796-
if (!res) {
797-
res = rxe_prepare_res(qp, pkt, RXE_ATOMIC_WRITE_MASK);
798-
qp->resp.res = res;
799-
}
800-
801-
if (!res->replay) {
802-
#ifdef CONFIG_64BIT
803-
if (mr->state != RXE_MR_STATE_VALID)
804-
return RESPST_ERR_RKEY_VIOLATION;
805-
806-
memcpy(&src, payload_addr(pkt), payload);
796+
if (mr->state != RXE_MR_STATE_VALID)
797+
return RESPST_ERR_RKEY_VIOLATION;
807798

808-
dst = iova_to_vaddr(mr, qp->resp.va + qp->resp.offset, payload);
809-
/* check vaddr is 8 bytes aligned. */
810-
if (!dst || (uintptr_t)dst & 7)
811-
return RESPST_ERR_MISALIGNED_ATOMIC;
799+
memcpy(&src, payload_addr(pkt), payload);
812800

813-
/* Do atomic write after all prior operations have completed */
814-
smp_store_release(dst, src);
801+
dst = iova_to_vaddr(mr, qp->resp.va + qp->resp.offset, payload);
802+
/* check vaddr is 8 bytes aligned. */
803+
if (!dst || (uintptr_t)dst & 7)
804+
return RESPST_ERR_MISALIGNED_ATOMIC;
815805

816-
/* decrease resp.resid to zero */
817-
qp->resp.resid -= sizeof(payload);
806+
/* Do atomic write after all prior operations have completed */
807+
smp_store_release(dst, src);
818808

819-
qp->resp.msn++;
809+
/* decrease resp.resid to zero */
810+
qp->resp.resid -= sizeof(payload);
820811

821-
/* next expected psn, read handles this separately */
822-
qp->resp.psn = (pkt->psn + 1) & BTH_PSN_MASK;
823-
qp->resp.ack_psn = qp->resp.psn;
812+
qp->resp.msn++;
824813

825-
qp->resp.opcode = pkt->opcode;
826-
qp->resp.status = IB_WC_SUCCESS;
814+
/* next expected psn, read handles this separately */
815+
qp->resp.psn = (pkt->psn + 1) & BTH_PSN_MASK;
816+
qp->resp.ack_psn = qp->resp.psn;
827817

828-
return RESPST_ACKNOWLEDGE;
818+
qp->resp.opcode = pkt->opcode;
819+
qp->resp.status = IB_WC_SUCCESS;
820+
return RESPST_ACKNOWLEDGE;
821+
}
829822
#else
830-
return RESPST_ERR_UNSUPPORTED_OPCODE;
823+
static enum resp_states do_atomic_write(struct rxe_qp *qp,
824+
struct rxe_pkt_info *pkt)
825+
{
826+
return RESPST_ERR_UNSUPPORTED_OPCODE;
827+
}
831828
#endif /* CONFIG_64BIT */
829+
830+
static enum resp_states atomic_write_reply(struct rxe_qp *qp,
831+
struct rxe_pkt_info *pkt)
832+
{
833+
struct resp_res *res = qp->resp.res;
834+
835+
if (!res) {
836+
res = rxe_prepare_res(qp, pkt, RXE_ATOMIC_WRITE_MASK);
837+
qp->resp.res = res;
832838
}
833839

834-
return RESPST_ACKNOWLEDGE;
840+
if (res->replay)
841+
return RESPST_ACKNOWLEDGE;
842+
return do_atomic_write(qp, pkt);
835843
}
836844

837845
static struct sk_buff *prepare_ack_packet(struct rxe_qp *qp,

0 commit comments

Comments
 (0)