qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gavin Shan <gwshan@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: aik@ozlabs.ru, alex.williamson@redhat.com,
	Gavin Shan <gwshan@linux.vnet.ibm.com>
Subject: [Qemu-devel] [RFC PATCH 2/2] VFIO: Clear stale MSIx table during EEH reset
Date: Wed, 20 Aug 2014 19:52:08 +1000	[thread overview]
Message-ID: <1408528328-11560-3-git-send-email-gwshan@linux.vnet.ibm.com> (raw)
In-Reply-To: <1408528328-11560-1-git-send-email-gwshan@linux.vnet.ibm.com>

The PCI device MSIx table is cleaned out in hardware after EEH PE
reset. However, we still hold the stale MSIx entries in QEMU, which
should be cleared accordingly. Otherwise, we will run into another
(recursive) EEH error and the PCI devices contained in the PE have
to be offlined exceptionally.

The patch clears stale MSIx table before EEH PE reset so that MSIx
table could be restored properly after EEH PE reset.

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 hw/misc/vfio.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c
index 1a3e7eb..3cf7f02 100644
--- a/hw/misc/vfio.c
+++ b/hw/misc/vfio.c
@@ -4424,6 +4424,8 @@ int vfio_container_ioctl(AddressSpace *as, int32_t groupid,
 {
     VFIOGroup *group;
     VFIOContainer *container;
+    VFIODevice *vdev;
+    struct vfio_eeh_pe_op *arg;
     int ret = -1;
 
     group = vfio_get_group(groupid, as);
@@ -4442,7 +4444,29 @@ int vfio_container_ioctl(AddressSpace *as, int32_t groupid,
     switch (req) {
     case VFIO_CHECK_EXTENSION:
     case VFIO_IOMMU_SPAPR_TCE_GET_INFO:
+        break;
     case VFIO_EEH_PE_OP:
+        arg = (struct vfio_eeh_pe_op *)param;
+        switch (arg->op) {
+        case VFIO_EEH_PE_RESET_HOT:
+        case VFIO_EEH_PE_RESET_FUNDAMENTAL:
+            /*
+             * The MSIx table will be cleaned out by reset. We need
+             * disable it so that it can be reenabled properly. Also,
+             * the cached MSIx table should be cleared as it's not
+             * reflecting the contents in hardware.
+             */
+            QLIST_FOREACH(vdev, &group->device_list, next) {
+                if (msix_enabled(&vdev->pdev)) {
+                    vfio_disable_msix(vdev);
+                }
+
+                msix_reset(&vdev->pdev);
+            }
+
+            break;
+        }
+
         break;
     default:
         /* Return an error on unknown requests */
-- 
1.8.3.2

  parent reply	other threads:[~2014-08-20  9:52 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-20  9:52 [Qemu-devel] [RFC PATCH 0/2] Fix MSIx lost after PE reset Gavin Shan
2014-08-20  9:52 ` [Qemu-devel] [RFC PATCH 1/2] VFIO: Drop vfio_container_do_ioctl() Gavin Shan
2014-08-26 10:27   ` Alexey Kardashevskiy
2014-08-26 20:05     ` Alex Williamson
2014-08-20  9:52 ` Gavin Shan [this message]
2014-08-26 10:25   ` [Qemu-devel] [RFC PATCH 2/2] VFIO: Clear stale MSIx table during EEH reset Alexey Kardashevskiy
2014-08-26 20:25   ` Alex Williamson
2014-08-27 13:15     ` Gavin Shan
2014-08-27 13:29       ` Alex Williamson
2014-08-29  7:13         ` Gavin Shan
2014-08-26  0:58 ` [Qemu-devel] [RFC PATCH 0/2] Fix MSIx lost after PE reset Gavin Shan

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=1408528328-11560-3-git-send-email-gwshan@linux.vnet.ibm.com \
    --to=gwshan@linux.vnet.ibm.com \
    --cc=aik@ozlabs.ru \
    --cc=alex.williamson@redhat.com \
    --cc=qemu-devel@nongnu.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;
as well as URLs for NNTP newsgroup(s).