Merge tag 'perf-urgent-for-mingo-20161017' of git://git.kernel.org/pub/scm/linux...
[cascardo/linux.git] / drivers / irqchip / irq-gic-v3.c
index ede5672..9b81bd8 100644 (file)
@@ -495,6 +495,14 @@ static void gic_cpu_sys_reg_init(void)
        /* Set priority mask register */
        gic_write_pmr(DEFAULT_PMR_VALUE);
 
+       /*
+        * Some firmwares hand over to the kernel with the BPR changed from
+        * its reset value (and with a value large enough to prevent
+        * any pre-emptive interrupts from working at all). Writing a zero
+        * to BPR restores is reset value.
+        */
+       gic_write_bpr1(0);
+
        if (static_key_true(&supports_deactivate)) {
                /* EOI drops priority only (mode 1) */
                gic_write_ctlr(ICC_CTLR_EL1_EOImode_drop);
@@ -548,7 +556,7 @@ static int gic_starting_cpu(unsigned int cpu)
 static u16 gic_compute_target_list(int *base_cpu, const struct cpumask *mask,
                                   unsigned long cluster_id)
 {
-       int cpu = *base_cpu;
+       int next_cpu, cpu = *base_cpu;
        unsigned long mpidr = cpu_logical_map(cpu);
        u16 tlist = 0;
 
@@ -562,9 +570,10 @@ static u16 gic_compute_target_list(int *base_cpu, const struct cpumask *mask,
 
                tlist |= 1 << (mpidr & 0xf);
 
-               cpu = cpumask_next(cpu, mask);
-               if (cpu >= nr_cpu_ids)
+               next_cpu = cpumask_next(cpu, mask);
+               if (next_cpu >= nr_cpu_ids)
                        goto out;
+               cpu = next_cpu;
 
                mpidr = cpu_logical_map(cpu);
 
@@ -910,7 +919,6 @@ static int __init gic_init_bases(void __iomem *dist_base,
                                 u64 redist_stride,
                                 struct fwnode_handle *handle)
 {
-       struct device_node *node;
        u32 typer;
        int gic_irqs;
        int err;
@@ -951,10 +959,8 @@ static int __init gic_init_bases(void __iomem *dist_base,
 
        set_handle_irq(gic_handle_irq);
 
-       node = to_of_node(handle);
-       if (IS_ENABLED(CONFIG_ARM_GIC_V3_ITS) && gic_dist_supports_lpis() &&
-           node) /* Temp hack to prevent ITS init for ACPI */
-               its_init(node, &gic_data.rdists, gic_data.domain);
+       if (IS_ENABLED(CONFIG_ARM_GIC_V3_ITS) && gic_dist_supports_lpis())
+               its_init(handle, &gic_data.rdists, gic_data.domain);
 
        gic_smp_init();
        gic_dist_init();