Skip to content
  • Alexey Kardashevskiy's avatar
    spapr_pci: Use XICS interrupt allocator and do not cache interrupts in PHB · 9a321e92
    Alexey Kardashevskiy authored
    
    
    Currently SPAPR PHB keeps track of all allocated MSI (here and below
    MSI stands for both MSI and MSIX) interrupt because
    XICS used to be unable to reuse interrupts. This is a problem for
    dynamic MSI reconfiguration which happens when guest reloads a driver
    or performs PCI hotplug. Another problem is that the existing
    implementation can enable MSI on 32 devices maximum
    (SPAPR_MSIX_MAX_DEVS=32) and there is no good reason for that.
    
    This makes use of new XICS ability to reuse interrupts.
    
    This reorganizes MSI information storage in sPAPRPHBState. Instead of
    static array of 32 descriptors (one per a PCI function), this patch adds
    a GHashTable when @config_addr is a key and (first_irq, num) pair is
    a value. GHashTable can dynamically grow and shrink so the initial limit
    of 32 devices is gone.
    
    This changes migration stream as @msi_table was a static array while new
    @msi_devs is a dynamic hash table. This adds temporary array which is
    used for migration, it is populated in "spapr_pci"::pre_save() callback
    and expanded into the hash table in post_load() callback. Since
    the destination side does not know the number of MSI-enabled devices
    in advance and cannot pre-allocate the temporary array to receive
    migration state, this makes use of new VMSTATE_STRUCT_VARRAY_ALLOC macro
    which allocates the array automatically.
    
    This resets the MSI configuration space when interrupts are released by
    the ibm,change-msi RTAS call.
    
    This fixed traces to be more informative.
    
    This changes vmstate_spapr_pci_msi name from "...lsi" to "...msi" which
    was incorrect by accident. As the internal representation changed,
    thus bumps migration version number.
    
    Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
    [agraf: drop g_malloc_n usage]
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    9a321e92