diff mbox

[11/13] pseries: savevm support for PCI host bridge

Message ID 1370348465-31652-12-git-send-email-aik@ozlabs.ru
State New
Headers show

Commit Message

Alexey Kardashevskiy June 4, 2013, 12:21 p.m. UTC
Author: David Gibson <david@gibson.dropbear.id.au>

This adds the necessary support for saving the state of the PAPR virtual
PCI host bridge (or host bridges).

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
---
 hw/ppc/spapr_pci.c          |   49 +++++++++++++++++++++++++++++++++++++++++++
 include/hw/pci-host/spapr.h |    6 +++---
 2 files changed, 52 insertions(+), 3 deletions(-)

Comments

David Gibson June 5, 2013, 10 a.m. UTC | #1
On Tue, Jun 04, 2013 at 10:21:03PM +1000, Alexey Kardashevskiy wrote:
> Author: David Gibson <david@gibson.dropbear.id.au>
> 
> This adds the necessary support for saving the state of the PAPR virtual
> PCI host bridge (or host bridges).

I think the PCI cleanup patches I was working on need to go in before
this, to make sure the migration stream pieces for PCI have same paths
from the beginning.
Alexey Kardashevskiy June 5, 2013, 10:57 a.m. UTC | #2
On 05.06.2013 20:00, David Gibson wrote:
> On Tue, Jun 04, 2013 at 10:21:03PM +1000, Alexey Kardashevskiy wrote:
>> Author: David Gibson <david@gibson.dropbear.id.au>
>>
>> This adds the necessary support for saving the state of the PAPR virtual
>> PCI host bridge (or host bridges).
> 
> I think the PCI cleanup patches I was working on need to go in before
> this, to make sure the migration stream pieces for PCI have same paths
> from the beginning.

We really want migration to go upstream... Are any close to get PCI
stuff upstream? I did not see updates for a while and could not find
anything new in your git on github.
David Gibson June 5, 2013, 11:22 p.m. UTC | #3
On Wed, Jun 05, 2013 at 08:57:29PM +1000, Alexey Kardashevskiy wrote:
> On 05.06.2013 20:00, David Gibson wrote:
> > On Tue, Jun 04, 2013 at 10:21:03PM +1000, Alexey Kardashevskiy wrote:
> >> Author: David Gibson <david@gibson.dropbear.id.au>
> >>
> >> This adds the necessary support for saving the state of the PAPR virtual
> >> PCI host bridge (or host bridges).
> > 
> > I think the PCI cleanup patches I was working on need to go in before
> > this, to make sure the migration stream pieces for PCI have same paths
> > from the beginning.
> 
> We really want migration to go upstream... Are any close to get PCI
> stuff upstream? I did not see updates for a while and could not find
> anything new in your git on github.

I've been trying to find time to address Michael Tsirkin's remaining
comments.  I got a fair ways last night, so I hope I can repost these
shortly.
diff mbox

Patch

diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 762db62..a50a45a 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -694,6 +694,54 @@  static Property spapr_phb_properties[] = {
     DEFINE_PROP_END_OF_LIST(),
 };
 
+static const VMStateDescription vmstate_spapr_pci_lsi = {
+    .name = "spapr_pci/lsi",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .minimum_version_id_old = 1,
+    .fields      = (VMStateField []) {
+        VMSTATE_UINT32_EQUAL(irq, struct spapr_pci_lsi),
+
+        VMSTATE_END_OF_LIST()
+    },
+};
+
+static const VMStateDescription vmstate_spapr_pci_msi = {
+    .name = "spapr_pci/lsi",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .minimum_version_id_old = 1,
+    .fields      = (VMStateField []) {
+        VMSTATE_UINT32(config_addr, struct spapr_pci_msi),
+        VMSTATE_UINT32(irq, struct spapr_pci_msi),
+        VMSTATE_UINT32(nvec, struct spapr_pci_msi),
+
+        VMSTATE_END_OF_LIST()
+    },
+};
+
+static const VMStateDescription vmstate_spapr_pci = {
+    .name = "spapr_pci",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .minimum_version_id_old = 1,
+    .fields      = (VMStateField []) {
+        VMSTATE_UINT64_EQUAL(buid, sPAPRPHBState),
+        VMSTATE_UINT32_EQUAL(dma_liobn, sPAPRPHBState),
+        VMSTATE_UINT64_EQUAL(mem_win_addr, sPAPRPHBState),
+        VMSTATE_UINT64_EQUAL(mem_win_size, sPAPRPHBState),
+        VMSTATE_UINT64_EQUAL(io_win_addr, sPAPRPHBState),
+        VMSTATE_UINT64_EQUAL(io_win_size, sPAPRPHBState),
+        VMSTATE_UINT64_EQUAL(msi_win_addr, sPAPRPHBState),
+        VMSTATE_STRUCT_ARRAY(lsi_table, sPAPRPHBState, PCI_NUM_PINS, 0,
+                             vmstate_spapr_pci_lsi, struct spapr_pci_lsi),
+        VMSTATE_STRUCT_ARRAY(msi_table, sPAPRPHBState, SPAPR_MSIX_MAX_DEVS, 0,
+                             vmstate_spapr_pci_msi, struct spapr_pci_msi),
+
+        VMSTATE_END_OF_LIST()
+    },
+};
+
 static void spapr_phb_class_init(ObjectClass *klass, void *data)
 {
     SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass);
@@ -702,6 +750,7 @@  static void spapr_phb_class_init(ObjectClass *klass, void *data)
     sdc->init = spapr_phb_init;
     dc->props = spapr_phb_properties;
     dc->reset = spapr_phb_reset;
+    dc->vmsd = &vmstate_spapr_pci;
 }
 
 static const TypeInfo spapr_phb_info = {
diff --git a/include/hw/pci-host/spapr.h b/include/hw/pci-host/spapr.h
index 1e23dbf..93f9511 100644
--- a/include/hw/pci-host/spapr.h
+++ b/include/hw/pci-host/spapr.h
@@ -52,14 +52,14 @@  typedef struct sPAPRPHBState {
     sPAPRTCETable *tcet;
     AddressSpace iommu_as;
 
-    struct {
+    struct spapr_pci_lsi {
         uint32_t irq;
     } lsi_table[PCI_NUM_PINS];
 
-    struct {
+    struct spapr_pci_msi {
         uint32_t config_addr;
         uint32_t irq;
-        int nvec;
+        uint32_t nvec;
     } msi_table[SPAPR_MSIX_MAX_DEVS];
 
     QLIST_ENTRY(sPAPRPHBState) list;