cregit-Linux how code gets into the kernel

Release 4.7 arch/x86/kernel/irqinit.c

Directory: arch/x86/kernel
#include <linux/linkage.h>
#include <linux/errno.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/timex.h>
#include <linux/random.h>
#include <linux/kprobes.h>
#include <linux/init.h>
#include <linux/kernel_stat.h>
#include <linux/device.h>
#include <linux/bitops.h>
#include <linux/acpi.h>
#include <linux/io.h>
#include <linux/delay.h>

#include <linux/atomic.h>
#include <asm/timer.h>
#include <asm/hw_irq.h>
#include <asm/pgtable.h>
#include <asm/desc.h>
#include <asm/apic.h>
#include <asm/setup.h>
#include <asm/i8259.h>
#include <asm/traps.h>
#include <asm/prom.h>

/*
 * ISA PIC or low IO-APIC triggered (INTA-cycle or APIC) interrupts:
 * (these are usually mapped to vectors 0x30-0x3f)
 */

/*
 * The IO-APIC gives us many more interrupt sources. Most of these
 * are unused but an SMP system is supposed to have enough memory ...
 * sometimes (mostly wrt. hw bugs) we get corrupted vectors all
 * across the spectrum, so we really want to be prepared to get all
 * of these. Plus, more powerful systems might have more than 64
 * IO-APIC registers.
 *
 * (these are usually mapped into the 0x30-0xff vector range)
 */

/*
 * IRQ2 is cascade interrupt to second interrupt controller
 */

static struct irqaction irq2 = {
	.handler = no_action,
	.name = "cascade",
	.flags = IRQF_NO_THREAD,
};

DEFINE_PER_CPU(vector_irq_t, vector_irq) = {
	[0 ... NR_VECTORS - 1] = VECTOR_UNUSED,
};


