qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] e1000/rtl8139: update HMP NIC when every bit is


From: Michael S. Tsirkin
Subject: Re: [Qemu-devel] [PATCH] e1000/rtl8139: update HMP NIC when every bit is written
Date: Mon, 18 Nov 2013 17:02:36 +0200

On Tue, Nov 05, 2013 at 07:17:18PM +0800, Amos Kong wrote:
> 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 <address@hidden>

Vlad here told me he did some research and this
does not actually match hardware behaviour
for either e1000 or rtl8139.

Vlad, would you like to elaborate on-list?

I think we should revert this for 1.8 and
look at emulating actual hardware behaviour.

> ---
>  hw/net/e1000.c   | 2 +-
>  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 ec8ecd7..2d60639 100644
> --- a/hw/net/e1000.c
> +++ b/hw/net/e1000.c
> @@ -1110,7 +1110,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 5329f44..7f2b4db 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;
> -- 
> 1.8.3.1
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]