【发布时间】:2011-04-17 23:12:03
【问题描述】:
熟悉网络设备驱动程序的人都知道,内核和驱动程序之间的接口已更改为使用 NAPI(新 API)。在这个范例中,轮询函数与 napi_struct 相关联,它是必须由设备驱动程序分配的新结构。无论如何,我有一个旧驱动程序,没有时间/意愿将其转换为 NAPI。由于内核已被修改为考虑 NAPI,它们使用默认函数“process_backlog”(/net/core/dev.c)来处理 pre-NAPI 功能。这个函数仍然在每个数据包的基础上在中断上下文中调用(与轮询队列的 NAPI 不同,因此每次都不需要中断)。我需要重写这个函数,但我的问题是,与设备驱动程序分配和创建的 NAPI 轮询函数不同,process_backlog 在启动时与每个 CPU 的输入队列相关联。当我加载模块时,我可以使用
覆盖该方法 struct softnet_data *queue, backup;
queue = &__get_cpu_var(softnet_data);
backup = *queue;
queue->backlog.poll = my_process_backlog;
这里的问题是这只会覆盖初始化模块的 CPU 上的队列。有什么方法可以循环遍历模块上下文中的所有 CPU 吗?我觉得必须有某种方法可以做到这一点。
干杯
【问题讨论】:
标签: c network-programming module linux-kernel