* Schedule NAPI poll routine to be called if it is not already running. */ static inline void napi_schedule(struct napi_struct *n) { /* 判断是否可以调度NAPI */ if (napi_schedule_prep(n)) __napi_schedule(n); } 判断NAPI是否可以调度。如果NAPI没有被禁止,且不存在已被调度的NAPI, 则允许...
napi_schedule()的实现如下: static inline void napi_schedule(struct napi_struct *n) { if (napi_schedule_prep(n)) __napi_schedule(n); } napi_schedule_prep()先做一些检查工作:如果napi对象的状态为NAPI_STATE_DISABLE或已经是NAPI_STATE_SCHED,则不进行调度,如果没有设置NAPI_STATE_SCHED标记,则置上...
1. netif_rx_schedule(dev) 这个函数被中断服务程序调用,将设备的 POLL 方法添加到网络层次的 POLL 处理队列中去,排队并且准备接收数据包,在使用之前需要调用 netif_rx_reschedule_prep,并且返回的数为 1,并且触发一个 NET_RX_SOFTIRQ 的软中断通知网络层接收数据包。 2. netif_rx_schedule_prep(dev) 确定设备...
return IRQ_NONE; /* disable all interrupts and schedule the NAPI */ d_can_interrupts(priv, DISABLE_ALL_INTERRUPTS); napi_schedule(&priv->napi); return IRQ_HANDLED; } 其中的napi_schedule_prep()函数是为了判定现在是否已经进入了轮询模式。 static inline void napi_schedule(struct napi_struct *n)...
static inline void napi_schedule(struct napi_struct *n) { /* 判断是否可以调度NAPI */ if (napi_schedule_prep(n)) __napi_schedule(n); } 判断NAPI是否可以调度。如果NAPI没有被禁止,且不存在已被调度的NAPI, 则允许调度NAPI,因为同一时刻只允许有一个NAPI poll instance。
21 if (likely(napi_schedule_prep(&nic->napi))) { 22 e100_disable_irq(nic); 23 //将该网络设备加入到sd的poll_list中 24 __napi_schedule(&nic->napi); 25 } 26 27 return IRQ_HANDLED; 28 } 将设备对应的napi结构加入到当前cpu的softnet_data->poll_list中,并触发收包软中断; ...
if (likely(napi_schedule_prep(&adapter->napi))) { adapter->total_tx_bytes = 0; adapter->total_tx_packets = 0; adapter->total_rx_bytes = 0; adapter->total_rx_packets = 0; __napi_schedule(&adapter->napi); } else { /* this really should not happen! if it does it is basically...
static inline void napi_schedule(struct napi_struct *n) { /* 判断是否可以调度NAPI */ if (napi_schedule_prep(n)) __napi_schedule(n); } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 判断NAPI是否可以调度。如果NAPI没有被禁止,且不存在已被调度的NAPI, ...
调用napi_schedule(napi)函数将我们初始化好的napi对象注册到轮询列表中,并调度软中断。 关闭设备中断后,设备收到包后不再产生中断(或者内核不再响应中断),而只是将数据包放到DMA中。 napi_schedule()的实现如下: napi_schedule_prep()先做一些检查工作:如果napi对象的状态为NAPI_STATE_DISABLE或已经是NAPI_STATE_...
调用napi_schedule(napi)函数将我们初始化好的napi对象注册到轮询列表中,并调度软中断。 关闭设备中断后,设备收到包后不再产生中断(或者内核不再响应中断),而只是将数据包放到DMA中。 napi_schedule()的实现如下: napi_schedule_prep()先做一些检查工作:如果napi对象的状态为NAPI_STATE_DISABLE或已经是NAPI_STATE_...