diff options
Diffstat (limited to 'include/linux/irq.h')
| -rw-r--r-- | include/linux/irq.h | 35 | 
1 files changed, 26 insertions, 9 deletions
| diff --git a/include/linux/irq.h b/include/linux/irq.h index 505308253d23..c3eb89606c2b 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -151,7 +151,9 @@ struct irq_common_data {  #endif  	void			*handler_data;  	struct msi_desc		*msi_desc; +#ifdef CONFIG_SMP  	cpumask_var_t		affinity; +#endif  #ifdef CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK  	cpumask_var_t		effective_affinity;  #endif @@ -879,21 +881,34 @@ static inline int irq_data_get_node(struct irq_data *d)  	return irq_common_data_get_node(d->common);  } -static inline struct cpumask *irq_get_affinity_mask(int irq) +static inline +const struct cpumask *irq_data_get_affinity_mask(struct irq_data *d)  { -	struct irq_data *d = irq_get_irq_data(irq); +#ifdef CONFIG_SMP +	return d->common->affinity; +#else +	return cpumask_of(0); +#endif +} -	return d ? d->common->affinity : NULL; +static inline void irq_data_update_affinity(struct irq_data *d, +					    const struct cpumask *m) +{ +#ifdef CONFIG_SMP +	cpumask_copy(d->common->affinity, m); +#endif  } -static inline struct cpumask *irq_data_get_affinity_mask(struct irq_data *d) +static inline const struct cpumask *irq_get_affinity_mask(int irq)  { -	return d->common->affinity; +	struct irq_data *d = irq_get_irq_data(irq); + +	return d ? irq_data_get_affinity_mask(d) : NULL;  }  #ifdef CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK  static inline -struct cpumask *irq_data_get_effective_affinity_mask(struct irq_data *d) +const struct cpumask *irq_data_get_effective_affinity_mask(struct irq_data *d)  {  	return d->common->effective_affinity;  } @@ -908,13 +923,14 @@ static inline void irq_data_update_effective_affinity(struct irq_data *d,  {  }  static inline -struct cpumask *irq_data_get_effective_affinity_mask(struct irq_data *d) +const struct cpumask *irq_data_get_effective_affinity_mask(struct irq_data *d)  { -	return d->common->affinity; +	return irq_data_get_affinity_mask(d);  }  #endif -static inline struct cpumask *irq_get_effective_affinity_mask(unsigned int irq) +static inline +const struct cpumask *irq_get_effective_affinity_mask(unsigned int irq)  {  	struct irq_data *d = irq_get_irq_data(irq); @@ -1121,6 +1137,7 @@ int irq_gc_set_wake(struct irq_data *d, unsigned int on);  /* Setup functions for irq_chip_generic */  int irq_map_generic_chip(struct irq_domain *d, unsigned int virq,  			 irq_hw_number_t hw_irq); +void irq_unmap_generic_chip(struct irq_domain *d, unsigned int virq);  struct irq_chip_generic *  irq_alloc_generic_chip(const char *name, int nr_ct, unsigned int irq_base,  		       void __iomem *reg_base, irq_flow_handler_t handler); |