我在linux中为ipsec开发模块。查看两种不同的情况,当代码从我的模块将被执行。
从进程上下文执行:应用程序产生一些流量通过网络传输,应用程序应该调用一些syscall来传输数据,然后进程切换到内核空间,数据包通过linux的网络子系统,在这里执行我的模块,并在向网卡提供任务后全部完成。所有这些步骤都是从进程上下文执行的,并且在任何时候调度程序都可以将进程从一个切换到另一个。如下是使用我的模块的第一个例子-来自流程上下文。
从softirq上下文执行:当网卡接收数据包时,它会产生硬件中断,这将“准备”适当的软run来运行。数据包通过linux的网络子系统(包括我的模块),直到有应用程序得到它。这些步骤是从softirq上下文执行的,只能被硬件中断所中断,而不能被调度程序工作所中断。
问题是:如何在模块中以编程方式确定要从哪个上下文模块执行?它可以是struct task_struct的一些元素,也可以是syscall或其他什么东西。我一个人找不到。
https://stackoverflow.com/questions/43891329
复制相似问题