octeontx2: Add pcifunc also to mailbox tracepoints
authorSubbaraya Sundeep <sbhatta@marvell.com>
Tue, 13 May 2025 11:40:07 +0000 (17:10 +0530)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 15 May 2025 11:25:16 +0000 (13:25 +0200)
This patch adds pcifunc which represents PF and VF device to the
tracepoints otx2_msg_alloc, otx2_msg_send, otx2_msg_process so that
it is easier to correlate which device allocated the message, which
device forwarded it and which device processed that message.
Also add message id in otx2_msg_send tracepoint to check which
message is sent at any point of time from a device.

Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
Link: https://patch.msgid.link/1747136408-30685-4-git-send-email-sbhatta@marvell.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/marvell/octeontx2/af/mbox.c
drivers/net/ethernet/marvell/octeontx2/af/rvu.c
drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
drivers/net/ethernet/marvell/octeontx2/af/rvu_trace.h
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c

index 5c457e46977e777b04f2e8d084dd0c1abe5244b8..7d21905deed8778bab1d399edeb4b81188bd4ab7 100644 (file)
@@ -218,6 +218,7 @@ static void otx2_mbox_msg_send_data(struct otx2_mbox *mbox, int devid, u64 data)
        struct otx2_mbox_dev *mdev = &mbox->dev[devid];
        struct mbox_hdr *tx_hdr, *rx_hdr;
        void *hw_mbase = mdev->hwbase;
+       struct mbox_msghdr *msg;
        u64 intr_val;
 
        tx_hdr = hw_mbase + mbox->tx_start;
@@ -250,7 +251,10 @@ static void otx2_mbox_msg_send_data(struct otx2_mbox *mbox, int devid, u64 data)
        tx_hdr->num_msgs = mdev->num_msgs;
        rx_hdr->num_msgs = 0;
 
-       trace_otx2_msg_send(mbox->pdev, tx_hdr->num_msgs, tx_hdr->msg_size);
+       msg = (struct mbox_msghdr *)(hw_mbase + mbox->tx_start + msgs_offset);
+
+       trace_otx2_msg_send(mbox->pdev, tx_hdr->num_msgs, tx_hdr->msg_size,
+                           msg->id, msg->pcifunc);
 
        spin_unlock(&mdev->mbox_lock);
 
index 6575c422635b76e5cda160de45c320b7ffd08d80..511eb5b2a2d434977d914a4cd63faf2d5f626909 100644 (file)
@@ -2173,7 +2173,7 @@ static int rvu_process_mbox_msg(struct otx2_mbox *mbox, int devid,
                if (rsp && err)                                         \
                        rsp->hdr.rc = err;                              \
                                                                        \
-               trace_otx2_msg_process(mbox->pdev, _id, err);           \
+               trace_otx2_msg_process(mbox->pdev, _id, err, req->pcifunc); \
                return rsp ? err : -ENOMEM;                             \
        }
 MBOX_MESSAGES
index 992fa0b82e8d2d0451aae136c683618433c45123..38db06b1784c8646993ee9f5d7f95760178f027c 100644 (file)
@@ -34,7 +34,7 @@ static struct _req_type __maybe_unused                                        \
                return NULL;                                            \
        req->hdr.sig = OTX2_MBOX_REQ_SIG;                               \
        req->hdr.id = _id;                                              \
-       trace_otx2_msg_alloc(rvu->pdev, _id, sizeof(*req));             \
+       trace_otx2_msg_alloc(rvu->pdev, _id, sizeof(*req), 0);          \
        return req;                                                     \
 }
 
