c - 如果在驱动程序中看不到预防性抢占,则认为是关键代码
问题描述
在用于以太网的 realTek r8169 驱动程序中,它具有轮询中断的轮询功能,这是新 API(NAPI)
从 poll 函数调用的 rtl_rx
poll 或 rtl_rx 都会做任何事情来禁用内核抢占,除了保护从dma_map_page
类似
struct page *data;
data = alloc_pages_node(node, GFP_KERNEL, get_order(R8169_RX_BUF_SIZE));
if (!data)
return NULL;
mapping = dma_map_page(d, data, 0, R8169_RX_BUF_SIZE, DMA_FROM_DEVICE);
...
...
代码
dma_sync_single_for_cpu(d, addr, pkt_size, DMA_FROM_DEVICE);
....
dma_sync_single_for_device(d, addr, pkt_size, DMA_FROM_DEVICE);
我的印象是,即使在 NAPI 轮询中断或中断处理程序中,我们也需要禁用抢占。
并且驱动程序的代码中没有任何地方包含像preempt_disable
get_cpu 或信号量这样的调用。所以我想知道内核驱动程序中的关键代码是什么?任何人都可以告诉我这一点并且可以中断被抢占吗?或一般在内核中
或者任何人都可以指出我驱动程序中的特定代码
解决方案
推荐阅读
- python - 如何在 bash 脚本中使用 Python 的 input() 函数?
- java - 我不能将一个 ArrayList 与一个片段中的捆绑包放入另一个片段中
- javascript - 加载 API 时出现 SyntaxError
- r - 修改 R 中的省略号
- android - Retrofit2/GSON 无法转换为对象
- reactjs - 如何在一个 onClick 事件中调用 React 钩子函数并将数据传递到 Redux 存储?
- c# - 如何显示其余交易类型的总和
- crystal-reports - 我正在尝试在 Windows Server 2016 上部署 Web 应用程序;它给了我水晶报表的错误(13.0.21)
- django - 数据迁移在导入时触发查询
- selenium - Edge浏览器中的无效选择器异常,而在chrome浏览器中可以找到相同的元素而没有任何异常