• Leon Romanovsky's avatar
    PCI/IOV: Add sysfs MSI-X vector assignment interface · c3d5c2d9
    Leon Romanovsky authored
    A typical cloud provider SR-IOV use case is to create many VFs for use by
    guest VMs. The VFs may not be assigned to a VM until a customer requests a
    VM of a certain size, e.g., number of CPUs. A VF may need MSI-X vectors
    proportional to the number of CPUs in the VM, but there is no standard way
    to change the number of MSI-X vectors supported by a VF.
    
    Some Mellanox ConnectX devices support dynamic assignment of MSI-X vectors
    to SR-IOV VFs. This can be done by the PF driver after VFs are enabled,
    and it can be done without affecting VFs that are already in use. The
    hardware supports a limited pool of MSI-X vectors that can be assigned to
    the PF or to individual VFs.  This is device-specific behavior that
    requires support in the PF driver.
    
    Add a read-only "sriov_vf_total_msix" sysfs file for the PF and a writable
    "sriov_vf_msix_count" file for each VF. Management software may use these
    to learn how many MSI-X vectors are available and to dynamically assign
    them to VFs before the VFs are passed through to a VM.
    
    If the PF driver implements the ->sriov_get_vf_total_msix() callback,
    "sriov_vf_total_msix" contains the total number of MSI-X vectors available
    for distribution among VFs.
    
    If no driver is bound to the VF, writing "N" to "sriov_vf_msix_count" uses
    the PF driver ->sriov_set_msix_vec_count() callback to assign "N" MSI-X
    vectors to the VF.  When a VF driver subsequently reads the MSI-X Message
    Control register, it will see the new Table Size "N".
    
    Link: https://lore.kernel.org/linux-pci/20210314124256.70253-2-leon@kernel.orgAcked-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
    c3d5c2d9
iov.c 26.9 KB