forked from luck/tmp_suning_uos_patched
genirq: Implement irq_set_handler_locked()/irq_set_chip_handler_name_locked()
The main use case for the exisiting __irq_set_*_locked() inlines is to replace the handler [,chip and name] of an interrupt from a region which has the irq descriptor lock held, e.g. from the irq_set_type() callback. The first argument is the irq number, so the functions need so perform a pointless lookup of the interrupt descriptor for those cases which have the irq_data pointer handy. Provide new functions which take an irq_data pointer instead of the interrupt number, so the lookup of the interrupt descriptor can be avoided. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Jiang Liu <jiang.liu@linux.intel.com> Conflicts: include/linux/irqdesc.h
This commit is contained in:
parent
304adf8a8f
commit
bbc9d21fc0
@ -190,6 +190,47 @@ __irq_set_chip_handler_name_locked(unsigned int irq, struct irq_chip *chip,
|
||||
desc->name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* irq_set_handler_locked - Set irq handler from a locked region
|
||||
* @data: Pointer to the irq_data structure which identifies the irq
|
||||
* @handler: Flow control handler function for this interrupt
|
||||
*
|
||||
* Sets the handler in the irq descriptor associated to @data.
|
||||
*
|
||||
* Must be called with irq_desc locked and valid parameters. Typical
|
||||
* call site is the irq_set_type() callback.
|
||||
*/
|
||||
static inline void irq_set_handler_locked(struct irq_data *data,
|
||||
irq_flow_handler_t handler)
|
||||
{
|
||||
struct irq_desc *desc = irq_data_to_desc(data);
|
||||
|
||||
desc->handle_irq = handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* irq_set_chip_handler_name_locked - Set chip, handler and name from a locked region
|
||||
* @data: Pointer to the irq_data structure for which the chip is set
|
||||
* @chip: Pointer to the new irq chip
|
||||
* @handler: Flow control handler function for this interrupt
|
||||
* @name: Name of the interrupt
|
||||
*
|
||||
* Replace the irq chip at the proper hierarchy level in @data and
|
||||
* sets the handler and name in the associated irq descriptor.
|
||||
*
|
||||
* Must be called with irq_desc locked and valid parameters.
|
||||
*/
|
||||
static inline void
|
||||
irq_set_chip_handler_name_locked(struct irq_data *data, struct irq_chip *chip,
|
||||
irq_flow_handler_t handler, const char *name)
|
||||
{
|
||||
struct irq_desc *desc = irq_data_to_desc(data);
|
||||
|
||||
desc->handle_irq = handler;
|
||||
desc->name = name;
|
||||
data->chip = chip;
|
||||
}
|
||||
|
||||
static inline int irq_balancing_disabled(unsigned int irq)
|
||||
{
|
||||
struct irq_desc *desc;
|
||||
|
Loading…
Reference in New Issue
Block a user