genirq: Do not copy affinity before set
While rumaging through arch code I found that there are a few workarounds which deal with the fact that the initial affinity setting from request_irq() copies the mask into irq_data->affinity before the chip code is called. In the normal path we unconditionally copy the mask when the chip code returns 0. Copy after the code is called and add a return code IRQ_SET_MASK_OK_NOCOPY for the chip functions, which prevents the copy. That way we see the real mask when the chip function decided to truncate it further as some arches do. IRQ_SET_MASK_OK is 0, which is the current behaviour. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
@@ -85,6 +85,17 @@ typedef void (*irq_flow_handler_t)(unsigned int irq,
|
||||
# define IRQ_NO_BALANCING_MASK IRQ_NO_BALANCING
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Return value for chip->irq_set_affinity()
|
||||
*
|
||||
* IRQ_SET_MASK_OK - OK, core updates irq_data.affinity
|
||||
* IRQ_SET_MASK_NOCPY - OK, chip did update irq_data.affinity
|
||||
*/
|
||||
enum {
|
||||
IRQ_SET_MASK_OK = 0,
|
||||
IRQ_SET_MASK_OK_NOCOPY,
|
||||
};
|
||||
|
||||
struct msi_desc;
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user