Re: [PATCH] sparseirq: make some func to be used with genirq

From: Ingo Molnar
Date: Thu Jan 08 2009 - 07:07:00 EST



(Matt Cc:-ed)

Matt, does this look good to you? The point of this cleanup would be to
make desc->timer_rand_state depend on hardirq (the presence of irq_desc[])
- not sparseirq (which does not make much sense).

Ingo

* Yinghai Lu <yinghai@xxxxxxxxxx> wrote:

>
> Impact: clean up
>
> Ingo suggested to change some ifdef from SPARSE_IRQ to GENERIC_HARDIRQS
> so we could some #ifdef later if all arch support genirq
>
> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
>
> ---
> drivers/char/random.c | 2 +-
> drivers/pci/intr_remapping.c | 2 +-
> include/linux/irq.h | 6 ++----
> include/linux/kernel_stat.h | 6 +++---
> kernel/irq/handle.c | 7 ++++---
> 5 files changed, 11 insertions(+), 12 deletions(-)
>
> Index: linux-2.6/drivers/char/random.c
> ===================================================================
> --- linux-2.6.orig/drivers/char/random.c
> +++ linux-2.6/drivers/char/random.c
> @@ -558,7 +558,7 @@ struct timer_rand_state {
> unsigned dont_count_entropy:1;
> };
>
> -#ifndef CONFIG_SPARSE_IRQ
> +#ifndef CONFIG_GENERIC_HARDIRQS
>
> static struct timer_rand_state *irq_timer_state[NR_IRQS];
>
> Index: linux-2.6/drivers/pci/intr_remapping.c
> ===================================================================
> --- linux-2.6.orig/drivers/pci/intr_remapping.c
> +++ linux-2.6/drivers/pci/intr_remapping.c
> @@ -20,7 +20,7 @@ struct irq_2_iommu {
> u8 irte_mask;
> };
>
> -#ifdef CONFIG_SPARSE_IRQ
> +#ifdef CONFIG_GENERIC_HARDIRQS
> static struct irq_2_iommu *get_one_free_irq_2_iommu(int cpu)
> {
> struct irq_2_iommu *iommu;
> Index: linux-2.6/include/linux/irq.h
> ===================================================================
> --- linux-2.6.orig/include/linux/irq.h
> +++ linux-2.6/include/linux/irq.h
> @@ -160,12 +160,10 @@ struct irq_2_iommu;
> */
> struct irq_desc {
> unsigned int irq;
> -#ifdef CONFIG_SPARSE_IRQ
> struct timer_rand_state *timer_rand_state;
> unsigned int *kstat_irqs;
> -# ifdef CONFIG_INTR_REMAP
> +#ifdef CONFIG_INTR_REMAP
> struct irq_2_iommu *irq_2_iommu;
> -# endif
> #endif
> irq_flow_handler_t handle_irq;
> struct irq_chip *chip;
> @@ -202,13 +200,13 @@ extern void arch_free_chip_data(struct i
> extern struct irq_desc irq_desc[NR_IRQS];
> #else /* CONFIG_SPARSE_IRQ */
> extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu);
> +#endif /* CONFIG_SPARSE_IRQ */
>
> #define kstat_irqs_this_cpu(DESC) \
> ((DESC)->kstat_irqs[smp_processor_id()])
> #define kstat_incr_irqs_this_cpu(irqno, DESC) \
> ((DESC)->kstat_irqs[smp_processor_id()]++)
>
> -#endif /* CONFIG_SPARSE_IRQ */
>
> extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu);
>
> Index: linux-2.6/include/linux/kernel_stat.h
> ===================================================================
> --- linux-2.6.orig/include/linux/kernel_stat.h
> +++ linux-2.6/include/linux/kernel_stat.h
> @@ -28,7 +28,7 @@ struct cpu_usage_stat {
>
> struct kernel_stat {
> struct cpu_usage_stat cpustat;
> -#ifndef CONFIG_SPARSE_IRQ
> +#ifndef CONFIG_GENERIC_HARDIRQS
> unsigned int irqs[NR_IRQS];
> #endif
> };
> @@ -41,7 +41,7 @@ DECLARE_PER_CPU(struct kernel_stat, ksta
>
> extern unsigned long long nr_context_switches(void);
>
> -#ifndef CONFIG_SPARSE_IRQ
> +#ifndef CONFIG_GENERIC_HARDIRQS
> #define kstat_irqs_this_cpu(irq) \
> (kstat_this_cpu.irqs[irq])
>
> @@ -55,7 +55,7 @@ static inline void kstat_incr_irqs_this_
> #endif
>
>
> -#ifndef CONFIG_SPARSE_IRQ
> +#ifndef CONFIG_GENERIC_HARDIRQS
> static inline unsigned int kstat_irqs_cpu(unsigned int irq, int cpu)
> {
> return kstat_cpu(cpu).irqs[irq];
> Index: linux-2.6/kernel/irq/handle.c
> ===================================================================
> --- linux-2.6.orig/kernel/irq/handle.c
> +++ linux-2.6/kernel/irq/handle.c
> @@ -213,6 +213,7 @@ struct irq_desc irq_desc[NR_IRQS] __cach
> }
> };
>
> +static unsigned int kstat_irqs_all[NR_IRQS][NR_CPUS];
> int __init early_irq_init(void)
> {
> struct irq_desc *desc;
> @@ -222,8 +223,10 @@ int __init early_irq_init(void)
> desc = irq_desc;
> count = ARRAY_SIZE(irq_desc);
>
> - for (i = 0; i < count; i++)
> + for (i = 0; i < count; i++) {
> desc[i].irq = i;
> + desc[i].kstat_irqs = kstat_irqs_all[i];
> + }
>
> return arch_early_irq_init();
> }
> @@ -451,12 +454,10 @@ void early_init_irq_lock_class(void)
> }
> }
>
> -#ifdef CONFIG_SPARSE_IRQ
> unsigned int kstat_irqs_cpu(unsigned int irq, int cpu)
> {
> struct irq_desc *desc = irq_to_desc(irq);
> return desc ? desc->kstat_irqs[cpu] : 0;
> }
> -#endif
> EXPORT_SYMBOL(kstat_irqs_cpu);
>
--
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/