public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Alex Williamson <alex.williamson@redhat.com>
To: qemu-devel@nongnu.org
Cc: kvm@vger.kernel.org, cam@cs.ualberta.ca, quintela@redhat.com,
	anthony@codemonkey.ws, alex.williamson@redhat.com
Subject: [PATCH 3/6] pci: Allow pci_device_save() to return error
Date: Wed, 06 Oct 2010 14:59:16 -0600	[thread overview]
Message-ID: <20101006205916.32127.2219.stgit@s20.home> (raw)
In-Reply-To: <20101006204546.32127.70109.stgit@s20.home>

Carry the vmsd pre_save error reporting through pci_device_save().

Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
---

 hw/grackle_pci.c |    4 +---
 hw/gt64xxx.c     |    3 +--
 hw/ivshmem.c     |    7 ++++++-
 hw/openpic.c     |    4 +---
 hw/pci.c         |    9 +++++++--
 hw/pci.h         |    2 +-
 hw/piix4.c       |    3 +--
 hw/ppc4xx_pci.c  |    7 +++++--
 hw/ppce500_pci.c |    7 +++++--
 hw/unin_pci.c    |    4 +---
 10 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/hw/grackle_pci.c b/hw/grackle_pci.c
index f6905fb..c7164c5 100644
--- a/hw/grackle_pci.c
+++ b/hw/grackle_pci.c
@@ -61,9 +61,7 @@ static int pci_grackle_save(QEMUFile* f, void *opaque)
 {
     PCIDevice *d = opaque;
 
-    pci_device_save(d, f);
-
-    return 0;
+    return pci_device_save(d, f);
 }
 
 static int pci_grackle_load(QEMUFile* f, void *opaque, int version_id)
diff --git a/hw/gt64xxx.c b/hw/gt64xxx.c
index 7d8c3b3..21a0e57 100644
--- a/hw/gt64xxx.c
+++ b/hw/gt64xxx.c
@@ -1089,8 +1089,7 @@ static void gt64120_reset(void *opaque)
 static int gt64120_save(QEMUFile* f, void *opaque)
 {
     PCIDevice *d = opaque;
-    pci_device_save(d, f);
-    return 0;
+    return pci_device_save(d, f);
 }
 
 static int gt64120_load(QEMUFile* f, void *opaque, int version_id)
diff --git a/hw/ivshmem.c b/hw/ivshmem.c
index 0919c4e..3726a7f 100644
--- a/hw/ivshmem.c
+++ b/hw/ivshmem.c
@@ -619,9 +619,14 @@ static void ivshmem_setup_msi(IVShmemState * s) {
 static int ivshmem_save(QEMUFile* f, void *opaque)
 {
     IVShmemState *proxy = opaque;
+    int ret;
 
     IVSHMEM_DPRINTF("ivshmem_save\n");
-    pci_device_save(&proxy->dev, f);
+
+    ret = pci_device_save(&proxy->dev, f);
+    if (ret < 0) {
+        return ret;
+    }
 
     if (ivshmem_has_feature(proxy, IVSHMEM_MSI)) {
         msix_save(&proxy->dev, f);
diff --git a/hw/openpic.c b/hw/openpic.c
index 4ca4ba3..4537239 100644
--- a/hw/openpic.c
+++ b/hw/openpic.c
@@ -1102,9 +1102,7 @@ static int openpic_save(QEMUFile* f, void *opaque)
     }
 #endif
 
-    pci_device_save(&opp->pci_dev, f);
-
-    return 0;
+    return pci_device_save(&opp->pci_dev, f);
 }
 
 static void openpic_load_IRQ_queue(QEMUFile* f, IRQ_queue_t *q)
diff --git a/hw/pci.c b/hw/pci.c
index 15416dd..a30f6ec 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -434,16 +434,21 @@ static inline const VMStateDescription *pci_get_vmstate(PCIDevice *s)
     return pci_is_express(s) ? &vmstate_pcie_device : &vmstate_pci_device;
 }
 
-void pci_device_save(PCIDevice *s, QEMUFile *f)
+int pci_device_save(PCIDevice *s, QEMUFile *f)
 {
+    int ret;
     /* Clear interrupt status bit: it is implicit
      * in irq_state which we are saving.
      * This makes us compatible with old devices
      * which never set or clear this bit. */
     s->config[PCI_STATUS] &= ~PCI_STATUS_INTERRUPT;
-    vmstate_save_state(f, pci_get_vmstate(s), s);
+    ret = vmstate_save_state(f, pci_get_vmstate(s), s);
+    if (ret < 0) {
+        return ret;
+    }
     /* Restore the interrupt status bit. */
     pci_update_irq_status(s);
+    return 0;
 }
 
 int pci_device_load(PCIDevice *s, QEMUFile *f)
diff --git a/hw/pci.h b/hw/pci.h
index 3d23f03..bb9ad79 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -198,7 +198,7 @@ uint32_t pci_default_read_config(PCIDevice *d,
                                  uint32_t address, int len);
 void pci_default_write_config(PCIDevice *d,
                               uint32_t address, uint32_t val, int len);
