mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: William Woodstock <williamwoodstock79@gmail.com>
To: Alex Williamson <alwilliamson@nvidia.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
	linux-pci@vger.kernel.org, kvm@vger.kernel.org,
	 linux-kernel@vger.kernel.org
Subject: Re: [PATCH] PCI: Avoid bus reset on NVIDIA GB202 and GB203 GPUs
Date: Fri, 23 Oct 2026 20:26:12 -0700	[thread overview]
Message-ID: <CAC_eNMPu=3Tez6L0jO2f-OkRWPL9-ub8BS+7uftcRqSGKbCFQA@mail.gmail.com> (raw)
In-Reply-To: <20261019141053.7b2d8e23@nvidia.com>

Resending because html was rejected, and I also tried kernel 7.3, with
no success.

> What's your RTX 5080 vBIOS version and system information?  Is it the
> same Asus X870E as the other 5090 reports or something else?

vBIOS: 98.03.3b.c0.0b
Card:  Zotac GeForce RTX 5080 (10de:2c02, subsystem 19da:1765),
       primary PCIEX16 slot, bifurcation Auto
Board: Gigabyte X870E Aorus Master, BIOS F14d (not the Asus board)
CPU:   AMD Ryzen 9 9950X3D2, GPU on root port 00:01.1 [1022:14db]
Host:  Proxmox VE, kernel 7.0.14-20-pve; guest Windows 11 Pro,
       GPU passed through with vfio-pci

It reproduces without a VM. On the host, with the link at 32GT/s x16:

  echo 1 > /sys/bus/pci/devices/0000:00:01.1/reset_subordinate

brings it back at x8. A bwctrl retrain restores the speed but not the
width; only a cold boot gets x16 back.

> Is the issue still present on kernel v7.3?

Yes. I built v7.3 from kernel.org with no patches, using the Proxmox
7.0.14-20-pve config (make olddefconfig, LOCALVERSION=-stock), and ran
the same host-only test with no VM running:

  uname -r: 7.3.0-stock

  before: 01:00.0 LnkSta: Speed 2.5GT/s (downgraded), Width x16
  after:  01:00.0 LnkSta: Speed 32GT/s, Width x8 (downgraded)

  [  211.617016] vfio-pci 0000:01:00.0: resetting
  [  211.617225] vfio-pci 0000:01:00.1: resetting
  [  212.898377] vfio-pci 0000:01:00.0: not ready 1023ms after bus
reset; waiting
  [  279.586064] vfio-pci 0000:01:00.0: not ready 65535ms after bus
reset; giving up
  [  279.587022] vfio-pci 0000:01:00.0: reset done
  [  279.589284] vfio-pci 0000:01:00.1: reset done

The 65 s "not ready" wait didn't happen on 7.0.14, where the reset
finished in about a second. On this run the guest had been
force-stopped just before the reset, so that may explain it rather
than 7.3. The x8 result is the same either way.

> Disabling bus reset entirely should be a last resort, it has
> implications for device isolation when no other reset mechanism exists.

Understood. What I measured:

- 01:00.0 (GPU) reports reset_method "flr bus"; 01:00.1 (HDA) none.
- With only .0 assigned, FLR is used and the link stays x16.
- With .1 assigned too, vfio falls back to a bus reset and the link
  drops to x8.

So the bus reset is only reached because the audio function has no
reset of its own. Would you rather see a quirk that gives the HDA
function a usable reset, or keep the bus reset and restore the link
width afterwards? Happy to test either.
Thanks,
mark-ship-it


