lkml.org 
[lkml]   [2022]   [Apr]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 143/219] PCI: hv: Propagate coherence from VMbus device to PCI device
    Date
    From: Michael Kelley <mikelley@microsoft.com>

    [ Upstream commit 8d21732475c637c7efcdb91dc927a4c594e97898 ]

    PCI pass-thru devices in a Hyper-V VM are represented as a VMBus
    device and as a PCI device. The coherence of the VMbus device is
    set based on the VMbus node in ACPI, but the PCI device has no
    ACPI node and defaults to not hardware coherent. This results
    in extra software coherence management overhead on ARM64 when
    devices are hardware coherent.

    Fix this by setting up the PCI host bus so that normal
    PCI mechanisms will propagate the coherence of the VMbus
    device to the PCI device. There's no effect on x86/x64 where
    devices are always hardware coherent.

    Signed-off-by: Michael Kelley <mikelley@microsoft.com>
    Acked-by: Boqun Feng <boqun.feng@gmail.com>
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Link: https://lore.kernel.org/r/1648138492-2191-3-git-send-email-mikelley@microsoft.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/pci/controller/pci-hyperv.c | 9 +++++++++
    1 file changed, 9 insertions(+)

    diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c
    index ae0bc2fee4ca..88b3b56d0522 100644
    --- a/drivers/pci/controller/pci-hyperv.c
    +++ b/drivers/pci/controller/pci-hyperv.c
    @@ -3404,6 +3404,15 @@ static int hv_pci_probe(struct hv_device *hdev,
    hbus->bridge->domain_nr = dom;
    #ifdef CONFIG_X86
    hbus->sysdata.domain = dom;
    +#elif defined(CONFIG_ARM64)
    + /*
    + * Set the PCI bus parent to be the corresponding VMbus
    + * device. Then the VMbus device will be assigned as the
    + * ACPI companion in pcibios_root_bridge_prepare() and
    + * pci_dma_configure() will propagate device coherence
    + * information to devices created on the bus.
    + */
    + hbus->sysdata.parent = hdev->device.parent;
    #endif

    hbus->hdev = hdev;
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-04-18 14:30    [W:3.242 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site