Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq code updates from Thomas Gleixner: "The irq department proudly presents: - Another tree wide sweep of irq infrastructure abuse. Clear winner of the trainwreck engineering contest was: #include "../../../kernel/irq/settings.h" - Tree wide update of irq_set_affinity() callbacks which miss a cpu online check when picking a single cpu out of the affinity mask. - Tree wide consolidation of interrupt statistics. - Updates to the threaded interrupt infrastructure to allow explicit wakeup of the interrupt thread and a variant of synchronize_irq() which synchronizes only the hard interrupt handler. Both are needed to replace the homebrewn thread handling in the mmc/sdhci code. - New irq chip callbacks to allow proper support for GPIO based irqs. The GPIO based interrupts need to request/release GPIO resources from request/free_irq. - A few new ARM interrupt chips. No revolutionary new hardware, just differently wreckaged variations of the scheme. - Small improvments, cleanups and updates all over the place" I was hoping that that trainwreck engineering contest was a April Fools' joke. But no. * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (68 commits) irqchip: sun7i/sun6i: Disable NMI before registering the handler ARM: sun7i/sun6i: dts: Fix IRQ number for sun6i NMI controller ARM: sun7i/sun6i: irqchip: Update the documentation ARM: sun7i/sun6i: dts: Add NMI irqchip support ARM: sun7i/sun6i: irqchip: Add irqchip driver for NMI controller genirq: Export symbol no_action() arm: omap: Fix typo in ams-delta-fiq.c m68k: atari: Fix the last kernel_stat.h fallout irqchip: sun4i: Simplify sun4i_irq_ack irqchip: sun4i: Use handle_fasteoi_irq for all interrupts genirq: procfs: Make smp_affinity values go+r softirq: Add linux/irq.h to make it compile again m68k: amiga: Add linux/irq.h to make it compile again irqchip: sun4i: Don't ack IRQs > 0, fix acking of IRQ 0 irqchip: sun4i: Fix a comment about mask register initialization irqchip: sun4i: Fix irq 0 not working genirq: Add a new IRQCHIP_EOI_THREADED flag genirq: Document IRQCHIP_ONESHOT_SAFE flag ARM: sunxi: dt: Convert to the new irq controller compatibles irqchip: sunxi: Change compatibles ...
This commit is contained in:
@@ -364,7 +364,6 @@ static irqreturn_t smp_irq_move_cleanup_interrupt(int irq, void *dev_id)
|
||||
|
||||
static struct irqaction irq_move_irqaction = {
|
||||
.handler = smp_irq_move_cleanup_interrupt,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "irq_move"
|
||||
};
|
||||
|
||||
@@ -489,14 +488,13 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs)
|
||||
ia64_srlz_d();
|
||||
while (vector != IA64_SPURIOUS_INT_VECTOR) {
|
||||
int irq = local_vector_to_irq(vector);
|
||||
struct irq_desc *desc = irq_to_desc(irq);
|
||||
|
||||
if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) {
|
||||
smp_local_flush_tlb();
|
||||
kstat_incr_irqs_this_cpu(irq, desc);
|
||||
kstat_incr_irq_this_cpu(irq);
|
||||
} else if (unlikely(IS_RESCHEDULE(vector))) {
|
||||
scheduler_ipi();
|
||||
kstat_incr_irqs_this_cpu(irq, desc);
|
||||
kstat_incr_irq_this_cpu(irq);
|
||||
} else {
|
||||
ia64_setreg(_IA64_REG_CR_TPR, vector);
|
||||
ia64_srlz_d();
|
||||
@@ -549,13 +547,12 @@ void ia64_process_pending_intr(void)
|
||||
*/
|
||||
while (vector != IA64_SPURIOUS_INT_VECTOR) {
|
||||
int irq = local_vector_to_irq(vector);
|
||||
struct irq_desc *desc = irq_to_desc(irq);
|
||||
|
||||
if (unlikely(IS_LOCAL_TLB_FLUSH(vector))) {
|
||||
smp_local_flush_tlb();
|
||||
kstat_incr_irqs_this_cpu(irq, desc);
|
||||
kstat_incr_irq_this_cpu(irq);
|
||||
} else if (unlikely(IS_RESCHEDULE(vector))) {
|
||||
kstat_incr_irqs_this_cpu(irq, desc);
|
||||
kstat_incr_irq_this_cpu(irq);
|
||||
} else {
|
||||
struct pt_regs *old_regs = set_irq_regs(NULL);
|
||||
|
||||
@@ -602,7 +599,6 @@ static irqreturn_t dummy_handler (int irq, void *dev_id)
|
||||
|
||||
static struct irqaction ipi_irqaction = {
|
||||
.handler = handle_IPI,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "IPI"
|
||||
};
|
||||
|
||||
@@ -611,13 +607,11 @@ static struct irqaction ipi_irqaction = {
|
||||
*/
|
||||
static struct irqaction resched_irqaction = {
|
||||
.handler = dummy_handler,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "resched"
|
||||
};
|
||||
|
||||
static struct irqaction tlb_irqaction = {
|
||||
.handler = dummy_handler,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "tlb_flush"
|
||||
};
|
||||
|
||||
|
@@ -1772,38 +1772,32 @@ __setup("disable_cpe_poll", ia64_mca_disable_cpe_polling);
|
||||
|
||||
static struct irqaction cmci_irqaction = {
|
||||
.handler = ia64_mca_cmc_int_handler,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "cmc_hndlr"
|
||||
};
|
||||
|
||||
static struct irqaction cmcp_irqaction = {
|
||||
.handler = ia64_mca_cmc_int_caller,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "cmc_poll"
|
||||
};
|
||||
|
||||
static struct irqaction mca_rdzv_irqaction = {
|
||||
.handler = ia64_mca_rendez_int_handler,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "mca_rdzv"
|
||||
};
|
||||
|
||||
static struct irqaction mca_wkup_irqaction = {
|
||||
.handler = ia64_mca_wakeup_int_handler,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "mca_wkup"
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
static struct irqaction mca_cpe_irqaction = {
|
||||
.handler = ia64_mca_cpe_int_handler,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "cpe_hndlr"
|
||||
};
|
||||
|
||||
static struct irqaction mca_cpep_irqaction = {
|
||||
.handler = ia64_mca_cpe_int_caller,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "cpe_poll"
|
||||
};
|
||||
#endif /* CONFIG_ACPI */
|
||||
|
@@ -17,12 +17,9 @@ static int ia64_set_msi_irq_affinity(struct irq_data *idata,
|
||||
{
|
||||
struct msi_msg msg;
|
||||
u32 addr, data;
|
||||
int cpu = first_cpu(*cpu_mask);
|
||||
int cpu = cpumask_first_and(cpu_mask, cpu_online_mask);
|
||||
unsigned int irq = idata->irq;
|
||||
|
||||
if (!cpu_online(cpu))
|
||||
return -1;
|
||||
|
||||
if (irq_prepare_move(irq, cpu))
|
||||
return -1;
|
||||
|
||||
@@ -139,10 +136,7 @@ static int dmar_msi_set_affinity(struct irq_data *data,
|
||||
unsigned int irq = data->irq;
|
||||
struct irq_cfg *cfg = irq_cfg + irq;
|
||||
struct msi_msg msg;
|
||||
int cpu = cpumask_first(mask);
|
||||
|
||||
if (!cpu_online(cpu))
|
||||
return -1;
|
||||
int cpu = cpumask_first_and(mask, cpu_online_mask);
|
||||
|
||||
if (irq_prepare_move(irq, cpu))
|
||||
return -1;
|
||||
|
@@ -6387,7 +6387,6 @@ pfm_flush_pmds(struct task_struct *task, pfm_context_t *ctx)
|
||||
|
||||
static struct irqaction perfmon_irqaction = {
|
||||
.handler = pfm_interrupt_handler,
|
||||
.flags = IRQF_DISABLED,
|
||||
.name = "perfmon"
|
||||
};
|
||||
|
||||
|
@@ -380,7 +380,7 @@ static cycle_t itc_get_cycles(struct clocksource *cs)
|
||||
|
||||
static struct irqaction timer_irqaction = {
|
||||
.handler = timer_interrupt,
|
||||
.flags = IRQF_DISABLED | IRQF_IRQPOLL,
|
||||
.flags = IRQF_IRQPOLL,
|
||||
.name = "timer"
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user