From: "Patel, Nirmal" <nirmal.patel@linux.intel.com>
To: linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com,
Bjorn Helgaas <helgaas@kernel.org>
Cc: jonathan.derrick@linux.dev
Subject: Re: [PATCH v4] PCI: vmd: Clean up domain before enumeration
Date: Tue, 9 Nov 2021 08:32:37 -0700 [thread overview]
Message-ID: <b560b632-6fdd-ff53-5d99-76ac50be5d73@linux.intel.com> (raw)
In-Reply-To: <20211025182934.185703-1-nirmal.patel@linux.intel.com>
On 10/25/2021 11:29 AM, Nirmal Patel wrote:
> During VT-d pass-through, the VMD driver occasionally fails to
> enumerate underlying NVMe devices when repetitive reboots are
> performed in the guest OS. The issue can be resolved by resetting
> VMD root ports for proper enumeration and triggering secondary bus
> reset which will also propagate reset through downstream bridges.
>
> Signed-off-by: Nirmal Patel <nirmal.patel@linux.intel.com>
> Reviewed-by: Jon Derrick <jonathan.derrick@linux.dev>
> ---
> v3->v4: Using pci_reset_bus function for secondary bus reset instead of
> manually triggering secondary bus reset, addressing review
> comments of v3.
> v2->v3: Combining two functions into one, Remove redundant definations
> and Formatting fixes
>
> drivers/pci/controller/vmd.c | 37 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
> index a5987e52700e..79f8b86ee45b 100644
> --- a/drivers/pci/controller/vmd.c
> +++ b/drivers/pci/controller/vmd.c
> @@ -498,6 +498,40 @@ static inline void vmd_acpi_begin(void) { }
> static inline void vmd_acpi_end(void) { }
> #endif /* CONFIG_ACPI */
>
> +static void vmd_domain_reset(struct vmd_dev *vmd)
> +{
> + u16 bus, max_buses = resource_size(&vmd->resources[0]);
> + u8 dev, functions, fn, hdr_type;
> + char __iomem *base;
> +
> + for (bus = 0; bus < max_buses; bus++) {
> + for (dev = 0; dev < 32; dev++) {
> + base = vmd->cfgbar + PCIE_ECAM_OFFSET(bus,
> + PCI_DEVFN(dev, 0), 0);
> +
> + hdr_type = readb(base + PCI_HEADER_TYPE) &
> + PCI_HEADER_TYPE_MASK;
> +
> + functions = !!(hdr_type & 0x80) ? 8 : 1;
> + for (fn = 0; fn < functions; fn++) {
> + base = vmd->cfgbar + PCIE_ECAM_OFFSET(bus,
> + PCI_DEVFN(dev, fn), 0);
> +
> + hdr_type = readb(base + PCI_HEADER_TYPE) &
> + PCI_HEADER_TYPE_MASK;
> +
> + if (hdr_type != PCI_HEADER_TYPE_BRIDGE ||
> + (readw(base + PCI_CLASS_DEVICE) !=
> + PCI_CLASS_BRIDGE_PCI))
> + continue;
> +
> + memset_io(base + PCI_IO_BASE, 0,
> + PCI_ROM_ADDRESS1 - PCI_IO_BASE);
> + }
> + }
> + }
> +}
> +
> static void vmd_attach_resources(struct vmd_dev *vmd)
> {
> vmd->dev->resource[VMD_MEMBAR1].child = &vmd->resources[1];
> @@ -801,6 +835,9 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features)
> vmd_acpi_begin();
>
> pci_scan_child_bus(vmd->bus);
> + vmd_domain_reset(vmd);
> + list_for_each_entry(child, &vmd->bus->children, node)
> + pci_reset_bus(child->self);
> pci_assign_unassigned_bus_resources(vmd->bus);
>
> /*
Hi
Gentle ping. Please let me know if you are okay with these changes (with Jon's Reviewed-by). Thanks.
-nirmal
next prev parent reply other threads:[~2021-11-09 15:32 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-25 18:29 [PATCH v4] PCI: vmd: Clean up domain before enumeration Nirmal Patel
2021-11-02 17:55 ` Patel, Nirmal
2021-11-09 15:32 ` Patel, Nirmal [this message]
2021-11-09 15:54 ` Bjorn Helgaas
2021-11-14 0:16 ` Krzysztof Wilczyński
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b560b632-6fdd-ff53-5d99-76ac50be5d73@linux.intel.com \
--to=nirmal.patel@linux.intel.com \
--cc=helgaas@kernel.org \
--cc=jonathan.derrick@linux.dev \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).