Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / arch / x86 / kernel / apic / vector.c
index 938108fbc39b76293de86c6a952a595edbe5fbb2..6cedd79145813cc792c891573ac03b3e18d9e529 100644 (file)
@@ -235,6 +235,34 @@ void clear_irq_vector(int irq, struct irq_cfg *cfg)
        raw_spin_unlock_irqrestore(&vector_lock, flags);
 }
 
+int __init arch_probe_nr_irqs(void)
+{
+       int nr;
+
+       if (nr_irqs > (NR_VECTORS * nr_cpu_ids))
+               nr_irqs = NR_VECTORS * nr_cpu_ids;
+
+       nr = (gsi_top + nr_legacy_irqs()) + 8 * nr_cpu_ids;
+#if defined(CONFIG_PCI_MSI) || defined(CONFIG_HT_IRQ)
+       /*
+        * for MSI and HT dyn irq
+        */
+       if (gsi_top <= NR_IRQS_LEGACY)
+               nr +=  8 * nr_cpu_ids;
+       else
+               nr += gsi_top * 16;
+#endif
+       if (nr < nr_irqs)
+               nr_irqs = nr;
+
+       return nr_legacy_irqs();
+}
+
+int __init arch_early_irq_init(void)
+{
+       return arch_early_ioapic_init();
+}
+
 static void __setup_vector_irq(int cpu)
 {
        /* Initialize vector_irq on a new cpu */
@@ -293,7 +321,7 @@ void setup_vector_irq(int cpu)
 
 int apic_retrigger_irq(struct irq_data *data)
 {
-       struct irq_cfg *cfg = data->chip_data;
+       struct irq_cfg *cfg = irqd_cfg(data);
        unsigned long flags;
        int cpu;
 
@@ -307,7 +335,7 @@ int apic_retrigger_irq(struct irq_data *data)
 
 void apic_ack_edge(struct irq_data *data)
 {
-       irq_complete_move(data->chip_data);
+       irq_complete_move(irqd_cfg(data));
        irq_move_irq(data);
        ack_APIC_irq();
 }
@@ -320,7 +348,7 @@ void apic_ack_edge(struct irq_data *data)
 int apic_set_affinity(struct irq_data *data, const struct cpumask *mask,
                      unsigned int *dest_id)
 {
-       struct irq_cfg *cfg = data->chip_data;
+       struct irq_cfg *cfg = irqd_cfg(data);
        unsigned int irq = data->irq;
        int err;