linux kernel 工程师
全部博文(99)
发布时间:2014-02-10 11:33:54
当需要对本设备进行poll的时候,调用__napi_schedule 将设备的napi 的poll_list 挂在每cpu变量 softnet_data的poll_list下面。在net_rx_action函数中, 会轮讯softnet_data的poll_list,即调用设备的napi->poll 函数。/* Called with irq disabled */static inline void ____napi_schedule(struct softnet_data *sd.........【阅读全文】
发布时间:2014-02-10 10:40:22
NAPI(New API) 将中断与轮讯结合在一起,避免频繁的中断造成的系统开销。基本思路是:中断到来--->关闭中断--->调度softirq--->在softirq里面多设备进行轮询,直到没有包为止--->开启中断/* * Structure for NAPI scheduling similar to tasklet but with weighting */struct napi_struct { /* T.........【阅读全文】
发布时间:2014-02-08 16:14:33
handle_edge_irq,handle_level_irq等函数会调用handle_irq_event,我们来看一下它的流程handle_irq_event->handle_irq_event_percpu->action->handlerirqreturn_t handle_irq_event(struct irq_desc *desc){ struct irqaction *action = desc->action; irqreturn_t ret; desc->istate &= ~IRQS.........【阅读全文】
发布时间:2014-02-08 16:04:24
linux中断(2):中断注册之__irq_set_handler 文中提到 __irq_set_handler作为中断注册的第一个层次,通过这个函数为desc->handle_irq 安排一个处理函数。通常安排的处理函数有handle_edge_irq,handle_level_irq等 假如安排的处理函数是 handle_level_irq,我们看一下处理流程 /** *&.........【阅读全文】
发布时间:2014-02-08 15:37:08
在x86里面irq的入口函数是 do_irq() 在arm里面irq的入口函数是 asm_do_irq() unsigned int __irq_entry do_IRQ(struct pt_regs *regs){struct pt_regs *old_regs = set_irq_regs(regs);/* high bit used in ret_from_ code */unsigned vector = ~regs->orig_ax;unsigned irq;irq_enter().........【阅读全文】