Revert "e1000/rtl8139: update HMP NIC when every bit is written"
This reverts commitcd5be5829c
. Digging into hardware specs shows this does not actually make QEMU behave more like hardware: There are valid arguments backed by the spec to indicate why the version of e1000 prior tocd5be582
was more correct: the high byte actually includes a valid bit, this is why all guests write it last. For rtl8139 there's actually a separate undocumented valid bit, but we don't implement it yet. To summarize all the drivers we know about behave in one way that allows us to make an assumption about write order and avoid spurious, incorrect mac address updates to the monitor. Let's stick to the tried heuristic for 1.7 and possibly revisit for 1.8. Reported-by: Vlad Yasevich <vyasevic@redhat.com> Reviewed-by: Vlad Yasevich <vyasevic@redhat.com> Cc: Amos Kong <akong@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
fd8f5e3755
commit
90d131fb65
@ -1106,7 +1106,7 @@ mac_writereg(E1000State *s, int index, uint32_t val)
|
|||||||
|
|
||||||
s->mac_reg[index] = val;
|
s->mac_reg[index] = val;
|
||||||
|
|
||||||
if (index == RA || index == RA + 1) {
|
if (index == RA + 1) {
|
||||||
macaddr[0] = cpu_to_le32(s->mac_reg[RA]);
|
macaddr[0] = cpu_to_le32(s->mac_reg[RA]);
|
||||||
macaddr[1] = cpu_to_le32(s->mac_reg[RA + 1]);
|
macaddr[1] = cpu_to_le32(s->mac_reg[RA + 1]);
|
||||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), (uint8_t *)macaddr);
|
qemu_format_nic_info_str(qemu_get_queue(s->nic), (uint8_t *)macaddr);
|
||||||
|
@ -2741,7 +2741,10 @@ static void rtl8139_io_writeb(void *opaque, uint8_t addr, uint32_t val)
|
|||||||
|
|
||||||
switch (addr)
|
switch (addr)
|
||||||
{
|
{
|
||||||
case MAC0 ... MAC0+5:
|
case MAC0 ... MAC0+4:
|
||||||
|
s->phys[addr - MAC0] = val;
|
||||||
|
break;
|
||||||
|
case MAC0+5:
|
||||||
s->phys[addr - MAC0] = val;
|
s->phys[addr - MAC0] = val;
|
||||||
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->phys);
|
qemu_format_nic_info_str(qemu_get_queue(s->nic), s->phys);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user