int vector_used_by_percpu_irq(unsigned int vector) { int cpu; for_each_online_cpu(cpu) { if (!IS_ERR_OR_NULL(per_cpu(vector_irq, cpu)[vector])) return 1; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
yinghai luyinghai lu3690.00%150.00%
thomas gleixnerthomas gleixner410.00%150.00%
Total40100.00%2100.00%


void __init init_ISA_irqs(void) { struct irq_chip *chip = legacy_pic->chip; int i; #if defined(CONFIG_X86_64) || defined(CONFIG_X86_LOCAL_APIC) init_bsp_APIC(); #endif legacy_pic->init(0); for (i = 0; i < nr_legacy_irqs(); i++) irq_set_chip_and_handler(i, chip, handle_level_irq); }

Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git2740.91%110.00%
pekka j enbergpekka j enberg1319.70%110.00%
thomas gleixnerthomas gleixner1015.15%110.00%
andi kleenandi kleen710.61%110.00%
jacob panjacob pan34.55%110.00%
ingo molnaringo molnar23.03%110.00%
yinghai luyinghai lu23.03%220.00%
maciej w. rozyckimaciej w. rozycki11.52%110.00%
jiang liujiang liu11.52%110.00%
Total66100.00%10100.00%


void __init init_IRQ(void) { int i; /* * On cpu 0, Assign ISA_IRQ_VECTOR(irq) to IRQ 0..15. * If these IRQ's are handled by legacy interrupt-controllers like PIC, * then this configuration will likely be static after the boot. If * these IRQ's are handled by more mordern controllers like IO-APIC, * then this vector space can be freed and re-used dynamically as the * irq's migrate etc. */ for (i = 0; i < nr_legacy_irqs(); i++) per_cpu(vector_irq, 0)[ISA_IRQ_VECTOR(i)] = irq_to_desc(i); x86_init.irqs.intr_init(); }

Contributors

PersonTokensPropCommitsCommitProp
suresh siddhasuresh siddha2854.90%114.29%
thomas gleixnerthomas gleixner1325.49%342.86%
glauber de oliveira costaglauber de oliveira costa59.80%114.29%
brian gerstbrian gerst47.84%114.29%
jiang liujiang liu11.96%114.29%
Total51100.00%7100.00%


static void __init smp_intr_init(void) { #ifdef CONFIG_SMP /* * The reschedule interrupt is a CPU-to-CPU reschedule-helper * IPI, driven by wakeup. */ alloc_intr_gate(RESCHEDULE_VECTOR, reschedule_interrupt); /* IPI for generic function call */ alloc_intr_gate(CALL_FUNCTION_VECTOR, call_function_interrupt); /* IPI for generic single function call */ alloc_intr_gate(CALL_FUNCTION_SINGLE_VECTOR, call_function_single_interrupt); /* Low priority IPI to cleanup after moving an irq */ set_intr_gate(IRQ_MOVE_CLEANUP_VECTOR, irq_move_cleanup_interrupt); set_bit(IRQ_MOVE_CLEANUP_VECTOR, used_vectors); /* IPI used for rebooting/stopping */ alloc_intr_gate(REBOOT_VECTOR, reboot_interrupt); #endif /* CONFIG_SMP */ }

Contributors

PersonTokensPropCommitsCommitProp
cyrill gorcunovcyrill gorcunov2438.71%111.11%
yinghai luyinghai lu1727.42%333.33%
andi kleenandi kleen1727.42%222.22%
glauber de oliveira costaglauber de oliveira costa23.23%111.11%
ingo molnaringo molnar11.61%111.11%
pekka j enbergpekka j enberg11.61%111.11%
Total62100.00%9100.00%


static void __init apic_intr_init(void) { smp_intr_init(); #ifdef CONFIG_X86_THERMAL_VECTOR alloc_intr_gate(THERMAL_APIC_VECTOR, thermal_interrupt); #endif #ifdef CONFIG_X86_MCE_THRESHOLD alloc_intr_gate(THRESHOLD_APIC_VECTOR, threshold_interrupt); #endif #ifdef CONFIG_X86_MCE_AMD alloc_intr_gate(DEFERRED_ERROR_VECTOR, deferred_error_interrupt); #endif #ifdef CONFIG_X86_LOCAL_APIC /* self generated IPI for local APIC timer */ alloc_intr_gate(LOCAL_TIMER_VECTOR, apic_timer_interrupt); /* IPI for X86 platform specific use */ alloc_intr_gate(X86_PLATFORM_IPI_VECTOR, x86_platform_ipi); #ifdef CONFIG_HAVE_KVM /* IPI for KVM to deliver posted interrupt */ alloc_intr_gate(POSTED_INTR_VECTOR, kvm_posted_intr_ipi); /* IPI for KVM to deliver interrupt to wake up tasks */ alloc_intr_gate(POSTED_INTR_WAKEUP_VECTOR, kvm_posted_intr_wakeup_ipi); #endif /* IPI vectors for APIC spurious and error interrupts */ alloc_intr_gate(SPURIOUS_APIC_VECTOR, spurious_interrupt); alloc_intr_gate(ERROR_APIC_VECTOR, error_interrupt); /* IRQ work interrupts: */ # ifdef CONFIG_IRQ_WORK alloc_intr_gate(IRQ_WORK_VECTOR, irq_work_interrupt); # endif #endif }

Contributors

PersonTokensPropCommitsCommitProp
cyrill gorcunovcyrill gorcunov3227.12%15.26%
yang zhangyang zhang1311.02%15.26%
aravind gopalakrishnanaravind gopalakrishnan1210.17%15.26%
glauber de oliveira costaglauber de oliveira costa119.32%15.26%
dimitri sivanichdimitri sivanich86.78%210.53%
feng wufeng wu86.78%15.26%
zwane mwaikambozwane mwaikambo65.08%15.26%
jacob shinjacob shin65.08%15.26%
peter zijlstrapeter zijlstra43.39%15.26%
pekka j enbergpekka j enberg43.39%15.26%
andi kleenandi kleen43.39%210.53%
h. peter anvinh. peter anvin32.54%15.26%
alan mayeralan mayer21.69%15.26%
jan beulichjan beulich21.69%15.26%
hidehiro kawaihidehiro kawai10.85%15.26%
ingo molnaringo molnar10.85%15.26%
yinghai luyinghai lu10.85%15.26%
Total118100.00%19100.00%


void __init native_init_IRQ(void) { int i; /* Execute any quirks before the call gates are initialised: */ x86_init.irqs.pre_vector_init(); apic_intr_init(); /* * Cover the whole vector space, no vector can escape * us. (some of these will be overridden and become * 'special' SMP interrupts) */ i = FIRST_EXTERNAL_VECTOR; #ifndef CONFIG_X86_LOCAL_APIC #define first_system_vector NR_VECTORS #endif for_each_clear_bit_from(i, used_vectors, first_system_vector) { /* IA32_SYSCALL_VECTOR could be used in trap_init already. */ set_intr_gate(i, irq_entries_start + 8 * (i - FIRST_EXTERNAL_VECTOR)); } #ifdef CONFIG_X86_LOCAL_APIC for_each_clear_bit_from(i, used_vectors, NR_VECTORS) set_intr_gate(i, spurious_interrupt); #endif if (!acpi_ioapic && !of_ioapic && nr_legacy_irqs()) setup_irq(2, &irq2); #ifdef CONFIG_X86_32 irq_ctx_init(smp_processor_id()); #endif }

Contributors

PersonTokensPropCommitsCommitProp
jan beulichjan beulich3026.79%16.25%
glauber de oliveira costaglauber de oliveira costa1816.07%16.25%
cyrill gorcunovcyrill gorcunov1311.61%16.25%
pekka j enbergpekka j enberg1210.71%212.50%
akinobu mitaakinobu mita76.25%16.25%
denys vlasenkodenys vlasenko65.36%16.25%
thomas gleixnerthomas gleixner54.46%16.25%
yinghai luyinghai lu43.57%16.25%
andi kleenandi kleen43.57%16.25%
andy shevchenkoandy shevchenko32.68%16.25%
andrew mortonandrew morton32.68%16.25%
sebastian andrzej siewiorsebastian andrzej siewior32.68%16.25%
james bottomleyjames bottomley21.79%16.25%
mikael petterssonmikael pettersson10.89%16.25%
pre-gitpre-git10.89%16.25%
Total112100.00%16100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
cyrill gorcunovcyrill gorcunov8715.24%11.47%
yinghai luyinghai lu7813.66%68.82%
pre-gitpre-git6511.38%22.94%
andi kleenandi kleen407.01%57.35%
thomas gleixnerthomas gleixner386.65%710.29%
glauber de oliveira costaglauber de oliveira costa366.30%22.94%
jan beulichjan beulich325.60%11.47%
pekka j enbergpekka j enberg305.25%57.35%
suresh siddhasuresh siddha295.08%11.47%
yang zhangyang zhang132.28%11.47%
aravind gopalakrishnanaravind gopalakrishnan122.10%11.47%
jaswinder singh rajputjaswinder singh rajput91.58%22.94%
feng wufeng wu81.40%11.47%
ingo molnaringo molnar81.40%45.88%
dimitri sivanichdimitri sivanich81.40%22.94%
akinobu mitaakinobu mita71.23%11.47%
sebastian andrzej siewiorsebastian andrzej siewior61.05%11.47%
jacob shinjacob shin61.05%11.47%
zwane mwaikambozwane mwaikambo61.05%11.47%
denys vlasenkodenys vlasenko61.05%11.47%
linus torvaldslinus torvalds50.88%22.94%
james bottomleyjames bottomley40.70%22.94%
peter zijlstrapeter zijlstra40.70%11.47%
brian gerstbrian gerst40.70%11.47%
andrew mortonandrew morton40.70%22.94%
h. peter anvinh. peter anvin30.53%11.47%
jacob panjacob pan30.53%11.47%
adrian bunkadrian bunk30.53%11.47%
andy shevchenkoandy shevchenko30.53%11.47%
len brownlen brown20.35%11.47%
alan mayeralan mayer20.35%11.47%
pavel machekpavel machek20.35%11.47%
jiang liujiang liu20.35%11.47%
arun sharmaarun sharma10.18%11.47%
kay sieverskay sievers10.18%11.47%
hidehiro kawaihidehiro kawai10.18%11.47%
maciej w. rozyckimaciej w. rozycki10.18%11.47%
paul jimenezpaul jimenez10.18%11.47%
mikael petterssonmikael pettersson10.18%11.47%
Total571100.00%68100.00%
Directory: arch/x86/kernel
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}