• Thomas Gleixner's avatar
    genirq/msi: Provide allocation/free functions for "wired" MSI interrupts · 0ee1578b
    Thomas Gleixner authored
    To support wire to MSI bridges proper in the MSI core infrastructure it is
    required to have separate allocation/free interfaces which can be invoked
    from the regular irqdomain allocaton/free functions.
    
    The mechanism for allocation is:
      - Allocate the next free MSI descriptor index in the domain
      - Store the hardware interrupt number and the trigger type
        which was extracted by the irqdomain core from the firmware spec
        in the MSI descriptor device cookie so it can be retrieved by
        the underlying interrupt domain and interrupt chip
      - Use the regular MSI allocation mechanism for the newly allocated
        index which returns a fully initialized Linux interrupt on succes
    
    This works because:
      - the domains have a fixed size
      - each hardware interrupt is only allocated once
      - the underlying domain does not care about the MSI index it only cares
        about the hardware interrupt number and the trigger type
    
    The free function looks up the MSI index in the MSI descriptor of the
    provided Linux interrupt number and uses the regular index based free
    functions of the MSI core.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarAnup Patel <apatel@ventanamicro.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/20240127161753.114685-12-apatel@ventanamicro.com
    0ee1578b
msi.c 49.1 KB