All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michał Winiarski" <michal.winiarski@intel.com>
To: Alex Williamson <alex@shazbot.org>
Cc: "Satyanarayana K V P" <satyanarayana.k.v.p@intel.com>,
	qemu-devel@nongnu.org,
	"Michal Wajdeczko" <michal.wajdeczko@intel.com>,
	"Matthew Brost" <matthew.brost@intel.com>,
	"Cédric Le Goater" <clg@redhat.com>
Subject: Re: [RFC 0/1] Forward AER errors to guest
Date: Tue, 7 Jul 2026 23:05:33 +0200	[thread overview]
Message-ID: <ak1oWDUvX49OfFmB@nostramo> (raw)
In-Reply-To: <3500e357-1a3e-4325-9259-28c2023860a1@app.fastmail.com>

On Fri, Jul 03, 2026 at 07:59:46AM -0600, Alex Williamson wrote:
> 
> 
> On Fri, Jul 3, 2026, at 5:13 AM, Satyanarayana K V P wrote:
> > Today, vfio-pci unconditionally stops the VM when any error event is
> > reported by device. This prevents guest-driven error handling and recovery
> > for platforms that support PCIe AER.
> >
> > This series adds an optional vfio-pci extension parameter,
> > "x-forward-aer=on", to forward AER errors to the guest instead of
> > forcing an immediate VM stop. If the endpoint supports AER, the error is
> > forwarded directly; otherwise, checks the upstream PCIe bridge and
> > forwards the error there when supported.If neither device nor PCIe bridge
> > supports AER, the VM is immediately stopped when the error is reported.
> 
> The error eventfd is signaled for err_detected in the host, this is the beginning of the host error handling and the point at which drivers should stop accessing the device until the resume callback.  Letting the VMM continue at this point does the opposite of that.  Thanks,
> 
> Alex

Hi,

Today - the default error handler used by VFIO is not implementing the
.resume() callback and just signals err_trigger and returns
PCI_ERS_RESULT_CAN_RECOVER as part of .error_detected().
Qemu registers a callback to be called upon err_trigger signal (using
one of the poll/select syscall variants), the callback calls
vm_stop(RUN_STATE_INTERNAL_ERROR) - this is a runstate that can't
continue, the VM is effectively killed (qemu needs to trigger VM reset
to recover).

The AER forward was proposed as a relatively simple opt-in mechanism to
avoid hitting RUN_STATE_INTERNAL_ERROR and be able to handle errors for
SR-IOV VFs using VFIO. For uncorrectable errors with SR-IOV, PF driver
can be the entity that handles the device recovery. The VF driver needs
to stop using the device until it is recovered by PF, and reinitialize
any state that was lost as part of the recovery action.
Forwarding AER would allow the VM to move forward without introducing
any new uAPI.

If we would want to build a generic error recovery mechanism, we would
need to duplicate more of the err_handler_t callbacks as VFIO uAPI.

If the recovery is handled by other entity running on the host (VFIO
variant? Or for SR-IOV, the PF driver), we could also go into a
different runstate (RUN_STATE_PAUSED? something that doesn't require
full VM reset) and add a VFIO uAPI that can propagate the .resume() into
userspace.

If we would want the SW running inside the VM to handle the recovery...
it becomes more involved, and it requires a more substantial solution
that wasn't meant to be addressed here.

So - we're letting the VMM continue but we're also informing it that
something went wrong with the device, so that the SW running inside the
VM can do its own action.
If it's a virtual function, the driver can potentially fully recover
after the host does its thing.
If it's a regular native function, it will probably need to go into
PCI_ERS_RESULT_DISCONNECT, which, for most usecases is still a better
scenario then having to reset the entire VM.

If we would want to absolutely make sure that the users are not able to
issue any IO across error recovery, we can probably unmap (or zero-map)
the BARs at VFIO driver level, similar to what's done during reset.

Thanks,
-Michał


  reply	other threads:[~2026-07-07 21:38 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-03 11:13 [RFC 0/1] Forward AER errors to guest Satyanarayana K V P
2026-07-03 11:13 ` [RFC 1/1] vfio/pci: Forward AER errors to guest optionally Satyanarayana K V P
2026-07-03 13:59 ` [RFC 0/1] Forward AER errors to guest Alex Williamson
2026-07-07 21:05   ` Michał Winiarski [this message]
2026-07-07 22:12     ` Alex Williamson
2026-07-08  8:23       ` Shameer Kolothum Thodi

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=ak1oWDUvX49OfFmB@nostramo \
    --to=michal.winiarski@intel.com \
    --cc=alex@shazbot.org \
    --cc=clg@redhat.com \
    --cc=matthew.brost@intel.com \
    --cc=michal.wajdeczko@intel.com \
    --cc=qemu-devel@nongnu.org \
    --cc=satyanarayana.k.v.p@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.