mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-29 05:55:02 +08:00
49142d1236
Added tracepoints in mailbox code so that the mailbox operations like message allocation, sending message and message interrupts are traced. Also the mailbox errors occurred like timeout or wrong responses are traced. These will help in debugging mailbox issues. Here's an example output showing one of the mailbox messages sent by PF to AF and AF responding to it: ~# mount -t tracefs none /sys/kernel/tracing/ ~# echo 1 > /sys/kernel/tracing/events/rvu/enable ~# ifconfig eth0 up ~# cat /sys/kernel/tracing/trace ~# cat /sys/kernel/tracing/trace tracer: nop _-----=> irqs-off / _----=> need-resched | / _---=> hardirq/softirq || / _--=> preempt-depth ||| / delay TASK-PID CPU# |||| TIMESTAMP FUNCTION | | | |||| | | ifconfig-2382 [002] .... 756.161892: otx2_msg_alloc: [0002:02:00.0] msg:(0x400) size:40 ifconfig-2382 [002] ...1 756.161895: otx2_msg_send: [0002:02:00.0] sent 1 msg(s) of size:48 <idle>-0 [000] d.h1 756.161902: otx2_msg_interrupt: [0002:01:00.0] mbox interrupt PF(s) to AF (0x2) kworker/u49:0-1165 [000] .... 756.162049: otx2_msg_process: [0002:01:00.0] msg:(0x400) error:0 kworker/u49:0-1165 [000] ...1 756.162051: otx2_msg_send: [0002:01:00.0] sent 1 msg(s) of size:32 kworker/u49:0-1165 [000] d.h. 756.162056: otx2_msg_interrupt: [0002:02:00.0] mbox interrupt AF to PF (0x1) Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com> Signed-off-by: Sunil Goutham <sgoutham@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
104 lines
2.9 KiB
C
104 lines
2.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Marvell OcteonTx2 RVU Admin Function driver tracepoints
|
|
*
|
|
* Copyright (C) 2020 Marvell International Ltd.
|
|
*/
|
|
|
|
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM rvu
|
|
|
|
#if !defined(__RVU_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define __RVU_TRACE_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/tracepoint.h>
|
|
#include <linux/pci.h>
|
|
|
|
TRACE_EVENT(otx2_msg_alloc,
|
|
TP_PROTO(const struct pci_dev *pdev, u16 id, u64 size),
|
|
TP_ARGS(pdev, id, size),
|
|
TP_STRUCT__entry(__string(dev, pci_name(pdev))
|
|
__field(u16, id)
|
|
__field(u64, size)
|
|
),
|
|
TP_fast_assign(__assign_str(dev, pci_name(pdev))
|
|
__entry->id = id;
|
|
__entry->size = size;
|
|
),
|
|
TP_printk("[%s] msg:(0x%x) size:%lld\n", __get_str(dev),
|
|
__entry->id, __entry->size)
|
|
);
|
|
|
|
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_STRUCT__entry(__string(dev, pci_name(pdev))
|
|
__field(u16, num_msgs)
|
|
__field(u64, msg_size)
|
|
),
|
|
TP_fast_assign(__assign_str(dev, pci_name(pdev))
|
|
__entry->num_msgs = num_msgs;
|
|
__entry->msg_size = msg_size;
|
|
),
|
|
TP_printk("[%s] sent %d msg(s) of size:%lld\n", __get_str(dev),
|
|
__entry->num_msgs, __entry->msg_size)
|
|
);
|
|
|
|
TRACE_EVENT(otx2_msg_check,
|
|
TP_PROTO(const struct pci_dev *pdev, u16 reqid, u16 rspid, int rc),
|
|
TP_ARGS(pdev, reqid, rspid, rc),
|
|
TP_STRUCT__entry(__string(dev, pci_name(pdev))
|
|
__field(u16, reqid)
|
|
__field(u16, rspid)
|
|
__field(int, rc)
|
|
),
|
|
TP_fast_assign(__assign_str(dev, pci_name(pdev))
|
|
__entry->reqid = reqid;
|
|
__entry->rspid = rspid;
|
|
__entry->rc = rc;
|
|
),
|
|
TP_printk("[%s] req->id:0x%x rsp->id:0x%x resp_code:%d\n",
|
|
__get_str(dev), __entry->reqid,
|
|
__entry->rspid, __entry->rc)
|
|
);
|
|
|
|
TRACE_EVENT(otx2_msg_interrupt,
|
|
TP_PROTO(const struct pci_dev *pdev, const char *msg, u64 intr),
|
|
TP_ARGS(pdev, msg, intr),
|
|
TP_STRUCT__entry(__string(dev, pci_name(pdev))
|
|
__string(str, msg)
|
|
__field(u64, intr)
|
|
),
|
|
TP_fast_assign(__assign_str(dev, pci_name(pdev))
|
|
__assign_str(str, msg)
|
|
__entry->intr = intr;
|
|
),
|
|
TP_printk("[%s] mbox interrupt %s (0x%llx)\n", __get_str(dev),
|
|
__get_str(str), __entry->intr)
|
|
);
|
|
|
|
TRACE_EVENT(otx2_msg_process,
|
|
TP_PROTO(const struct pci_dev *pdev, u16 id, int err),
|
|
TP_ARGS(pdev, id, err),
|
|
TP_STRUCT__entry(__string(dev, pci_name(pdev))
|
|
__field(u16, id)
|
|
__field(int, err)
|
|
),
|
|
TP_fast_assign(__assign_str(dev, pci_name(pdev))
|
|
__entry->id = id;
|
|
__entry->err = err;
|
|
),
|
|
TP_printk("[%s] msg:(0x%x) error:%d\n", __get_str(dev),
|
|
__entry->id, __entry->err)
|
|
);
|
|
|
|
#endif /* __RVU_TRACE_H */
|
|
|
|
#undef TRACE_INCLUDE_PATH
|
|
#define TRACE_INCLUDE_PATH .
|
|
|
|
#undef TRACE_INCLUDE_FILE
|
|
#define TRACE_INCLUDE_FILE rvu_trace
|
|
|
|
#include <trace/define_trace.h>
|