• Eric W. Biederman's avatar
    [PATCH] genirq: irq: add a dynamic irq creation API · 3a16d713
    Eric W. Biederman authored
    With the msi support comes a new concept in irq handling, irqs that are
    created dynamically at run time.
    
    Currently the msi code allocates irqs backwards.  First it allocates a
    platform dependent routing value for an interrupt the ``vector'' and then it
    figures out from the vector which irq you are on.
    
    This msi backwards allocator suffers from two basic problems.  The allocator
    suffers because it is trying to do something that is architecture specific in
    a generic way making it brittle, inflexible, and tied to tightly to the
    architecture implementation.  The alloctor also suffers from it's very
    backwards nature as it has tied things together that should have no
    dependencies.
    
    To solve the basic dynamic irq allocation problem two new architecture
    specific functions are added: create_irq and destroy_irq.
    
    create_irq takes no input and returns an unused irq number, that won't be
    reused until it is returned to the free poll with destroy_irq.  The irq then
    can be used for any purpose although the only initial consumer is the msi
    code.
    
    destroy_irq takes an irq number allocated with create_irq and returns it to
    the free pool.
    
    Making this functionality per architecture increases the simplicity of the irq
    allocation code and increases it's flexibility.
    
    dynamic_irq_init() and dynamic_irq_cleanup() are added to automate the
    irq_desc initializtion that should happen for dynamic irqs.
    Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Rajesh Shah <rajesh.shah@intel.com>
    Cc: Andi Kleen <ak@muc.de>
    Cc: "Protasevich, Natalie" <Natalie.Protasevich@UNISYS.com>
    Cc: "Luck, Tony" <tony.luck@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    3a16d713
chip.c 14.1 KB