From: "Eric W. Biederman" Signed-off-by: Eric W. Biederman Cc: Ingo Molnar Cc: Thomas Gleixner Cc: Benjamin Herrenschmidt Cc: Rajesh Shah Cc: Andi Kleen Cc: "Protasevich, Natalie" Cc: "Luck, Tony" DESC genirq-ia64-irq-dynamic-irq-support-fix EDESC From: Andrew Morton Make it build. The mixture of `irq' and `vector' in this code is confusing. What's the difference? They seem to be used interchangeably. Cc: Eric W. Biederman Cc: Ingo Molnar Cc: Thomas Gleixner Cc: Benjamin Herrenschmidt Cc: Rajesh Shah Cc: Andi Kleen Cc: "Protasevich, Natalie" Cc: "Luck, Tony" Signed-off-by: Andrew Morton --- arch/ia64/kernel/irq_ia64.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff -puN arch/ia64/kernel/irq_ia64.c~genirq-ia64-irq-dynamic-irq-support arch/ia64/kernel/irq_ia64.c --- a/arch/ia64/kernel/irq_ia64.c~genirq-ia64-irq-dynamic-irq-support +++ a/arch/ia64/kernel/irq_ia64.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -105,6 +106,25 @@ reserve_irq_vector (int vector) return test_and_set_bit(pos, ia64_vector_mask); } +/* + * Dynamic irq allocate and deallocation for MSI + */ +int create_irq(void) +{ + int vector = assign_irq_vector(AUTO_ASSIGN); + + if (vector >= 0) + dynamic_irq_init(vector); + + return vector; +} + +void destroy_irq(unsigned int irq) +{ + dynamic_irq_cleanup(irq); + free_irq_vector(irq); +} + #ifdef CONFIG_SMP # define IS_RESCHEDULE(vec) (vec == IA64_IPI_RESCHEDULE) #else _