Re: [PATCH 0/8] tip related: radix tree for spareseirq and logical flat clean up

From: Eric W. Biederman
Date: Sat Feb 13 2010 - 19:30:23 EST


Yinghai Lu <yinghai@xxxxxxxxxx> 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@xxxxxxxxxx>
>
> 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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/