【问题标题】:Failed to trace the trace point of softirq_raise in Linux-5.11.4在 Linux-5.11.4 中跟踪 softirq_raise 的跟踪点失败
【发布时间】:2021-05-10 09:33:11
【问题描述】:

我正在编写一个内核模块来挂钩到 softirq_raise 的跟踪点。我发现它可以显示在

/sys/kernel/debug/tracing/available_events:irq:softirq_raise   
/sys/kernel/debug/tracing/available_filter_functions:__traceiter_softirq_raise

我的处理程序如下,

static void probe_softirq_raise(unsigned int vec)
{
    static u64 count = 0;

    if (smp_processor_id() == 5) {
        if ((count % 100) == 0) {
            printk("XXXXXXX CPU = %d, vec = %d\n", smp_processor_id(), vec);
        }
        count ++;
    }
}

我得到的如下,

[ 1835.220792] XXXXXXX CPU = 5, vec = 0
[ 1844.275244] XXXXXXX CPU = 5, vec = 0
[ 1853.488791] XXXXXXX CPU = 5, vec = 0
[ 1861.112794] XXXXXXX CPU = 5, vec = 0
[ 1868.336810] XXXXXXX CPU = 5, vec = 0

令我惊讶的是,它只显示 vec_nr = 0,没有其他软中断被引发。
但是 /proc/softirqs 确实在 CPU5 上显示了许多不同的软中断。
我的处理程序有什么问题吗?

【问题讨论】:

    标签: linux ftrace softirq


    【解决方案1】:

    探针处理程序的参数错误,应该是

    static void probe_softirq_raise(void *data, unsigned int vec)
    

    【讨论】:

      猜你喜欢
      • 2017-09-30
      • 2019-03-04
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 2013-03-10
      • 1970-01-01
      相关资源
      最近更新 更多