gpt4 book ai didi

linux - 如何在 softirq 上下文中运行 hrtimer 处理程序?

转载 作者:太空狗 更新时间:2023-10-29 12:05:55 28 4
gpt4 key购买 nike

我找到了这个关于 hrtimer 的教程: http://www.ibm.com/developerworks/linux/library/l-timers-list/

我相信它使用的方式将在 hardirq 上下文中运行回调处理程序,对吧?但它也说“一个有趣的方面是能够定义回调函数的执行上下文(例如在 softirq 或 hardiirq 上下文中)

我检查了 hrtimer.h 文件,但它确实不那么直观。有谁知道如何在 softirq 上下文中运行它?在 hardirq 中运行是否类似?

谢谢,

最佳答案

此信息是关于旧内核的 - 在最近的版本中,此功能已被删除以降低代码复杂性并避免错误。现在 hrtimer 始终在禁用 IRQ 的 hardirq 上下文中运行。

一种可能的方法是使用 tasklet_hrtimer

#include <linux/interrupt.h>

struct tasklet_hrtimer mytimer;

enum hrtimer_restart callback(struct hrtimer *t) {
struct tasklet_hrtimer *mytime=container_of(t,struct tasklet_hrtimer,timer);

...
}

...
tasklet_hrtimer_init(&mytimer,callback,clock,mode);
tasklet_hrtimer_start(&mytimer,time,mode);
...

在上面的示例中,您应该将 clockmodetime 替换为适当的值。

如果您想将数据传递给您的回调,那么您必须将 tasklet_hrtimer 变量嵌入到您的某些结构中,并使用 container_of 技巧来获取您的数据。

不是很明显,您的结构将包含一个 tasklet_hrtimer,它将包含一个 hrtimer 结构。当您获得指向最内层元素的指针并且您知道它与父元素有固定的偏移量时,您就可以到达父元素。

关于linux - 如何在 softirq 上下文中运行 hrtimer 处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com