Skip to content

Commit

Permalink
genirq: Sanitize irq_data accessors
Browse files Browse the repository at this point in the history
Get the data structure from the core and provide inline wrappers to
access the irq_data members.

Provide accessor inlines for irq_data as well.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Thomas Gleixner committed Oct 12, 2010
1 parent 4424718 commit f303a6d
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 4 deletions.
62 changes: 58 additions & 4 deletions include/linux/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ typedef void (*irq_flow_handler_t)(unsigned int irq,
#endif

struct msi_desc;
struct irq_2_iommu;

/**
* struct irq_data - per irq and irq chip data passed down to chip functions
Expand Down Expand Up @@ -332,11 +333,64 @@ extern int set_irq_data(unsigned int irq, void *data);
extern int set_irq_chip_data(unsigned int irq, void *data);
extern int set_irq_type(unsigned int irq, unsigned int type);
extern int set_irq_msi(unsigned int irq, struct msi_desc *entry);
extern struct irq_data *irq_get_irq_data(unsigned int irq);

#define get_irq_chip(irq) (irq_to_desc(irq)->irq_data.chip)
#define get_irq_chip_data(irq) (irq_to_desc(irq)->irq_data.chip_data)
#define get_irq_data(irq) (irq_to_desc(irq)->irq_data.handler_data)
#define get_irq_msi(irq) (irq_to_desc(irq)->irq_data.msi_desc)
static inline struct irq_chip *get_irq_chip(unsigned int irq)
{
struct irq_data *d = irq_get_irq_data(irq);
return d ? d->chip : NULL;
}

static inline struct irq_chip *irq_data_get_irq_chip(struct irq_data *d)
{
return d->chip;
}

static inline void *get_irq_chip_data(unsigned int irq)
{
struct irq_data *d = irq_get_irq_data(irq);
return d ? d->chip_data : NULL;
}

static inline void *irq_data_get_irq_chip_data(struct irq_data *d)
{
return d->chip_data;
}

static inline void *get_irq_data(unsigned int irq)
{
struct irq_data *d = irq_get_irq_data(irq);
return d ? d->handler_data : NULL;
}

static inline void *irq_data_get_irq_data(struct irq_data *d)
{
return d->handler_data;
}

static inline struct msi_desc *get_irq_msi(unsigned int irq)
{
struct irq_data *d = irq_get_irq_data(irq);
return d ? d->msi_desc : NULL;
}

static inline struct msi_desc *irq_data_get_msi(struct irq_data *d)
{
return d->msi_desc;
}

#ifdef CONFIG_INTR_REMAP
static inline struct irq_2_iommu *get_irq_iommu(unsigned int irq)
{
struct irq_data *d = irq_get_irq_data(irq);
return d ? d->irq_2_iommu : NULL;
}

static inline struct irq_2_iommu *irq_data_get_iommu(struct irq_data *d)
{
return d->irq_2_iommu;
}
#endif

#endif /* CONFIG_GENERIC_HARDIRQS */

Expand Down
8 changes: 8 additions & 0 deletions kernel/irq/chip.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,14 @@ int set_irq_chip_data(unsigned int irq, void *data)
}
EXPORT_SYMBOL(set_irq_chip_data);

struct irq_data *irq_get_irq_data(unsigned int irq)
{
struct irq_desc *desc = irq_to_desc(irq);

return desc ? &desc->irq_data : NULL;
}
EXPORT_SYMBOL_GPL(irq_get_irq_data);

/**
* set_irq_nested_thread - Set/Reset the IRQ_NESTED_THREAD flag of an irq
*
Expand Down

0 comments on commit f303a6d

Please sign in to comment.