[PATCH 1/2] vfio/pci: Virtualize Maximum Payload Size

Paolo Pisati paolo.pisati at canonical.com
Thu Jan 18 15:17:42 UTC 2018


Acked-by: Paolo Pisati <paolo.pisati at canonical.com>

On Wed, Jan 17, 2018 at 12:40 AM, Manoj Iyer <manoj.iyer at canonical.com> wrote:
> From: Alex Williamson <alex.williamson at redhat.com>
>
> With virtual PCI-Express chipsets, we now see userspace/guest drivers
> trying to match the physical MPS setting to a virtual downstream port.
> Of course a lone physical device surrounded by virtual interconnects
> cannot make a correct decision for a proper MPS setting.  Instead,
> let's virtualize the MPS control register so that writes through to
> hardware are disallowed.  Userspace drivers like QEMU assume they can
> write anything to the device and we'll filter out anything dangerous.
> Since mismatched MPS can lead to AER and other faults, let's add it
> to the kernel side rather than relying on userspace virtualization to
> handle it.
>
> BugLink: https://launchpad.net/bugs/1732804
>
> Signed-off-by: Alex Williamson <alex.williamson at redhat.com>
> Reviewed-by: Eric Auger <eric.auger at redhat.com>
> (cherry picked from commit 523184972b282cd9ca17a76f6ca4742394856818)
> Signed-off-by: Manoj Iyer <manoj.iyer at canonical.com>
> ---
>  drivers/vfio/pci/vfio_pci_config.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c
> index 5628fe114347..91335e6de88a 100644
> --- a/drivers/vfio/pci/vfio_pci_config.c
> +++ b/drivers/vfio/pci/vfio_pci_config.c
> @@ -849,11 +849,13 @@ static int __init init_pci_cap_exp_perm(struct perm_bits *perm)
>
>         /*
>          * Allow writes to device control fields, except devctl_phantom,
> -        * which could confuse IOMMU, and the ARI bit in devctl2, which
> +        * which could confuse IOMMU, MPS, which can break communication
> +        * with other physical devices, and the ARI bit in devctl2, which
>          * is set at probe time.  FLR gets virtualized via our writefn.
>          */
>         p_setw(perm, PCI_EXP_DEVCTL,
> -              PCI_EXP_DEVCTL_BCR_FLR, ~PCI_EXP_DEVCTL_PHANTOM);
> +              PCI_EXP_DEVCTL_BCR_FLR | PCI_EXP_DEVCTL_PAYLOAD,
> +              ~PCI_EXP_DEVCTL_PHANTOM);
>         p_setw(perm, PCI_EXP_DEVCTL2, NO_VIRT, ~PCI_EXP_DEVCTL2_ARI);
>         return 0;
>  }
> --
> 2.14.1
>
>
> --
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team



-- 
bye,
p.




More information about the kernel-team mailing list