我想知道 linux 函数预取是如何工作的
它被定义为
#ifndef ARCH_HAS_PREFETCH
#define prefetch(x) __builtin_prefetch(x)
#endif
所以在驱动程序中可以找到
rx_buf = page_address(tp->Rx_databuff[entry]);//Rx_databuff[] are Page type array
dma_sync_single_for_cpu(d, addr, pkt_size, DMA_FROM_DEVICE);
prefetch(rx_buf);
skb_copy_to_linear_data(skb, rx_buf, pkt_size);
所以 rtl 8139 设备有 256 个 Rx 描述符。dma_sync_single_for_cpu 的 addr 参数是我认为可以从设备读取数据并将数据保存在一些临时内存中(这个内存区域是什么?),所以prefetch
我认为只是读取该内存区域并从该内存区域填充 rx_buf。
我希望我能看到__builtin_prefetch(x)
定义但我找不到它所以预取调用发生了什么任何人都可以告诉我这个