微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 Linux-5.11.4 中跟踪 softirq_raise 的跟踪点

如何解决无法在 Linux-5.11.4 中跟踪 softirq_raise 的跟踪点

我正在编写一个内核模块来连接到 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 上显示了许多不同的软中断。
我的处理程序有什么问题吗?

解决方法

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

as

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。