[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <m1sk94mzg0.fsf@fess.ebiederm.org>
Date: Sat, 13 Feb 2010 16:30:07 -0800
From: ebiederm@...ssion.com (Eric W. Biederman)
To: Yinghai Lu <yinghai@...nel.org>
Cc: Rusty Russell <rusty@...tcorp.com.au>, Ingo Molnar <mingo@...e.hu>,
Thomas Gleixner <tglx@...utronix.de>,
"H. Peter Anvin" <hpa@...or.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Suresh Siddha <suresh.b.siddha@...el.com>,
linux-kernel@...r.kernel.org, Jeremy Fitzhardinge <jeremy@...p.org>
Subject: Re: [PATCH 0/8] tip related: radix tree for spareseirq and logical flat clean up
Yinghai Lu <yinghai@...nel.org> writes:
>
> Subject: [PATCH] x86: use vector_desc instead of vector_irq
>
> Eric pointed out that radix tree version of irq_to_desc will magnify delay on the path
> of handle_irq.
> use vector_desc to reduce the calling of irq_to_desc.
>
> next step: need to change all ack, mask, umask, eoi for all irq_chip to take irq_desc
>
> -v2: irq should be unsigned in 32bit handle_irq according to Eric
> also reset vector_desc for lguest in setup_irq
>
> Signed-off-by: Yinghai Lu <yinghai@...nel.org>
>
> Index: linux-2.6/arch/x86/kernel/irq_32.c
> ===================================================================
> --- linux-2.6.orig/arch/x86/kernel/irq_32.c
> +++ linux-2.6/arch/x86/kernel/irq_32.c
> @@ -76,7 +76,7 @@ static void call_on_stack(void *func, vo
> }
>
> static inline int
> -execute_on_irq_stack(int overflow, struct irq_desc *desc, int irq)
> +execute_on_irq_stack(int overflow, struct irq_desc *desc)
> {
> union irq_ctx *curctx, *irqctx;
> u32 *isp, arg1, arg2;
> @@ -189,24 +189,22 @@ asmlinkage void do_softirq(void)
This looks like it will fail to build here.
Don't you need to update the assembly to use desc->irq instead
of the now removed irq parameter?
>
> #else
> static inline int
> -execute_on_irq_stack(int overflow, struct irq_desc *desc, int irq) { return 0; }
> +execute_on_irq_stack(int overflow, struct irq_desc *desc) { return 0; }
> #endif
>
> -bool handle_irq(unsigned irq, struct pt_regs *regs)
> +bool handle_irq(struct irq_desc *desc, struct pt_regs *regs)
> {
> - struct irq_desc *desc;
> int overflow;
>
> overflow = check_stack_overflow();
>
> - desc = irq_to_desc(irq);
> if (unlikely(!desc))
> return false;
>
> - if (!execute_on_irq_stack(overflow, desc, irq)) {
> + if (!execute_on_irq_stack(overflow, desc)) {
> if (unlikely(overflow))
> print_stack_overflow();
> - desc->handle_irq(irq, desc);
> + desc->handle_irq(desc->irq, desc);
> }
>
> return true;
Eric
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists