* [Qemu-devel] [PATCH v5 0/3] net: fix link status
@ 2012-09-28 2:05 Amos Kong
2012-09-28 2:06 ` [Qemu-devel] [PATCH v5 1/3] rtl8139: implement 8139cp " Amos Kong
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Amos Kong @ 2012-09-28 2:05 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, jasowang, pbonzini, aliguori, mst
First patch implemeted link status setting of rtl8139, the rest patches
updated nc.link_down in post_load() of migration to keep it coincident
with real link status.
v5: fix bug in bit operating
Amos Kong (2):
e1000: update nc.link_down in e1000_post_load()
update nc.link_down in virtio_net_load()
Jason Wang (1):
rtl8139: implement 8139cp link status
hw/e1000.c | 12 ++++++++++++
hw/rtl8139.c | 24 ++++++++++++++++++++++--
hw/virtio-net.c | 5 +++++
3 files changed, 39 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH v5 1/3] rtl8139: implement 8139cp link status
2012-09-28 2:05 [Qemu-devel] [PATCH v5 0/3] net: fix link status Amos Kong
@ 2012-09-28 2:06 ` Amos Kong
2012-09-28 2:06 ` [Qemu-devel] [PATCH v5 2/3] e1000: update nc.link_down in e1000_post_load() Amos Kong
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Amos Kong @ 2012-09-28 2:06 UTC (permalink / raw)
To: qemu-devel; +Cc: aliguori, mst, stefanha, jasowang, pbonzini, Amos Kong
From: Jason Wang <jasowang@redhat.com>
Add a link status chang callback and change the link status bit in BMSR
& MSR accordingly. Tested in Linux/Windows guests.
The link status bit of MediaStatus is infered from BasicModeStatus,
they are inverse.
nc.link_down could not be migrated, this patch updates link_down in
rtl8139_post_load() to keep it coincident with real link status.
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Amos Kong <akong@redhat.com>
---
v2: don't add MediaState in RTL8139State to avoid trouble
v3: adding an enum MediaStatusBits
v4: correct nc.link_down in the end of migration
v5: fix bug in bit operating
---
hw/rtl8139.c | 24 ++++++++++++++++++++++--
1 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index 844f1b8..ae68f55 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -167,7 +167,7 @@ enum IntrStatusBits {
PCIErr = 0x8000,
PCSTimeout = 0x4000,
RxFIFOOver = 0x40,
- RxUnderrun = 0x20,
+ RxUnderrun = 0x20, /* Packet Underrun / Link Change */
RxOverflow = 0x10,
TxErr = 0x08,
TxOK = 0x04,
@@ -3007,7 +3007,8 @@ static uint32_t rtl8139_io_readb(void *opaque, uint8_t addr)
break;
case MediaStatus:
- ret = 0xd0;
+ /* The LinkDown bit of MediaStatus is inverse with link status */
+ ret = 0xd0 | (~s->BasicModeStatus & 0x04);
DPRINTF("MediaStatus read 0x%x\n", ret);
break;
@@ -3262,6 +3263,10 @@ static int rtl8139_post_load(void *opaque, int version_id)
s->cplus_enabled = s->CpCmd != 0;
}
+ /* nc.link_down can't be migrated, so infer link_down according
+ * to link status bit in BasicModeStatus */
+ s->nic->nc.link_down = (s->BasicModeStatus & 0x04) == 0;
+
return 0;
}
@@ -3453,12 +3458,27 @@ static void pci_rtl8139_uninit(PCIDevice *dev)
qemu_del_net_client(&s->nic->nc);
}
+static void rtl8139_set_link_status(NetClientState *nc)
+{
+ RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque;
+
+ if (nc->link_down) {
+ s->BasicModeStatus &= ~0x04;
+ } else {
+ s->BasicModeStatus |= 0x04;
+ }
+
+ s->IntrStatus |= RxUnderrun;
+ rtl8139_update_irq(s);
+}
+
static NetClientInfo net_rtl8139_info = {
.type = NET_CLIENT_OPTIONS_KIND_NIC,
.size = sizeof(NICState),
.can_receive = rtl8139_can_receive,
.receive = rtl8139_receive,
.cleanup = rtl8139_cleanup,
+ .link_status_changed = rtl8139_set_link_status,
};
static int pci_rtl8139_init(PCIDevice *dev)
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH v5 2/3] e1000: update nc.link_down in e1000_post_load()
2012-09-28 2:05 [Qemu-devel] [PATCH v5 0/3] net: fix link status Amos Kong
2012-09-28 2:06 ` [Qemu-devel] [PATCH v5 1/3] rtl8139: implement 8139cp " Amos Kong
@ 2012-09-28 2:06 ` Amos Kong
2012-09-28 2:06 ` [Qemu-devel] [PATCH v5 3/3] update nc.link_down in virtio_net_load() Amos Kong
2012-10-04 17:02 ` [Qemu-devel] [PATCH v5 0/3] net: fix link status Stefan Hajnoczi
3 siblings, 0 replies; 5+ messages in thread
From: Amos Kong @ 2012-09-28 2:06 UTC (permalink / raw)
To: qemu-devel; +Cc: aliguori, mst, stefanha, jasowang, pbonzini, Amos Kong
This patch introduced e1000_post_load(), it will be called in the end of
migration. nc.link_down could not be migrated, this patch updates
link_down in e1000_post_load() to keep it coincident with real link
status.
Signed-off-by: Amos Kong <akong@redhat.com>
---
hw/e1000.c | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/hw/e1000.c b/hw/e1000.c
index ec3a7c4..63fee10 100644
--- a/hw/e1000.c
+++ b/hw/e1000.c
@@ -1079,11 +1079,23 @@ static bool is_version_1(void *opaque, int version_id)
return version_id == 1;
}
+static int e1000_post_load(void *opaque, int version_id)
+{
+ E1000State *s = opaque;
+
+ /* nc.link_down can't be migrated, so infer link_down according
+ * to link status bit in mac_reg[STATUS] */
+ s->nic->nc.link_down = (s->mac_reg[STATUS] & E1000_STATUS_LU) == 0;
+
+ return 0;
+}
+
static const VMStateDescription vmstate_e1000 = {
.name = "e1000",
.version_id = 2,
.minimum_version_id = 1,
.minimum_version_id_old = 1,
+ .post_load = e1000_post_load,
.fields = (VMStateField []) {
VMSTATE_PCI_DEVICE(dev, E1000State),
VMSTATE_UNUSED_TEST(is_version_1, 4), /* was instance id */
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH v5 3/3] update nc.link_down in virtio_net_load()
2012-09-28 2:05 [Qemu-devel] [PATCH v5 0/3] net: fix link status Amos Kong
2012-09-28 2:06 ` [Qemu-devel] [PATCH v5 1/3] rtl8139: implement 8139cp " Amos Kong
2012-09-28 2:06 ` [Qemu-devel] [PATCH v5 2/3] e1000: update nc.link_down in e1000_post_load() Amos Kong
@ 2012-09-28 2:06 ` Amos Kong
2012-10-04 17:02 ` [Qemu-devel] [PATCH v5 0/3] net: fix link status Stefan Hajnoczi
3 siblings, 0 replies; 5+ messages in thread
From: Amos Kong @ 2012-09-28 2:06 UTC (permalink / raw)
To: qemu-devel; +Cc: aliguori, mst, stefanha, jasowang, pbonzini, Amos Kong
nc.link_down could not be migrated, this patch updates link_down in
virtio_post_load() to keep it coincident with real link status.
Signed-off-by: Amos Kong <akong@redhat.com>
---
hw/virtio-net.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index 6490743..f3d4acf 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -973,6 +973,11 @@ static int virtio_net_load(QEMUFile *f, void *opaque, int version_id)
}
}
n->mac_table.first_multi = i;
+
+ /* nc.link_down can't be migrated, so infer link_down according
+ * to link status bit in n->status */
+ n->nic->nc.link_down = (n->status & VIRTIO_NET_S_LINK_UP) == 0;
+
return 0;
}
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH v5 0/3] net: fix link status
2012-09-28 2:05 [Qemu-devel] [PATCH v5 0/3] net: fix link status Amos Kong
` (2 preceding siblings ...)
2012-09-28 2:06 ` [Qemu-devel] [PATCH v5 3/3] update nc.link_down in virtio_net_load() Amos Kong
@ 2012-10-04 17:02 ` Stefan Hajnoczi
3 siblings, 0 replies; 5+ messages in thread
From: Stefan Hajnoczi @ 2012-10-04 17:02 UTC (permalink / raw)
To: Amos Kong; +Cc: pbonzini, jasowang, aliguori, qemu-devel, mst
On Fri, Sep 28, 2012 at 4:05 AM, Amos Kong <akong@redhat.com> wrote:
> First patch implemeted link status setting of rtl8139, the rest patches
> updated nc.link_down in post_load() of migration to keep it coincident
> with real link status.
>
> v5: fix bug in bit operating
>
> Amos Kong (2):
> e1000: update nc.link_down in e1000_post_load()
> update nc.link_down in virtio_net_load()
>
> Jason Wang (1):
> rtl8139: implement 8139cp link status
>
> hw/e1000.c | 12 ++++++++++++
> hw/rtl8139.c | 24 ++++++++++++++++++++++--
> hw/virtio-net.c | 5 +++++
> 3 files changed, 39 insertions(+), 2 deletions(-)
Thanks, merged!
http://github.com/stefanha/qemu/commits/net
Stefan
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-10-04 17:02 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-28 2:05 [Qemu-devel] [PATCH v5 0/3] net: fix link status Amos Kong
2012-09-28 2:06 ` [Qemu-devel] [PATCH v5 1/3] rtl8139: implement 8139cp " Amos Kong
2012-09-28 2:06 ` [Qemu-devel] [PATCH v5 2/3] e1000: update nc.link_down in e1000_post_load() Amos Kong
2012-09-28 2:06 ` [Qemu-devel] [PATCH v5 3/3] update nc.link_down in virtio_net_load() Amos Kong
2012-10-04 17:02 ` [Qemu-devel] [PATCH v5 0/3] net: fix link status Stefan Hajnoczi
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).