On Mon, Oct 19, 2026 at 1:11 PM Alex Williamson <alwilliamson@nvidia.com> wrote:
>
> On Sun, 18 Oct 2026 13:17:27 -0700
> mark-ship-it <williamwoodstock79@gmail.com> wrote:
>
> > NVIDIA GB202 (GeForce RTX 5090, RTX PRO 6000) and GB203 (GeForce RTX
> > 5080/5070 Ti/5070) GPUs train their link at x16 at boot, but after a
> > Secondary Bus Reset the link comes back at x8 and stays there until the
> > next cold boot.
> >
> > The GPU's HD Audio function (e.g. 10de:22e9 on GB203) has no reset method,
> > so when both functions are assigned to a VM, vfio-pci falls back to a bus
> > reset at VM start and again at release, and the GPU then runs at half
> > width. Assigning only function 0 avoids the bus reset because the GPU
> > itself supports FLR, which is why the problem is usually reported as
> > "passing the audio function breaks x16".
> >
> > Observed on an RTX 5080 (10de:2c02) behind an AMD Root Port, kernel
> > 7.0.14, Proxmox VE host with a Windows 11 Pro guest:
> >
> >   boot:                         LnkSta: Speed 32GT/s, Width x16
> >   echo 1 > /sys/bus/pci/devices/<root port>/reset_subordinate
> >                                 LnkSta: Speed 32GT/s, Width x8 (downgraded)
> >
> > No VM is involved in that reproduction. Stepping the link speed through
> > bwctrl (Gen5 -> Gen4 -> Gen5) retrains the link and the speed follows,
> > but the width stays at x8. With a VM started frozen (-S), the link is
> > already at x8 before any guest code has run, so the guest driver is not
> > involved.
> >
> > With this patch applied, reset_method for the GPU is "flr" only, both
> > functions can be assigned, and the link stays at x16 Gen5 across VM
> > start, shutdown and restart, with the Windows guest driver working.
> >
> > The same symptom has been reported with an RTX 5090 (10de:2b85) on an
> > AMD X870E board, where passing only function 0 was the only thing that
> > kept x16.
> >
> > Link: https://forum.proxmox.com/threads/asus-x870e-pcie-x8-bifurcation-bug-with-rtx-5090-vfio-passthrough.178461/
> >
> > Signed-off-by: mark-ship-it <williamwoodstock79@gmail.com>
> > ---
> >  drivers/pci/quirks.c | 9 ++++++++-
> >  1 file changed, 8 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> > index 1aa87a3ef..a4adcc3e7 100644
> > --- a/drivers/pci/quirks.c
> > +++ b/drivers/pci/quirks.c
> > @@ -3769,10 +3769,17 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NVIDIA, 0x22D0, quirk_no_bus_reset);
> >  /*
> >   * Some NVIDIA GPU devices do not work with bus reset, SBR needs to be
> >   * prevented for those affected devices.
> > + *
> > + * GB202 (0x2b80-0x2bbf) and GB203 (0x2c00-0x2c7f) GPUs train at x16 at
> > + * boot, but after a Secondary Bus Reset the link comes back at x8 and
> > + * stays there until the next cold boot; a link retrain restores the speed
> > + * but not the width.  Function Level Reset does not have this problem.
> >   */
> >  static void quirk_nvidia_no_bus_reset(struct pci_dev *dev)
> >  {
> > -     if ((dev->device & 0xffc0) == 0x2340)
> > +     if ((dev->device & 0xffc0) == 0x2340 ||
> > +         (dev->device & 0xffc0) == 0x2b80 ||
> > +         (dev->device & 0xff80) == 0x2c00)
> >               quirk_no_bus_reset(dev);
> >  }
> >  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID,
>
> What's your RTX 5080 vBIOS version and system information?  Is it the
> same Asus X870E as the other 5090 reports or something else?
>
> Is the issue still present on kernel v7.3?
>
> Disabling bus reset entirely should be a last resort, it has
> implications for device isolation when no other reset mechanism exists.
> Thanks,
>
> Alex

      reply	other threads:[~2026-10-24  3:26 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-18 20:17 mark-ship-it
2026-10-19 20:10 ` Alex Williamson
2026-10-24  3:26   ` William Woodstock [this message]

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='CAC_eNMPu=3Tez6L0jO2f-OkRWPL9-ub8BS+7uftcRqSGKbCFQA@mail.gmail.com' \
    --to=williamwoodstock79@gmail.com \
    --cc=alwilliamson@nvidia.com \
    --cc=bhelgaas@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    /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

all inboxes | Powered by JetHome®