在阅读 <<深入linux设备驱动程序内核机制>> 第五章
195页,如下对应于linux 2.6.39 内核版本 函数 __do_softirq中,
发现 trace_softirq_entry 和
trace_softirq_exit 没有定义,
并且我也翻阅了其他较老以及较新的内核版本中 都没有发现
以上两个函数的定义(或者宏),请问您这是什么情况?
我的回复是:
你自己想办法解决了没有?
你可以在__do_softirq()函数前面定义一个同样的函数,比如:
void trace_softirq_entry(unsigned int nr)
{
if (nr != 0)
return;
else
nr++;
}
{
if (nr != 0)
return;
else
nr++;
}
这样编译肯定会产生错误,类似error: redefinition of ‘trace_softirq_entry’.........................................
答案是该函数定义在include/trace/events/irq.h:117行(我用的3.10版本,其他版本可能略有不同):
DEFINE_EVENT(softirq, softirq_entry,
TP_PROTO(unsigned int vec_nr),
TP_ARGS(vec_nr)
);
TP_PROTO(unsigned int vec_nr),
TP_ARGS(vec_nr)
);
我猜测那位同学估计在源代码里搜了很久,最终也没有找到trace_softirq_entry的定义。但是你可以利用编译器来帮你完成啊,善于利用工具。独立思考,试着自己去解决问题,时间久了,会发现自己在遇到不同问题时会下意识地有对应的解决问题的思路。譬如语感。