From: Alexander Nyberg <alexn@telia.com>
To: Karsten Wiese <annabellesgarden@yahoo.de>
Cc: Ingo Molnar <mingo@elte.hu>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] CHECK_IRQ_PER_CPU() to avoid dead code in __do_IRQ()
Date: Mon, 8 Aug 2005 13:19:36 +0200 [thread overview]
Message-ID: <20050808111936.GA1393@localhost.localdomain> (raw)
In-Reply-To: <200508081250.05673.annabellesgarden@yahoo.de>
>
> IRQ_PER_CPU is not used by all architectures.
> This patch introduces the macros
> ARCH_HAS_IRQ_PER_CPU and CHECK_IRQ_PER_CPU() to avoid the generation of
> dead code in __do_IRQ().
>
> ARCH_HAS_IRQ_PER_CPU is defined by architectures using
> IRQ_PER_CPU in their
> include/asm_ARCH/irq.h
> file.
>
> Through grepping the tree I found the following
> architectures currently use IRQ_PER_CPU:
>
> cris, ia64, ppc, ppc64 and parisc.
>
There are many places where one could replace run-time tests with
#ifdef's but it makes reading more difficult (and in longer terms
maintainence). Have you benchmarked any workload that benefits
from this?
>
> diff -upr linux-2.6.13-rc6/include/asm-cris/irq.h linux-2.6.13/include/asm-cris/irq.h
> --- linux-2.6.13-rc6/include/asm-cris/irq.h 2005-08-08 11:46:10.000000000 +0200
> +++ linux-2.6.13/include/asm-cris/irq.h 2005-08-08 11:41:12.000000000 +0200
> @@ -1,6 +1,11 @@
> #ifndef _ASM_IRQ_H
> #define _ASM_IRQ_H
>
> +/*
> + * IRQ line status macro IRQ_PER_CPU is used
> + */
> +#define ARCH_HAS_IRQ_PER_CPU
> +
> #include <asm/arch/irq.h>
>
> extern __inline__ int irq_canonicalize(int irq)
> diff -upr linux-2.6.13-rc6/include/asm-ia64/irq.h linux-2.6.13/include/asm-ia64/irq.h
> --- linux-2.6.13-rc6/include/asm-ia64/irq.h 2005-03-02 08:38:33.000000000 +0100
> +++ linux-2.6.13/include/asm-ia64/irq.h 2005-08-06 18:06:53.000000000 +0200
> @@ -14,6 +14,11 @@
> #define NR_IRQS 256
> #define NR_IRQ_VECTORS NR_IRQS
>
> +/*
> + * IRQ line status macro IRQ_PER_CPU is used
> + */
> +#define ARCH_HAS_IRQ_PER_CPU
> +
> static __inline__ int
> irq_canonicalize (int irq)
> {
> diff -upr linux-2.6.13-rc6/include/asm-parisc/irq.h linux-2.6.13/include/asm-parisc/irq.h
> --- linux-2.6.13-rc6/include/asm-parisc/irq.h 2005-08-08 11:45:26.000000000 +0200
> +++ linux-2.6.13/include/asm-parisc/irq.h 2005-08-06 18:05:22.000000000 +0200
> @@ -26,6 +26,11 @@
>
> #define NR_IRQS (CPU_IRQ_MAX + 1)
>
> +/*
> + * IRQ line status macro IRQ_PER_CPU is used
> + */
> +#define ARCH_HAS_IRQ_PER_CPU
> +
> static __inline__ int irq_canonicalize(int irq)
> {
> return (irq == 2) ? 9 : irq;
> diff -upr linux-2.6.13-rc6/include/asm-ppc/irq.h linux-2.6.13/include/asm-ppc/irq.h
> --- linux-2.6.13-rc6/include/asm-ppc/irq.h 2005-08-08 11:46:10.000000000 +0200
> +++ linux-2.6.13/include/asm-ppc/irq.h 2005-08-08 11:41:14.000000000 +0200
> @@ -19,6 +19,11 @@
> #define IRQ_POLARITY_POSITIVE 0x2 /* high level or low->high edge */
> #define IRQ_POLARITY_NEGATIVE 0x0 /* low level or high->low edge */
>
> +/*
> + * IRQ line status macro IRQ_PER_CPU is used
> + */
> +#define ARCH_HAS_IRQ_PER_CPU
> +
> #if defined(CONFIG_40x)
> #include <asm/ibm4xx.h>
>
> diff -upr linux-2.6.13-rc6/include/asm-ppc64/irq.h linux-2.6.13/include/asm-ppc64/irq.h
> --- linux-2.6.13-rc6/include/asm-ppc64/irq.h 2005-03-02 08:38:33.000000000 +0100
> +++ linux-2.6.13/include/asm-ppc64/irq.h 2005-08-06 18:06:58.000000000 +0200
> @@ -33,6 +33,11 @@
> #define IRQ_POLARITY_POSITIVE 0x2 /* high level or low->high edge */
> #define IRQ_POLARITY_NEGATIVE 0x0 /* low level or high->low edge */
>
> +/*
> + * IRQ line status macro IRQ_PER_CPU is used
> + */
> +#define ARCH_HAS_IRQ_PER_CPU
> +
> #define get_irq_desc(irq) (&irq_desc[(irq)])
>
> /* Define a way to iterate across irqs. */
> diff -upr linux-2.6.13-rc6/include/linux/irq.h linux-2.6.13/include/linux/irq.h
> --- linux-2.6.13-rc6/include/linux/irq.h 2005-08-08 11:46:10.000000000 +0200
> +++ linux-2.6.13/include/linux/irq.h 2005-08-08 11:55:11.000000000 +0200
> @@ -32,7 +32,12 @@
> #define IRQ_WAITING 32 /* IRQ not yet seen - for autodetection */
> #define IRQ_LEVEL 64 /* IRQ level triggered */
> #define IRQ_MASKED 128 /* IRQ masked - shouldn't be seen again */
> -#define IRQ_PER_CPU 256 /* IRQ is per CPU */
> +#if defined(ARCH_HAS_IRQ_PER_CPU)
> +# define IRQ_PER_CPU 256 /* IRQ is per CPU */
> +# define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU)
> +#else
> +# define CHECK_IRQ_PER_CPU(var) 0
> +#endif
>
> /*
> * Interrupt controller descriptor. This is all we need
> diff -upr linux-2.6.13-rc6/kernel/irq/handle.c linux-2.6.13/kernel/irq/handle.c
> --- linux-2.6.13-rc6/kernel/irq/handle.c 2005-08-08 11:46:11.000000000 +0200
> +++ linux-2.6.13/kernel/irq/handle.c 2005-08-08 11:53:00.000000000 +0200
> @@ -111,7 +111,7 @@ fastcall unsigned int __do_IRQ(unsigned
> unsigned int status;
>
> kstat_this_cpu.irqs[irq]++;
> - if (desc->status & IRQ_PER_CPU) {
> + if (CHECK_IRQ_PER_CPU(desc->status)) {
> irqreturn_t action_ret;
>
> /*
next prev parent reply other threads:[~2005-08-08 11:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-08-08 10:50 [PATCH] CHECK_IRQ_PER_CPU() to avoid dead code in __do_IRQ() Karsten Wiese
2005-08-08 11:19 ` Alexander Nyberg [this message]
2005-08-08 15:36 ` Karsten Wiese
2005-08-08 15:51 ` Zachary Amsden
2005-08-09 14:10 ` Zwane Mwaikambo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050808111936.GA1393@localhost.localdomain \
--to=alexn@telia.com \
--cc=annabellesgarden@yahoo.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.