89 lines
3.1 KiB
Plaintext
89 lines
3.1 KiB
Plaintext
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-2011-02-08.orig/arch/x86/include/mach-xen/asm/irq_vectors.h 2011-02-15 17:50:13.000000000 +0100
|
|
+++ head-2011-02-08/arch/x86/include/mach-xen/asm/irq_vectors.h 2011-02-16 08:29:39.000000000 +0100
|
|
@@ -97,9 +97,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-2011-02-08.orig/drivers/xen/Kconfig 2011-02-03 14:49:25.000000000 +0100
|
|
+++ head-2011-02-08/drivers/xen/Kconfig 2010-11-26 13:38:08.000000000 +0100
|
|
@@ -94,6 +94,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 16
|
|
+ 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
|
|
@@ -305,6 +314,16 @@ config XEN_SYSFS
|
|
help
|
|
Xen hypervisor attributes will show up under /sys/hypervisor/.
|
|
|
|
+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-2011-02-08.orig/drivers/xen/core/evtchn.c 2011-02-02 15:09:52.000000000 +0100
|
|
+++ head-2011-02-08/drivers/xen/core/evtchn.c 2011-02-16 08:29:29.000000000 +0100
|
|
@@ -1766,7 +1766,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-2011-02-08.orig/drivers/xen/netback/netback.c 2011-02-09 16:06:37.000000000 +0100
|
|
+++ head-2011-02-08/drivers/xen/netback/netback.c 2011-01-03 13:29:58.000000000 +0100
|
|
@@ -74,7 +74,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)
|
|
|
|
static struct sk_buff_head rx_queue;
|
|
|
|
@@ -1263,6 +1263,7 @@ static void net_tx_action(unsigned long
|
|
net_tx_action_dealloc();
|
|
|
|
mop = tx_map_ops;
|
|
+ BUILD_BUG_ON(MAX_SKB_FRAGS >= MAX_PENDING_REQS);
|
|
while (((NR_PENDING_REQS + MAX_SKB_FRAGS) < MAX_PENDING_REQS) &&
|
|
!list_empty(&net_schedule_list)) {
|
|
/* Get a netif from the list with work to do. */
|