When I updated ice driver version from 1.8.3 to 1.13.7, I found that IRQ affinity setting was not changed. I analyzed the driver code and then I checked that the irq_set_affinity_hint function for IRQ setting was removed. It seems that this part was removed for some rea...
走到of_irq_to_resource就脱离了DT过程,函数调用流程图如下: A : 找到匹配的irq_domain,irq_domain会在中断控制器注册的时候加入; B : 判断irq_domain是否是hierarchy,不同的类型需要不同的操作,从图中可以看出虽然调用函数不一样,但是具体要执行的步骤是一样的: 搜索hwirq是否已经被映射到virq,如果是直接返回...
0) | __irq_set_affinity() { 0) 0.438 us | irq_to_desc(); 0) 0.667 us | _raw_spin_lock_irqsave(); 0) | irq_set_affinity_locked() { 0) | irq_do_set_affinity() { 0) | msi_domain_set_affinity() { 0) | its_set_affinity() { 0) 0.625 us | its_dec_lpi_count.isra...
61 #ifdef CONFIG_SMP 62 const struct cpumask *affinity_hint; 63 struct irq_affinity_notify *affinity_notify; 64 #ifdef CONFIG_GENERIC_PENDING_IRQ 65 cpumask_var_t pending_mask; 66 #endif 67 #endif 68 unsigned long threads_oneshot; 69 atomic_t threads_active; 70 wait_queue_head_t wait...
const struct cpumask *affinity_hint;---和irq affinity相关,后续单独文档描述 struct irq_affinity_notify *affinity_notify; #ifdef CONFIG_GENERIC_PENDING_IRQ cpumask_var_t pending_mask; #endif #endif unsigned long threads_oneshot; ---(9) atomic...
cpumask_var_t affinity;---和irq affinity相关 }; 中断有两种形态,一种就是直接通过signal相连,用电平或者边缘触发。另外一种是基于消息的,被称为MSI (Message Signaled Interrupts)。msi_desc是MSI类型的中断相关,这里不再描述。 node成员用来保存中断描述符的内存位于哪一个memory node上。 对于支持NUMA(Non Un...
const struct cpumask *affinity_hint;---和irq affinity相关,后续单独文档描述 struct irq_affinity_notify *affinity_notify; #ifdef CONFIG_GENERIC_PENDING_IRQ cpumask_var_t pending_mask; #endif #endif unsigned long threads_oneshot; ---(9) atomic...
The system is now repeatedly logging /usr/sbin/irqbalance: irq NN affinity_hint and banned cpus conflict In /etc/sysconfig/irqbalance I have set IRQBALANCE_ARGS=--hintpolicy=exact Looking at Redhat bugzilla, this seems to be a know issue. Has anyone seen it and is...
hint++; virq= __irq_alloc_descs(-1, hint, cnt, node, THIS_MODULE,affinity);if(virq <=0&& hint >1) { virq= __irq_alloc_descs(-1,1, cnt, node, THIS_MODULE,affinity); } }returnvirq; } 通过上述的函数分配virq,也就是softirq,分配一个Irq_data结构,然后将virq设置到irq_data结构...
intirq_domain_alloc_descs(int virq,unsigned int cnt,irq_hw_number_t hwirq,int node,conststruct cpumask*affinity){unsigned int hint;if(virq>=0){virq=__irq_alloc_descs(virq,virq,cnt,node,THIS_MODULE,affinity);}else{hint=hwirq%nr_irqs;if(hint==0)hint++;virq=__irq_alloc_descs...