diff options
author | Amos Kong <akong@redhat.com> | 2013-11-05 19:17:18 +0800 |
---|---|---|
committer | Anthony Liguori <aliguori@amazon.com> | 2013-11-06 21:46:25 -0800 |
commit | cd5be5829c1ce87aa6b3a7806524fac07ac9a757 (patch) | |
tree | 6a3a0242545d5f1ad25a6ccbe08801f57605e640 | |
parent | fe2dafa02de4f80ab36f6e0f4ddfcd6418c03c49 (diff) |
e1000/rtl8139: update HMP NIC when every bit is written
We currently just update the HMP NIC info when the last bit of macaddr
is written. This assumes that guest driver will write all the macaddr
from bit 0 to bit 5 when it changes the macaddr, this is the current
behavior of linux driver (e1000/rtl8139cp), but we can't do this
assumption.
The macaddr that is used for rx-filter will be updated when every bit
is changed. This patch updates the e1000/rtl8139 nic to update HMP NIC
info when every bit is changed. It will be same as virtio-net.
Signed-off-by: Amos Kong <akong@redhat.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
Message-id: 1383650238-16015-1-git-send-email-akong@redhat.com
Signed-off-by: Anthony Liguori <aliguori@amazon.com>
-rw-r--r-- | hw/net/e1000.c | 2 | ||||
-rw-r--r-- | hw/net/rtl8139.c | 5 |
2 files changed, 2 insertions, 5 deletions
diff --git a/hw/net/e1000.c b/hw/net/e1000.c index 8387443ee3..ae6359117d 100644 --- a/hw/net/e1000.c +++ b/hw/net/e1000.c @@ -1106,7 +1106,7 @@ mac_writereg(E1000State *s, int index, uint32_t val) s->mac_reg[index] = val; - if (index == RA + 1) { + if (index == RA || index == RA + 1) { macaddr[0] = cpu_to_le32(s->mac_reg[RA]); macaddr[1] = cpu_to_le32(s->mac_reg[RA + 1]); qemu_format_nic_info_str(qemu_get_queue(s->nic), (uint8_t *)macaddr); diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c index 5329f44a9d..7f2b4db449 100644 --- a/hw/net/rtl8139.c +++ b/hw/net/rtl8139.c @@ -2741,10 +2741,7 @@ static void rtl8139_io_writeb(void *opaque, uint8_t addr, uint32_t val) switch (addr) { - case MAC0 ... MAC0+4: - s->phys[addr - MAC0] = val; - break; - case MAC0+5: + case MAC0 ... MAC0+5: s->phys[addr - MAC0] = val; qemu_format_nic_info_str(qemu_get_queue(s->nic), s->phys); break; |