s390: use SPARSE_IRQ
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Thu, 2 Jun 2016 12:57:17 +0000 (14:57 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 13 Jun 2016 13:58:24 +0000 (15:58 +0200)
Use dynamically allocated irq descriptors on s390 which allows
us to get rid of the s390 specific config option PCI_NR_MSI and
exploit more MSI interrupts. Also the size of the kernel image
is reduced by 131K (using performance_defconfig).

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/Kconfig
arch/s390/include/asm/irq.h
arch/s390/kernel/irq.c

index a8c259059adf0e7b6af3587d59d2d370e0b0cd5d..3529a285dda816c1e93f4db28ef86e5aaee17541 100644 (file)
@@ -163,6 +163,7 @@ config S390
        select NO_BOOTMEM
        select OLD_SIGACTION
        select OLD_SIGSUSPEND3
+       select SPARSE_IRQ
        select SYSCTL_EXCEPTION_TRACE
        select TTY
        select VIRT_CPU_ACCOUNTING
@@ -605,16 +606,6 @@ config PCI_NR_FUNCTIONS
          This allows you to specify the maximum number of PCI functions which
          this kernel will support.
 
-config PCI_NR_MSI
-       int "Maximum number of MSI interrupts (64-32768)"
-       range 64 32768
-       default "256"
-       help
-         This defines the number of virtual interrupts the kernel will
-         provide for MSI interrupts. If you configure your system to have
-         too few drivers will fail to allocate MSI interrupts for all
-         PCI devices.
-
 source "drivers/pci/Kconfig"
 
 endif  # PCI
index f97b055de76a9f24248e1ee738deeb5c2ddb8494..70c9bce766f56ef621ddcbdf9999c1c9a3b0594e 100644 (file)
@@ -7,11 +7,8 @@
 
 #define NR_IRQS_BASE   3
 
-#ifdef CONFIG_PCI_NR_MSI
-# define NR_IRQS       (NR_IRQS_BASE + CONFIG_PCI_NR_MSI)
-#else
-# define NR_IRQS       NR_IRQS_BASE
-#endif
+#define NR_IRQS        NR_IRQS_BASE
+#define NR_IRQS_LEGACY NR_IRQS_BASE
 
 /* External interruption codes */
 #define EXT_IRQ_INTERRUPT_KEY  0x0040
index c373a1d41d104157ce7ad7dc14ca1884a90ddc8d..285d6561076d2edd780ab788ceccc000cc2c46ea 100644 (file)
@@ -127,9 +127,7 @@ int show_interrupts(struct seq_file *p, void *v)
                        seq_printf(p, "CPU%d       ", cpu);
                seq_putc(p, '\n');
        }
-       if (index < NR_IRQS) {
-               if (index >= NR_IRQS_BASE)
-                       goto out;
+       if (index < NR_IRQS_BASE) {
                seq_printf(p, "%s: ", irqclass_main_desc[index].name);
                irq = irqclass_main_desc[index].irq;
                for_each_online_cpu(cpu)
@@ -137,6 +135,9 @@ int show_interrupts(struct seq_file *p, void *v)
                seq_putc(p, '\n');
                goto out;
        }
+       if (index > NR_IRQS_BASE)
+               goto out;
+
        for (index = 0; index < NR_ARCH_IRQS; index++) {
                seq_printf(p, "%s: ", irqclass_sub_desc[index].name);
                irq = irqclass_sub_desc[index].irq;