如何查看当前中断绑核情况
static int __init proc_interrupts_init(void)
proc_create("interrupts", 0, NULL, &proc_interrupts_operations);
/\
||
\/
static const struct file_operations proc_interrupts_operations = {
.open = interrupts_open,
.read = seq_read,
.llseek = seq_lseek,
.release = seq_release,
};
interrupts_open
=>static int interrupts_open(struct inode *inode, struct file *filp)
return seq_open(filp, &int_seq_ops);
/\
||
\/
static const struct seq_operations int_seq_ops = {
.start = int_seq_start,
.next = int_seq_next,
.stop = int_seq_stop,
.show = show_interrupts
};
int show_interrupts(struct seq_file *p, void *v)
/* print header */
if (i == 0) {
seq_printf(p, "%*s", prec + 8, "");
for_each_online_cpu(j)
seq_printf(p, "CPU%-8d", j);
seq_putc(p, '\n');
}
for_each_online_cpu(j)
any_count |= kstat_irqs_cpu(i, j);
=>unsigned int kstat_irqs_cpu(unsigned int irq, int cpu)
struct irq_desc *desc = irq_to_desc(irq);
return desc ? desc->kstat_irqs[cpu] : 0;
中断绑核处理
static int setup_affinity(unsigned int irq, struct irq_desc *desc)
desc->chip->set_affinity(irq, desc->affinity);//mpic->hc_irq.set_affinity = mpic_set_affinity;
=>int mpic_set_affinity(unsigned int irq, const struct cpumask *cpumask)//核心思想是公平从头开始分配
struct mpic *mpic = mpic_from_irq(irq);
unsigned int src = mpic_irq_to_hw(irq);
if (mpic->flags & MPIC_SINGLE_DEST_CPU)
int cpuid = irq_choose_cpu(cpumask);
=>static int irq_choose_cpu(const cpumask_t *mask)
if (cpumask_equal(mask, cpu_all_mask))
/* Round-robin distribution... */
do_round_robin:
while (!cpu_online(irq_rover)) {
if (++irq_rover >= NR_CPUS)
irq_rover = 0;
}
cpuid = irq_rover;
do {
if (++irq_rover >= NR_CPUS)
irq_rover = 0;
} while (!cpu_online(irq_rover));
else {
cpuid = cpumask_first_and(mask, cpu_online_mask);
if (cpuid >= nr_cpu_ids)
goto do_round_robin;
}
return get_hard_smp_processor_id(cpuid);
mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid);//绑定哪个核则开哪个核的掩码
一个关于Linux中断的问题:硬件处理,初始化和中断处理
http://www.elecfans.com/d/725543.html
Intel 80x86 Linux Kernel Interrupt(中断)、Interrupt Priority、Interrupt nesting、Prohibit Things Whthin CPU In The Interrupt Off State
https://www.cnblogs.com/LittleHann/p/4104598.html
Linux 中断详解
https://blog.csdn.net/tiangwan2011/article/details/7891818
ARM+Linux中断系统详细分析
https://blog.csdn.net/luteresa/article/details/68061906
ldd3学习之七:中断处理 博客好好学习
http://blog.chinaunix.net/uid-24708340-id-3035617.html