All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Baron <jbaron@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: yamahata@valinux.co.jp, alex.williamson@redhat.com,
	jan.kiszka@siemens.com, qemu-devel@nongnu.org,
	quintela@redhat.com
Subject: Re: [Qemu-devel] [PATCH 2/2 v2] pcie_aer: clear cmask for Advanced Error Interrupt Message Number
Date: Tue, 4 Sep 2012 16:22:46 -0400	[thread overview]
Message-ID: <20120904202246.GC22890@redhat.com> (raw)
In-Reply-To: <20120831154331.GE12212@redhat.com>

On Fri, Aug 31, 2012 at 11:43:31AM -0400, Jason Baron wrote:
> On Fri, Aug 31, 2012 at 06:35:13PM +0300, Michael S. Tsirkin wrote:
> > On Fri, Aug 31, 2012 at 10:45:52AM -0400, Jason Baron wrote:
> > > On Fri, Aug 31, 2012 at 11:42:27AM +0300, Michael S. Tsirkin wrote:
> > > > Some minor nits below. If you dont get to it I will tweak this patch
> > > > when I apply it early next week.
> > > > 
> > > > On Thu, Aug 30, 2012 at 01:51:15PM -0400, Jason Baron wrote:
> > > > > The Advanced Error Interrupt Message Number (bits 31:27 of the Root
> > > > > Error Status Register) is updated when the number of msi messages assigned to a
> > > > > device changes. Migration of windows 7 on q35 chipset failed because the check
> > > > > in get_pci_config_device() fails due to wmask being set on these bits.
> > > > 
> > > > I think you actually mean 'not being set on these bits'?
> > > > 
> > > 
> > > No, the check is:
> > > 
> > > static int get_pci_config_device(QEMUFile *f, void *pv, size_t size)
> > > {
> > >     PCIDevice *s = container_of(pv, PCIDevice, config);
> > >     uint8_t *config;
> > >     int i;
> > > 
> > >     assert(size == pci_config_size(s));
> > >     config = g_malloc(size);
> > > 
> > >     qemu_get_buffer(f, config, size);
> > >     for (i = 0; i < size; ++i) {
> > >         if ((config[i] ^ s->config[i]) &
> > >             s->cmask[i] & ~s->wmask[i] & ~s->w1cmask[i]) {
> > >             g_free(config);
> > >             return -EINVAL;
> > >         }
> > >     }
> > > .....
> > > 
> > > So because cmask is set and these bits differ in config space (due to
> > > them being updated before migration), the migration aborts.
> > 
> > Ah so you mean 'cmask being set' - not wmask as you wrote.
> > 
> 
> Sorry - my mistake, yes I meant 'cmask'. I will fix the changelog in the
> re-post.
> 

Ok, here's a v2:

---

pcie_aer: clear cmask for Advanced Error Interrupt Message Number

The Advanced Error Interrupt Message Number (bits 31:27 of the Root
Error Status Register) is updated when the number of msi messages assigned to a
device changes. Migration of windows 7 on q35 chipset failed because the check
in get_pci_config_device() fails due to cmask being set on these bits. Its valid
to update these bits and we must restore this state across migration.

Signed-off-by: Jason Baron <jbaron@redhat.com>
---

v2:
- Based on Michael Tsirkin's feedback:
    -updated changelog 'wmask' -> 'cmask'
    -Cleaned up comments
    -Make cmask set more readable

 hw/pcie_aer.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/hw/pcie_aer.c b/hw/pcie_aer.c
index 3b6981c..b04c164 100644
--- a/hw/pcie_aer.c
+++ b/hw/pcie_aer.c
@@ -738,6 +738,11 @@ void pcie_aer_root_init(PCIDevice *dev)
                  PCI_ERR_ROOT_CMD_EN_MASK);
     pci_set_long(dev->w1cmask + pos + PCI_ERR_ROOT_STATUS,
                  PCI_ERR_ROOT_STATUS_REPORT_MASK);
+    /* PCI_ERR_ROOT_IRQ is RO but devices change it using a
+     * device-specific method.
+     */
+    pci_set_long(dev->cmask + pos + PCI_ERR_ROOT_STATUS,
+                 ~PCI_ERR_ROOT_IRQ);
 }
 
 void pcie_aer_root_reset(PCIDevice *dev)
-- 
1.7.1

  reply	other threads:[~2012-09-04 20:22 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-30 17:51 [Qemu-devel] [PATCH 0/2] pcie migration fixes Jason Baron
2012-08-30 17:51 ` [Qemu-devel] [PATCH 1/2] pcie: drop version_id field for live migration Jason Baron
2012-08-31  8:44   ` Michael S. Tsirkin
2012-08-31 14:46     ` Jason Baron
2012-08-31 15:42       ` Michael S. Tsirkin
2012-08-31  8:51   ` Juan Quintela
2012-08-30 17:51 ` [Qemu-devel] [PATCH 2/2] pcie_aer: clear cmask for Advanced Error Interrupt Message Number Jason Baron
2012-08-31  8:42   ` Michael S. Tsirkin
2012-08-31 14:45     ` Jason Baron
2012-08-31 15:35       ` Michael S. Tsirkin
2012-08-31 15:43         ` Jason Baron
2012-09-04 20:22           ` Jason Baron [this message]
2012-09-07  6:01             ` [Qemu-devel] [PATCH 2/2 v2] " Michael S. Tsirkin

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=20120904202246.GC22890@redhat.com \
    --to=jbaron@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=jan.kiszka@siemens.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=yamahata@valinux.co.jp \
    /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.