Commit 18fdb1c5c614ebdf9c3ea9ef0a548bd81cc1f981

Authored by ths
1 parent 2cfc5f17

Various NICs: Fix suspend/resume of multiple instances, by Jan Kiszka.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4892 c046a42c-6fe2-441c-8c8c-71466251a162
hw/e1000.c
@@ -76,7 +76,6 @@ typedef struct E1000State_st { @@ -76,7 +76,6 @@ typedef struct E1000State_st {
76 PCIDevice dev; 76 PCIDevice dev;
77 VLANClientState *vc; 77 VLANClientState *vc;
78 NICInfo *nd; 78 NICInfo *nd;
79 - uint32_t instance;  
80 uint32_t mmio_base; 79 uint32_t mmio_base;
81 int mmio_index; 80 int mmio_index;
82 81
@@ -814,7 +813,6 @@ nic_save(QEMUFile *f, void *opaque) @@ -814,7 +813,6 @@ nic_save(QEMUFile *f, void *opaque)
814 int i, j; 813 int i, j;
815 814
816 pci_device_save(&s->dev, f); 815 pci_device_save(&s->dev, f);
817 - qemu_put_be32s(f, &s->instance);  
818 qemu_put_be32s(f, &s->mmio_base); 816 qemu_put_be32s(f, &s->mmio_base);
819 qemu_put_be32s(f, &s->rxbuf_size); 817 qemu_put_be32s(f, &s->rxbuf_size);
820 qemu_put_be32s(f, &s->rxbuf_min_shift); 818 qemu_put_be32s(f, &s->rxbuf_min_shift);
@@ -859,7 +857,8 @@ nic_load(QEMUFile *f, void *opaque, int version_id) @@ -859,7 +857,8 @@ nic_load(QEMUFile *f, void *opaque, int version_id)
859 857
860 if ((ret = pci_device_load(&s->dev, f)) < 0) 858 if ((ret = pci_device_load(&s->dev, f)) < 0)
861 return ret; 859 return ret;
862 - qemu_get_be32s(f, &s->instance); 860 + if (version_id == 1)
  861 + qemu_get_be32s(f, &i); /* once some unused instance id */
863 qemu_get_be32s(f, &s->mmio_base); 862 qemu_get_be32s(f, &s->mmio_base);
864 qemu_get_be32s(f, &s->rxbuf_size); 863 qemu_get_be32s(f, &s->rxbuf_size);
865 qemu_get_be32s(f, &s->rxbuf_min_shift); 864 qemu_get_be32s(f, &s->rxbuf_min_shift);
@@ -958,7 +957,6 @@ pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn) @@ -958,7 +957,6 @@ pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn)
958 { 957 {
959 E1000State *d; 958 E1000State *d;
960 uint8_t *pci_conf; 959 uint8_t *pci_conf;
961 - static int instance;  
962 uint16_t checksum = 0; 960 uint16_t checksum = 0;
963 char *info_str = "e1000"; 961 char *info_str = "e1000";
964 int i; 962 int i;
@@ -989,8 +987,6 @@ pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn) @@ -989,8 +987,6 @@ pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn)
989 pci_register_io_region((PCIDevice *)d, 1, IOPORT_SIZE, 987 pci_register_io_region((PCIDevice *)d, 1, IOPORT_SIZE,
990 PCI_ADDRESS_SPACE_IO, ioport_map); 988 PCI_ADDRESS_SPACE_IO, ioport_map);
991 989
992 - d->instance = instance++;  
993 -  
994 d->nd = nd; 990 d->nd = nd;
995 memmove(d->eeprom_data, e1000_eeprom_template, 991 memmove(d->eeprom_data, e1000_eeprom_template,
996 sizeof e1000_eeprom_template); 992 sizeof e1000_eeprom_template);
@@ -1016,5 +1012,5 @@ pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn) @@ -1016,5 +1012,5 @@ pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn)
1016 d->nd->macaddr[0], d->nd->macaddr[1], d->nd->macaddr[2], 1012 d->nd->macaddr[0], d->nd->macaddr[1], d->nd->macaddr[2],
1017 d->nd->macaddr[3], d->nd->macaddr[4], d->nd->macaddr[5]); 1013 d->nd->macaddr[3], d->nd->macaddr[4], d->nd->macaddr[5]);
1018 1014
1019 - register_savevm(info_str, d->instance, 1, nic_save, nic_load, d); 1015 + register_savevm(info_str, -1, 2, nic_save, nic_load, d);
1020 } 1016 }
hw/eepro100.c
@@ -1792,8 +1792,7 @@ static void nic_init(PCIBus * bus, NICInfo * nd, @@ -1792,8 +1792,7 @@ static void nic_init(PCIBus * bus, NICInfo * nd,
1792 1792
1793 qemu_register_reset(nic_reset, s); 1793 qemu_register_reset(nic_reset, s);
1794 1794
1795 - /* XXX: instance number ? */  
1796 - register_savevm(name, 0, 3, nic_save, nic_load, s); 1795 + register_savevm(name, -1, 3, nic_save, nic_load, s);
1797 } 1796 }
1798 1797
1799 void pci_i82551_init(PCIBus * bus, NICInfo * nd, int devfn) 1798 void pci_i82551_init(PCIBus * bus, NICInfo * nd, int devfn)
hw/ne2000.c
@@ -753,7 +753,7 @@ void isa_ne2000_init(int base, qemu_irq irq, NICInfo *nd) @@ -753,7 +753,7 @@ void isa_ne2000_init(int base, qemu_irq irq, NICInfo *nd)
753 s->macaddr[4], 753 s->macaddr[4],
754 s->macaddr[5]); 754 s->macaddr[5]);
755 755
756 - register_savevm("ne2000", 0, 2, ne2000_save, ne2000_load, s); 756 + register_savevm("ne2000", -1, 2, ne2000_save, ne2000_load, s);
757 } 757 }
758 758
759 /***********************************************************/ 759 /***********************************************************/
@@ -823,6 +823,5 @@ void pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn) @@ -823,6 +823,5 @@ void pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn)
823 s->macaddr[4], 823 s->macaddr[4],
824 s->macaddr[5]); 824 s->macaddr[5]);
825 825
826 - /* XXX: instance number ? */  
827 - register_savevm("ne2000", 0, 3, ne2000_save, ne2000_load, s); 826 + register_savevm("ne2000", -1, 3, ne2000_save, ne2000_load, s);
828 } 827 }
hw/pcnet.c
@@ -1916,7 +1916,7 @@ static void pcnet_common_init(PCNetState *d, NICInfo *nd, const char *info_str) @@ -1916,7 +1916,7 @@ static void pcnet_common_init(PCNetState *d, NICInfo *nd, const char *info_str)
1916 d->vc = NULL; 1916 d->vc = NULL;
1917 } 1917 }
1918 pcnet_h_reset(d); 1918 pcnet_h_reset(d);
1919 - register_savevm("pcnet", 0, 2, pcnet_save, pcnet_load, d); 1919 + register_savevm("pcnet", -1, 2, pcnet_save, pcnet_load, d);
1920 } 1920 }
1921 1921
1922 /* PCI interface */ 1922 /* PCI interface */
hw/rtl8139.c
@@ -3454,8 +3454,7 @@ void pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn) @@ -3454,8 +3454,7 @@ void pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn)
3454 s->cplus_txbuffer_len = 0; 3454 s->cplus_txbuffer_len = 0;
3455 s->cplus_txbuffer_offset = 0; 3455 s->cplus_txbuffer_offset = 0;
3456 3456
3457 - /* XXX: instance number ? */  
3458 - register_savevm("rtl8139", 0, 3, rtl8139_save, rtl8139_load, s); 3457 + register_savevm("rtl8139", -1, 3, rtl8139_save, rtl8139_load, s);
3459 3458
3460 #if RTL8139_ONBOARD_TIMER 3459 #if RTL8139_ONBOARD_TIMER
3461 s->timer = qemu_new_timer(vm_clock, rtl8139_timer, s); 3460 s->timer = qemu_new_timer(vm_clock, rtl8139_timer, s);
@@ -6081,7 +6081,9 @@ typedef struct SaveStateEntry { @@ -6081,7 +6081,9 @@ typedef struct SaveStateEntry {
6081 static SaveStateEntry *first_se; 6081 static SaveStateEntry *first_se;
6082 6082
6083 /* TODO: Individual devices generally have very little idea about the rest 6083 /* TODO: Individual devices generally have very little idea about the rest
6084 - of the system, so instance_id should be removed/replaced. */ 6084 + of the system, so instance_id should be removed/replaced.
  6085 + Meanwhile pass -1 as instance_id if you do not already have a clearly
  6086 + distinguishing id for all instances of your device class. */
6085 int register_savevm(const char *idstr, 6087 int register_savevm(const char *idstr,
6086 int instance_id, 6088 int instance_id,
6087 int version_id, 6089 int version_id,