index 6b5a14dcb6436e25a424915ae19dc786815d318d..abbdb0361fb8bf07614b604b091f3020c8edc114 100644 (file)
 #include "mbox.h"
 
 TRACE_EVENT(otx2_msg_alloc,
-           TP_PROTO(const struct pci_dev *pdev, u16 id, u64 size),
-           TP_ARGS(pdev, id, size),
+           TP_PROTO(const struct pci_dev *pdev, u16 id, u64 size, u16 pcifunc),
+           TP_ARGS(pdev, id, size, pcifunc),
            TP_STRUCT__entry(__string(dev, pci_name(pdev))
                             __field(u16, id)
                             __field(u64, size)
+                            __field(u16, pcifunc)
            ),
            TP_fast_assign(__assign_str(dev);
                           __entry->id = id;
                           __entry->size = size;
+                          __entry->pcifunc = pcifunc;
            ),
-           TP_printk("[%s] msg:(%s) size:%lld\n", __get_str(dev),
-                     otx2_mbox_id2name(__entry->id), __entry->size)
+           TP_printk("[%s] msg:(%s) size:%lld pcifunc:0x%x\n", __get_str(dev),
+                     otx2_mbox_id2name(__entry->id), __entry->size,
+                     __entry->pcifunc)
 );
 
 TRACE_EVENT(otx2_msg_send,
-           TP_PROTO(const struct pci_dev *pdev, u16 num_msgs, u64 msg_size),
-           TP_ARGS(pdev, num_msgs, msg_size),
+           TP_PROTO(const struct pci_dev *pdev, u16 num_msgs, u64 msg_size,
+                    u16 id, u16 pcifunc),
+           TP_ARGS(pdev, num_msgs, msg_size, id, pcifunc),
            TP_STRUCT__entry(__string(dev, pci_name(pdev))
                             __field(u16, num_msgs)
                             __field(u64, msg_size)
+                            __field(u16, id)
+                            __field(u16, pcifunc)
            ),
            TP_fast_assign(__assign_str(dev);
                           __entry->num_msgs = num_msgs;
                           __entry->msg_size = msg_size;
+                          __entry->id = id;
+                          __entry->pcifunc = pcifunc;
            ),
-           TP_printk("[%s] sent %d msg(s) of size:%lld\n", __get_str(dev),
-                     __entry->num_msgs, __entry->msg_size)
+           TP_printk("[%s] sent %d msg(s) of size:%lld msg:(%s) pcifunc:0x%x\n",
+                     __get_str(dev), __entry->num_msgs, __entry->msg_size,
+                     otx2_mbox_id2name(__entry->id), __entry->pcifunc)
 );
 
 TRACE_EVENT(otx2_msg_check,
@@ -81,18 +90,21 @@ TRACE_EVENT(otx2_msg_interrupt,
 );
 
 TRACE_EVENT(otx2_msg_process,
-           TP_PROTO(const struct pci_dev *pdev, u16 id, int err),
-           TP_ARGS(pdev, id, err),
+           TP_PROTO(const struct pci_dev *pdev, u16 id, int err, u16 pcifunc),
+           TP_ARGS(pdev, id, err, pcifunc),
            TP_STRUCT__entry(__string(dev, pci_name(pdev))
                             __field(u16, id)
                             __field(int, err)
+                            __field(u16, pcifunc)
            ),
            TP_fast_assign(__assign_str(dev);
                           __entry->id = id;
                           __entry->err = err;
+                          __entry->pcifunc = pcifunc;
            ),
-           TP_printk("[%s] msg:(%s) error:%d\n", __get_str(dev),
-                     otx2_mbox_id2name(__entry->id), __entry->err)
+           TP_printk("[%s] msg:(%s) error:%d pcifunc:0x%x\n", __get_str(dev),
+                     otx2_mbox_id2name(__entry->id),
+                     __entry->err, __entry->pcifunc)
 );
 
 TRACE_EVENT(otx2_msg_wait_rsp,
index 7e3ddb0bee120d7e25e49f116122dcfe9be12287..d188936f89bb38539033c3d8f07e1b0cffdf243b 100644 (file)
@@ -871,6 +871,7 @@ static struct _req_type __maybe_unused                                      \
 *otx2_mbox_alloc_msg_ ## _fn_name(struct mbox *mbox)                    \
 {                                                                      \
        struct _req_type *req;                                          \
+       u16 pcifunc = mbox->pfvf->pcifunc;                              \
                                                                        \
        req = (struct _req_type *)otx2_mbox_alloc_msg_rsp(              \
                &mbox->mbox, 0, sizeof(struct _req_type),               \
@@ -879,7 +880,8 @@ static struct _req_type __maybe_unused                                      \
                return NULL;                                            \
        req->hdr.sig = OTX2_MBOX_REQ_SIG;                               \
        req->hdr.id = _id;                                              \
-       trace_otx2_msg_alloc(mbox->mbox.pdev, _id, sizeof(*req));       \
+       req->hdr.pcifunc = pcifunc;                                     \
+       trace_otx2_msg_alloc(mbox->mbox.pdev, _id, sizeof(*req), pcifunc); \
        return req;                                                     \
 }
 
index 0aee8e3861f39645f58bb023e7eeb9eb76140295..1bbc17b34d7c6f984d8fafd50c04aa3fda17449a 100644 (file)
@@ -473,7 +473,7 @@ static void otx2_pfvf_mbox_handler(struct work_struct *work)
                        goto inval_msg;
 
                /* Set VF's number in each of the msg */
-               msg->pcifunc &= RVU_PFVF_FUNC_MASK;
+               msg->pcifunc &= ~RVU_PFVF_FUNC_MASK;
                msg->pcifunc |= (vf_idx + 1) & RVU_PFVF_FUNC_MASK;
                offset = msg->next_msgoff;
        }
@@ -3285,6 +3285,7 @@ static void otx2_vf_link_event_task(struct work_struct *work)
        req = (struct cgx_link_info_msg *)msghdr;
        req->hdr.id = MBOX_MSG_CGX_LINK_EVENT;
        req->hdr.sig = OTX2_MBOX_REQ_SIG;
+       req->hdr.pcifunc = pf->pcifunc;
        memcpy(&req->link_info, &pf->linfo, sizeof(req->link_info));
 
        otx2_mbox_wait_for_zero(&pf->mbox_pfvf[0].mbox_up, vf_idx);
index fb4da816d21884ae19e386861dd60dc9c743b11e..ba4ae6d9c56983f975ae510b6bc3d8994a99bd9f 100644 (file)
@@ -136,7 +136,7 @@ static int otx2vf_process_mbox_msg_up(struct otx2_nic *vf,
 
                rsp->hdr.id = MBOX_MSG_CGX_LINK_EVENT;
                rsp->hdr.sig = OTX2_MBOX_RSP_SIG;
-               rsp->hdr.pcifunc = 0;
+               rsp->hdr.pcifunc = req->pcifunc;
                rsp->hdr.rc = 0;
                err = otx2_mbox_up_handler_cgx_link_event(
                                vf, (struct cgx_link_info_msg *)req, rsp);