Virtchnl failures can be hard to debug without logs. Logging the details of virtchnl transactions can be useful for debugging virtchnl-related issues.
Tested: Built and booted on a test machine. Signed-off-by: Li Li <[email protected]> --- v2: - Use dev_warn_ratelimited instead of dev_notice_ratelimited based on reviewer feedback. drivers/net/ethernet/intel/libie/controlq.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/net/ethernet/intel/libie/controlq.c b/drivers/net/ethernet/intel/libie/controlq.c index ebc05355e39d..bf200fea1e12 100644 --- a/drivers/net/ethernet/intel/libie/controlq.c +++ b/drivers/net/ethernet/intel/libie/controlq.c @@ -762,6 +762,16 @@ libie_ctlq_xn_process_recv(struct libie_ctlq_xn_recv_params *params, status = ctlq_msg->chnl_retval ? -EFAULT : 0; xn = &xnm->ring[xn_index]; + + if (ctlq_msg->chnl_retval) { + dev_err_ratelimited( + params->ctlq->dev, + "Non-zero virtchnl ret val (msg op: %u, ret val: %u, msg_cookie: %u, data_len: %u); xn op: %u, id: %u, cookie: %u\n", + ctlq_msg->chnl_opcode, ctlq_msg->chnl_retval, + msg_cookie, ctlq_msg->data_len, xn->virtchnl_opcode, + xn->index, xn->cookie); + } + if (ctlq_msg->chnl_opcode != xn->virtchnl_opcode || msg_cookie != xn->cookie) return false; @@ -1011,6 +1021,11 @@ int libie_ctlq_xn_send(struct libie_ctlq_xn_send_params *params) params->recv_mem = xn->recv_mem; break; default: + dev_warn_ratelimited( + params->ctlq->dev, + "Transaction failed (op %u, xn state: %d, id: %u, cookie: %u, size: %zu)\n", + params->chnl_opcode, xn->state, xn->index, xn->cookie, + xn->recv_mem.iov_len); ret = -EBADMSG; break; } -- 2.54.0.rc2.544.gc7ae2d5bb8-goog
