Skip to content

Commit

Permalink
irq: add irq_desc_without_new
Browse files Browse the repository at this point in the history
add an irq_desc accessor that will not allocate any sparse entry
but returns failure if there's no entry present.

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Yinghai Lu authored and Ingo Molnar committed Oct 16, 2008
1 parent 7f95ec9 commit 9059d8f
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 4 deletions.
13 changes: 13 additions & 0 deletions include/linux/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -191,10 +191,23 @@ struct irq_desc {
} ____cacheline_internodealigned_in_smp;

extern struct irq_desc *irq_to_desc(unsigned int irq);
extern struct irq_desc *__irq_to_desc(unsigned int irq);

#ifndef CONFIG_HAVE_SPARSE_IRQ

#ifndef CONFIG_HAVE_DYN_ARRAY
/* could be removed if we get rid of all irq_desc reference */
extern struct irq_desc irq_desc[NR_IRQS];
#else
extern struct irq_desc *irq_desc;
#endif

#else

extern struct irq_desc *sparse_irqs;

#endif

#define kstat_irqs_this_cpu(DESC) \
((DESC)->kstat_irqs[smp_processor_id()])

Expand Down
28 changes: 24 additions & 4 deletions kernel/irq/handle.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,6 @@ static void init_kstat_irqs(struct irq_desc *desc, int nr_desc, int nr)
}
}


static void __init init_work(void *data)
{
struct dyn_array *da = data;
Expand Down Expand Up @@ -149,9 +148,27 @@ static int __init parse_nr_irq_desc(char *arg)

early_param("nr_irq_desc", parse_nr_irq_desc);

static struct irq_desc *sparse_irqs;
struct irq_desc *sparse_irqs;
DEFINE_DYN_ARRAY(sparse_irqs, sizeof(struct irq_desc), nr_irq_desc, PAGE_SIZE, init_work);

struct irq_desc *__irq_to_desc(unsigned int irq)
{
struct irq_desc *desc;

BUG_ON(irq == -1U);

desc = &sparse_irqs[0];
while (desc) {
if (desc->irq == irq)
return desc;

if (desc->irq == -1U)
return NULL;

desc = desc->next;
}
return NULL;
}
struct irq_desc *irq_to_desc(unsigned int irq)
{
struct irq_desc *desc, *desc_pri;
Expand Down Expand Up @@ -208,8 +225,7 @@ struct irq_desc *irq_to_desc(unsigned int irq)
return desc;
}
#else

static struct irq_desc *irq_desc;
struct irq_desc *irq_desc;
DEFINE_DYN_ARRAY(irq_desc, sizeof(struct irq_desc), nr_irqs, PAGE_SIZE, init_work);

#endif
Expand Down Expand Up @@ -239,6 +255,10 @@ struct irq_desc *irq_to_desc(unsigned int irq)

return NULL;
}
struct irq_desc *__irq_to_desc(unsigned int irq)
{
return irq_to_desc(irq);
}
#endif

/*
Expand Down

0 comments on commit 9059d8f

Please sign in to comment.