-void pci_device_save(PCIDevice *s, QEMUFile *f);
+int pci_device_save(PCIDevice *s, QEMUFile *f);
 int pci_device_load(PCIDevice *s, QEMUFile *f);
 
 typedef void (*pci_set_irq_fn)(void *opaque, int irq_num, int level);
diff --git a/hw/piix4.c b/hw/piix4.c
index 5209061..9f560ac 100644
--- a/hw/piix4.c
+++ b/hw/piix4.c
@@ -71,8 +71,7 @@ static void piix4_reset(void *opaque)
 static int piix_save(QEMUFile* f, void *opaque)
 {
     PCIDevice *d = opaque;
-    pci_device_save(d, f);
-    return 0;
+    return pci_device_save(d, f);
 }
 
 static int piix_load(QEMUFile* f, void *opaque, int version_id)
diff --git a/hw/ppc4xx_pci.c b/hw/ppc4xx_pci.c
index 7507d08..3499270 100644
--- a/hw/ppc4xx_pci.c
+++ b/hw/ppc4xx_pci.c
@@ -301,9 +301,12 @@ static void ppc4xx_pci_set_irq(void *opaque, int irq_num, int level)
 static int ppc4xx_pci_save(QEMUFile *f, void *opaque)
 {
     PPC4xxPCIState *controller = opaque;
-    int i;
+    int i, ret;
 
-    pci_device_save(controller->pci_dev, f);
+    ret = pci_device_save(controller->pci_dev, f);
+    if (ret < 0) {
+        return ret;
+    }
 
     for (i = 0; i < PPC4xx_PCI_NR_PMMS; i++) {
         qemu_put_be32s(f, &controller->pmm[i].la);
diff --git a/hw/ppce500_pci.c b/hw/ppce500_pci.c
index 9babe05..97a7743 100644
--- a/hw/ppce500_pci.c
+++ b/hw/ppce500_pci.c
@@ -219,9 +219,12 @@ static void mpc85xx_pci_set_irq(void *opaque, int irq_num, int level)
 static int ppce500_pci_save(QEMUFile *f, void *opaque)
 {
     PPCE500PCIState *controller = opaque;
-    int i;
+    int i, ret;
 
-    pci_device_save(controller->pci_dev, f);
+    ret = pci_device_save(controller->pci_dev, f);
+    if (ret < 0) {
+        return ret;
+    }
 
     for (i = 0; i < PPCE500_PCI_NR_POBS; i++) {
         qemu_put_be32s(f, &controller->pob[i].potar);
diff --git a/hw/unin_pci.c b/hw/unin_pci.c
index ca15a00..28b9836 100644
--- a/hw/unin_pci.c
+++ b/hw/unin_pci.c
@@ -67,9 +67,7 @@ static int pci_unin_save(QEMUFile* f, void *opaque)
 {
     PCIDevice *d = opaque;
 
-    pci_device_save(d, f);
-
-    return 0;
+    return pci_device_save(d, f);
 }
 
 static int pci_unin_load(QEMUFile* f, void *opaque, int version_id)


  parent reply	other threads:[~2010-10-06 20:59 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-06 20:58 [PATCH 0/6] Save state error handling (kill off no_migrate) Alex Williamson
2010-10-06 20:59 ` [PATCH 1/6] savevm: Allow SaveStateHandler() to return error Alex Williamson
2010-10-06 20:59 ` [PATCH 2/6] savevm: Allow vmsd->pre_save " Alex Williamson
2010-10-06 20:59 ` Alex Williamson [this message]
2010-10-06 20:59 ` [PATCH 4/6] virtio: Allow virtio_save() errors Alex Williamson
2010-10-06 20:59 ` [PATCH 5/6] savevm: Allow set_params and save_live_state to error Alex Williamson
2010-10-06 20:59 ` [PATCH 6/6] savevm: Remove register_device_unmigratable() Alex Williamson
2010-10-07 16:55 ` [PATCH 0/6] Save state error handling (kill off no_migrate) Alex Williamson
2010-11-08 11:40 ` Michael S. Tsirkin
2010-11-08 14:59   ` Alex Williamson
2010-11-08 16:54     ` Michael S. Tsirkin
2010-11-08 17:20       ` Alex Williamson
2010-11-08 20:59         ` Michael S. Tsirkin
2010-11-08 21:23           ` Alex Williamson
2010-11-09 12:00             ` Michael S. Tsirkin
2010-11-09 14:58               ` Alex Williamson
2010-11-09 15:07                 ` Michael S. Tsirkin
2010-11-09 15:34                   ` Alex Williamson
2010-11-09 15:42                     ` Michael S. Tsirkin
2010-11-09 15:47                       ` Alex Williamson
2010-11-09 16:15                         ` Michael S. Tsirkin
2010-11-09 16:30                           ` Alex Williamson
2010-11-09 16:49                             ` Michael S. Tsirkin
2010-11-09 17:44                               ` Alex Williamson
2010-11-09 19:35                                 ` Alex Williamson
2010-11-16 10:23 ` Juan Quintela

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=20101006205916.32127.2219.stgit@s20.home \
    --to=alex.williamson@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=cam@cs.ualberta.ca \
    --cc=kvm@vger.kernel.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.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