|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] CONFIG_SPARSE_IRQ breaks single VCPU domain 0 between xe
On Mon, 2010-03-01 at 09:41 +0000, Ian Campbell wrote:
>
> Regardless of the mechanism for detecting number of hardware
> interrupts
> required I think we need a mechanism to cause some extra interrupts to
> be available for VIRQ and backend use. I think previously we just been
> lucky that the core code overestimated the number of h/w interrupt
> sources so we got a few free ones for our purposes. It looks like the
> upstream x86 guys are doing some work to make interrupts be more
> dynamically allocated (the radix tree irq_desc stuff) which looks like
> it would be very useful for us once it lands. In 2.6.18 we explicitly
> left space for a number of dynamic IRQs which seems like a reasonable
> approach in the interim, I'll cook up a patch.
How about this vs. xen/xen/dom0/apic-next:
The following changes since commit dc23f2c13cc3c0080af806b318cf63850778c4c2:
Jeremy Fitzhardinge (1):
xen/apic: add missing header
are available in the git repository at:
git://xenbits.xensource.com/people/ianc/linux-2.6.git for-jeremy/apic
Ian Campbell (1):
xen: allow some overhead in IRQ space for dynamic IRQs
arch/x86/include/asm/irq_vectors.h | 14 +++++++++++---
arch/x86/kernel/apic/io_apic.c | 4 ++++
arch/x86/xen/enlighten.c | 4 ++++
3 files changed, 19 insertions(+), 3 deletions(-)
---
>From 6d4a9168207ade237098a401270959ecc0bdd1e9 Mon Sep 17 00:00:00 2001
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Mon, 1 Mar 2010 11:21:15 +0000
Subject: [PATCH] xen: allow some overhead in IRQ space for dynamic IRQs
such as VIRQs and backend event channels.
This is an interim solution until x86 interrupts become totally dynamic.
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
arch/x86/include/asm/irq_vectors.h | 14 +++++++++++---
arch/x86/kernel/apic/io_apic.c | 4 ++++
arch/x86/xen/enlighten.c | 4 ++++
3 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/arch/x86/include/asm/irq_vectors.h
b/arch/x86/include/asm/irq_vectors.h
index 5b21f0e..db2aef4 100644
--- a/arch/x86/include/asm/irq_vectors.h
+++ b/arch/x86/include/asm/irq_vectors.h
@@ -157,6 +157,14 @@ static inline int invalid_vm86_irq(int irq)
#define CPU_VECTOR_LIMIT ( 8 * NR_CPUS )
#define IO_APIC_VECTOR_LIMIT ( 32 * MAX_IO_APICS )
+#ifndef __ASSEMBLY__
+# if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_SPARSE_IRQ)
+extern int nr_dynamic_irqs;
+# else
+# define NR_DYNAMIC_IRQS 256
+# endif
+#endif
+
#ifdef CONFIG_X86_IO_APIC
# ifdef CONFIG_SPARSE_IRQ
# define NR_IRQS \
@@ -165,13 +173,13 @@ static inline int invalid_vm86_irq(int irq)
(NR_VECTORS + IO_APIC_VECTOR_LIMIT))
# else
# if NR_CPUS < MAX_IO_APICS
-# define NR_IRQS (NR_VECTORS + 4*CPU_VECTOR_LIMIT)
+# define NR_IRQS (NR_VECTORS + 4*CPU_VECTOR_LIMIT) +
NR_DYNAMIC_IRQS
# else
-# define NR_IRQS (NR_VECTORS + IO_APIC_VECTOR_LIMIT)
+# define NR_IRQS (NR_VECTORS + IO_APIC_VECTOR_LIMIT) +
NR_DYNAMIC_IRQS
# endif
# endif
#else /* !CONFIG_X86_IO_APIC: */
-# define NR_IRQS NR_IRQS_LEGACY
+# define NR_IRQS NR_IRQS_LEGACY + NR_DYNAMIC_IRQS
#endif
#endif /* _ASM_X86_IRQ_VECTORS_H */
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index c074c1b..3ea627d 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -3869,6 +3869,8 @@ int get_nr_irqs_gsi(void)
}
#ifdef CONFIG_SPARSE_IRQ
+int nr_dynamic_irqs;
+
int __init arch_probe_nr_irqs(void)
{
int nr;
@@ -3886,6 +3888,8 @@ int __init arch_probe_nr_irqs(void)
if (nr < nr_irqs)
nr_irqs = nr;
+ nr_irqs += nr_dynamic_irqs;
+
return 0;
}
#endif
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 9dea797..421e3ee 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -986,6 +986,10 @@ asmlinkage void __init xen_start_kernel(void)
pv_apic_ops = xen_apic_ops;
pv_mmu_ops = xen_mmu_ops;
+#ifdef CONFIG_SPARSE_IRQ
+ nr_dynamic_irqs += 256;
+#endif
+
xen_init_irq_ops();
xen_init_cpuid_mask();
--
1.5.6.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|