我正在尝试在内核中为 ac 函数添加超时。
我想做一些类似try_until_timeout
以下伪代码的功能:
void myfunction() {/* [...] */}
void myfunction_cleanup() {/* [...] */}
int main( void ) {
boolean hasFinished = try_until_timeout(myfunction, HZ/10 ) // The task has 100 ms of processor time to complete
if(!hasFinished) { // if the task have timeouted
hasFinished = try_until_timeout(myfunction_cleanup, HZ/10 ) // The task has 100 ms of processor time to come back to a clean state
if(!hasFinished) { // if the cleanup also timeouted
printk(KERN_WARN "Task and cleanup failed to finish in time. Aborting.");
my_kill()
}
}
}
在某些方面,我的需求有点相似,pthread_timedjoin_np
只是出于性能原因我想避免创建新线程。
但我不知道该怎么做干净地在内核中。我认为可以通过在调用函数之前添加一个timer_list并在调用之后删除它来实现。如果达到超时,可能可以修改下一条指令的值$eip
,但这种方法非常肮脏、过度杀伤且不可移植,因此我想找到一个更干净的解决方案来实现同样的事情......
答案1
您在内核上有特定的函数来管理计时器,在您的情况下,您应该检查函数 mod_timer、setup_timer 和 del_timer 的超时。