瀏覽代碼

s390: use SPARSE_IRQ

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>
Sebastian Ott 9 年之前
父節點
當前提交
bb98f396f1
共有 3 個文件被更改,包括 7 次插入18 次删除
  1. 1 10
      arch/s390/Kconfig
  2. 2 5
      arch/s390/include/asm/irq.h
  3. 4 3
      arch/s390/kernel/irq.c

+ 1 - 10
arch/s390/Kconfig

@@ -163,6 +163,7 @@ config S390
 	select NO_BOOTMEM
 	select NO_BOOTMEM
 	select OLD_SIGACTION
 	select OLD_SIGACTION
 	select OLD_SIGSUSPEND3
 	select OLD_SIGSUSPEND3
+	select SPARSE_IRQ
 	select SYSCTL_EXCEPTION_TRACE
 	select SYSCTL_EXCEPTION_TRACE
 	select TTY
 	select TTY
 	select VIRT_CPU_ACCOUNTING
 	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 allows you to specify the maximum number of PCI functions which
 	  this kernel will support.
 	  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"
 source "drivers/pci/Kconfig"
 
 
 endif	# PCI
 endif	# PCI

+ 2 - 5
arch/s390/include/asm/irq.h

@@ -7,11 +7,8 @@
 
 
 #define NR_IRQS_BASE	3
 #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 */
 /* External interruption codes */
 #define EXT_IRQ_INTERRUPT_KEY	0x0040
 #define EXT_IRQ_INTERRUPT_KEY	0x0040

+ 4 - 3
arch/s390/kernel/irq.c

@@ -127,9 +127,7 @@ int show_interrupts(struct seq_file *p, void *v)
 			seq_printf(p, "CPU%d       ", cpu);
 			seq_printf(p, "CPU%d       ", cpu);
 		seq_putc(p, '\n');
 		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);
 		seq_printf(p, "%s: ", irqclass_main_desc[index].name);
 		irq = irqclass_main_desc[index].irq;
 		irq = irqclass_main_desc[index].irq;
 		for_each_online_cpu(cpu)
 		for_each_online_cpu(cpu)
@@ -137,6 +135,9 @@ int show_interrupts(struct seq_file *p, void *v)
 		seq_putc(p, '\n');
 		seq_putc(p, '\n');
 		goto out;
 		goto out;
 	}
 	}
+	if (index > NR_IRQS_BASE)
+		goto out;
+
 	for (index = 0; index < NR_ARCH_IRQS; index++) {
 	for (index = 0; index < NR_ARCH_IRQS; index++) {
 		seq_printf(p, "%s: ", irqclass_sub_desc[index].name);
 		seq_printf(p, "%s: ", irqclass_sub_desc[index].name);
 		irq = irqclass_sub_desc[index].irq;
 		irq = irqclass_sub_desc[index].irq;