static inline void irq_settings_set_noprobe(struct irq_desc *desc) { #只是或上一个_IRQ_NOPROBE flag desc->status_use_accessors |= _IRQ_NOPROBE; } void irq_enable(struct irq_desc *desc) { irq_state_clr_disabled(desc); #正常情况下回调用chip来使能irq if (desc->irq_data.chip->irq_...
irq_set_percpu_devid(irq); irq_set_chip_and_handler(irq,&gic_chip,---设置irq对应的irq_desc成员handle_irq为handle_percpu_devid_irqhandle_percpu_devid_irq); set_irq_flags(irq, IRQF_VALID|IRQF_NOAUTOEN); }else{---大于等于32的HW id irq_set_chip_and_handler(irq,&gic_chip,---设置i...
set_bit(i, allocated_irqs); irq_insert_desc(i, desc); }returnarch_early_irq_init(); } init_IRQ函数 void__init init_IRQ(void) {inti; #ifdef CONFIG_KGDBif(kgdb_early_setup)return;#endiffor(i =0; i < NR_IRQS; i++) irq_set_noprobe(i); arch_init_irq(); #ifdef CONFIG_KGDBi...
int__initearly_irq_init(void){……initcnt=arch_probe_nr_irqs();---体系结构相关的代码来决定预先分配的中断描述符的个数if(initcnt>nr_irqs)---initcnt是需要在初始化的时候预分配的IRQ的个数nr_irqs=initcnt;---nr_irqs是当前系统中IRQnumber的最大值for(i=0;i<initcnt;i++){---预先分配init...
b、该中断描述符允许自动探测(不能设定IRQ_NOPROBE) (2)如果满足上面的条件,那么该中断描述符属于备选描述符。设定其internal state为IRQS_AUTODETECT | IRQS_WAITING。IRQS_AUTODETECT表示本IRQ正处于自动探测中。 (3)在等待过程中,系统仍然允许,各种中断依然会触发。在各种high level irq event handler中,总会有...
b、该中断描述符允许自动探测(不能设定IRQ_NOPROBE) (2)如果满足上面的条件,那么该中断描述符属于备选描述符。设定其internal state为IRQS_AUTODETECT | IRQS_WAITING。IRQS_AUTODETECT表示本IRQ正处于自动探测中。 (3)在等待过程中,系统仍然允许,各种中断依然会触发。在各种high level irq event handler中,总会有...
irq_settings_set_noprobe(desc); irq_settings_set_norequest(desc); irq_settings_set_nothread(desc); irq_startup(desc, true); } out: irq_put_desc_busunlock(desc, flags); } 理解这个函数的关键是在is_chained这个参数。这个参数是用在interrupt级联的情况下。例如中断控制器B级联到中断控制器A的第...
+ set_irq_flags(irq, IRQF_VALID); +#else + irq_set_noprobe(irq); +#endif return 0; } +static struct irq_domain_ops max8998_irq_domain_ops = { + .map = max8998_irq_domain_map, +}; + int max8998_irq_init(struct max8998_dev *max8998) ...
irq_settings_set_noprobe(desc); irq_settings_set_norequest(desc); irq_settings_set_nothread(desc); irq_startup(desc, true); } out: irq_put_desc_busunlock(desc, flags); } 理解这个函数的关键是在is_chained这个参数。这个参数是用在interrupt级联的情况下。例如中断控制器B级联到中断控制器A的第...
irq 39, desc: ef238c00, depth: 0, count: 0, unhandled: 0 ->handle_irq(): c016ec60, handle_bad_irq+0x0/0x288 ->irq_data.chip(): c0b47ff8, 0xc0b47ff8 ->action(): eebe2380 ->action->handler(): bf018000, int_handler+0x0/0x28 IRQ_NOPROBE set unexpected ...