From: BitKeeper B. <ri...@su...> - 2004-12-15 19:10:54
|
ChangeSet 1.1620, 2004/11/26 18:22:08+00:00, cl...@ar... Increase number of IRQs to 512. hardirq.h | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ mach-xen/irq_vectors.h | 4 +-- 2 files changed, 63 insertions(+), 2 deletions(-) diff -Nru a/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/hardirq.h b/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/hardirq.h --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/hardirq.h 2004-12-15 14:10:46 -05:00 @@ -0,0 +1,61 @@ +#ifndef __ASM_HARDIRQ_H +#define __ASM_HARDIRQ_H + +#include <linux/config.h> +#include <linux/threads.h> +#include <linux/irq.h> + +typedef struct { + unsigned int __softirq_pending; + unsigned long idle_timestamp; + unsigned int __nmi_count; /* arch dependent */ + unsigned int apic_timer_irqs; /* arch dependent */ +} ____cacheline_aligned irq_cpustat_t; + +#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ + +/* + * We put the hardirq and softirq counter into the preemption + * counter. The bitmask has the following meaning: + * + * - bits 0-7 are the preemption count (max preemption depth: 256) + * - bits 8-15 are the softirq count (max # of softirqs: 256) + * - bits 16-24 are the hardirq count (max # of hardirqs: 512) + * + * - ( bit 26 is the PREEMPT_ACTIVE flag. ) + * + * PREEMPT_MASK: 0x000000ff + * SOFTIRQ_MASK: 0x0000ff00 + * HARDIRQ_MASK: 0x01ff0000 + */ + +#define PREEMPT_BITS 8 +#define SOFTIRQ_BITS 8 +#define HARDIRQ_BITS 9 + +#define PREEMPT_SHIFT 0 +#define SOFTIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS) +#define HARDIRQ_SHIFT (SOFTIRQ_SHIFT + SOFTIRQ_BITS) + +/* + * The hardirq mask has to be large enough to have + * space for potentially all IRQ sources in the system + * nesting on a single CPU: + */ +#if (1 << HARDIRQ_BITS) < NR_IRQS +# error HARDIRQ_BITS is too low! +#endif + +#define nmi_enter() (irq_enter()) +#define nmi_exit() (preempt_count() -= HARDIRQ_OFFSET) + +#define irq_enter() (preempt_count() += HARDIRQ_OFFSET) +#define irq_exit() \ +do { \ + preempt_count() -= IRQ_EXIT_OFFSET; \ + if (!in_interrupt() && softirq_pending(smp_processor_id())) \ + do_softirq(); \ + preempt_enable_no_resched(); \ +} while (0) + +#endif /* __ASM_HARDIRQ_H */ diff -Nru a/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h b/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h --- a/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h 2004-12-15 14:10:46 -05:00 +++ b/linux-2.6.9-xen-sparse/include/asm-xen/asm-i386/mach-xen/irq_vectors.h 2004-12-15 14:10:46 -05:00 @@ -126,10 +126,10 @@ */ #define PIRQ_BASE 0 -#define NR_PIRQS 128 +#define NR_PIRQS 256 #define DYNIRQ_BASE (PIRQ_BASE + NR_PIRQS) -#define NR_DYNIRQS 128 +#define NR_DYNIRQS 256 #define NR_IRQS (NR_PIRQS + NR_DYNIRQS) #define NR_IRQ_VECTORS NR_IRQS |