Blob Blame History Raw
From: jbeulich@novell.com
Subject: allow number of guest devices to be configurable
Patch-mainline: obsolete

... and derive NR_DYNIRQS from this (rather than having a hard-coded
value).
Similarly, allow the number of simultaneous transmits in netback to be
configurable.

--- head.orig/arch/x86/include/mach-xen/asm/irq_vectors.h	2011-11-17 16:00:04.000000000 +0100
+++ head/arch/x86/include/mach-xen/asm/irq_vectors.h	2011-11-18 16:44:59.000000000 +0100
@@ -88,9 +88,9 @@ extern int nr_pirqs;
 
 #define DYNIRQ_BASE			(PIRQ_BASE + nr_pirqs)
 #ifdef CONFIG_SPARSE_IRQ
-#define NR_DYNIRQS			CPU_VECTOR_LIMIT
+#define NR_DYNIRQS			(CPU_VECTOR_LIMIT + CONFIG_XEN_NR_GUEST_DEVICES)
 #else
-#define NR_DYNIRQS			256
+#define NR_DYNIRQS			(64 + CONFIG_XEN_NR_GUEST_DEVICES)
 #endif
 
 #define NR_IRQS				(NR_PIRQS + NR_DYNIRQS)
--- head.orig/drivers/xen/Kconfig	2012-10-04 13:48:11.000000000 +0200
+++ head/drivers/xen/Kconfig	2012-02-17 14:38:14.000000000 +0100
@@ -96,6 +96,15 @@ config XEN_NETDEV_BACKEND
 	  network devices to other guests via a high-performance shared-memory
 	  interface.
 
+config XEN_NETDEV_TX_SHIFT
+	int "Maximum simultaneous transmit requests (as a power of 2)"
+	depends on XEN_NETDEV_BACKEND
+	range 5 15
+	default 8
+	help
+	  The maximum number transmits the driver can hold pending, expressed
+	  as the exponent of a power of 2.
+
 config XEN_NETDEV_PIPELINED_TRANSMITTER
 	bool "Pipelined transmitter (DANGEROUS)"
 	depends on XEN_NETDEV_BACKEND
@@ -235,6 +244,16 @@ config XEN_DISABLE_SERIAL
 	  Disable serial port drivers, allowing the Xen console driver
 	  to provide a serial console at ttyS0.
 
+config XEN_NR_GUEST_DEVICES
+	int "Number of guest devices"
+	range 0 4032 if 64BIT
+	range 0 960
+	default 256 if XEN_BACKEND
+	default 16
+	help
+	  Specify the total number of virtual devices (i.e. both frontend
+	  and backend) that you want the kernel to be able to service.
+
 choice
 	prompt "Xen version compatibility"
 	default XEN_COMPAT_030002_AND_LATER
--- head.orig/drivers/xen/core/evtchn.c	2012-10-04 13:48:08.000000000 +0200
+++ head/drivers/xen/core/evtchn.c	2013-03-25 16:28:13.000000000 +0100
@@ -1776,7 +1776,7 @@ EXPORT_SYMBOL_GPL(nr_pirqs);
 
 int __init arch_probe_nr_irqs(void)
 {
-	int nr = 256, nr_irqs_gsi;
+	int nr = 64 + CONFIG_XEN_NR_GUEST_DEVICES, nr_irqs_gsi;
 
 	if (is_initial_xendomain()) {
 		nr_irqs_gsi = NR_IRQS_LEGACY;
--- head.orig/drivers/xen/netback/netback.c	2013-06-13 12:16:06.000000000 +0200
+++ head/drivers/xen/netback/netback.c	2013-06-13 12:17:29.000000000 +0200
@@ -84,7 +84,7 @@ static DECLARE_TASKLET(net_rx_tasklet, n
 static struct timer_list net_timer;
 static struct timer_list netbk_tx_pending_timer;
 
-#define MAX_PENDING_REQS 256
+#define MAX_PENDING_REQS (1U << CONFIG_XEN_NETDEV_TX_SHIFT)
 
 /* Discriminate from any valid pending_idx value. */
 #define INVALID_PENDING_IDX 0xffff