qemu-devel
[Top][All Lists]
Advanced

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

[Bug 1853123] Re: Memory synchronization error between kvm and target,


From: Thomas Huth
Subject: [Bug 1853123] Re: Memory synchronization error between kvm and target, e1000(dpdk)
Date: Thu, 22 Apr 2021 08:59:19 -0000

The QEMU project is currently considering to move its bug tracking to
another system. For this we need to know which bugs are still valid
and which could be closed already. Thus we are setting older bugs to
"Incomplete" now.

If you still think this bug report here is valid, then please switch
the state back to "New" within the next 60 days, otherwise this report
will be marked as "Expired". Or please mark it as "Fix Released" if
the problem has been solved with a newer version of QEMU already.

Thank you and sorry for the inconvenience.


** Changed in: qemu
       Status: New => Incomplete

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1853123

Title:
  Memory synchronization error between kvm and target, e1000(dpdk)

Status in QEMU:
  Incomplete

Bug description:
  Hi folks.

  I use linux with dpdk drivers on the target system, and e1000 emulation 
device with tap interface for host. I use kvm for accelerate.
  Version qemu 4.0.94 and master (Nov 12 10:14:33 2019)
  Version dpdk stable-17.11.4
  Version linux host 4.15.0-66-generic (ubuntu 18.04)

  I type command "ping <target ip> -f" and wait about 1-2 minutes.
  Network subsystem freezes.

  For receive the eth pack from host system (tap interface) to host
  system the e1000 using ring buffer.

  The e1000 write body of eth pack, set E1000_RXD_STAT_DD flag and move RDH 
(Ring Device Head).
  (file hw/net/e1000.c function e1000_receive_iov() )

  The dpdk driver is reading from E1000_RXD_STAT_DD flags (ignoring RDH), if 
flag is set: read buffer, unset flag E1000_RXD_STAT_DD and move RDT (Ring 
Device Tail).
  (source drivers/net/e1000/em_rxtx.c function eth_em_recv_scattered_pkts() )

  I see what the driver unet E1000_RXD_STAT_DD (rxdp->status = 0; ), but
  sometimes rxdp->status remains equal to 7. On the next cycle, this
  this buffer is read, RDT moved to far. RDH becomes equal RDT and
  network is freezes.

  If I insert some delay after unset E1000_RXD_STAT_DD, and repeatedly unset 
E1000_RXD_STAT_DD (if rxdp->status == 7 ), then all work fine.
  If check E1000_RXD_STAT_DD without delay, status rxdp->status always valid.

  This only appears on kvm. If I use tcg all works fine.

  I trying set watchpoint for memory on the qemu (for tcg), and see,
  that for one package cycle of set/unse STAT_DD repeated once.

  I trying set watchpoint for memory on the qemu (for kvm), and see,
  that rxdp->status changed to 0(unset) only once, but is changes
  immediately before set flag.

  
  Please help me with advice on how to catch and fix this error. 
  Theoretically, it would help me to trace the memory access when writing to 
E1000_RXD_STAT_DD, RHD and RDT, both from the target and the host system. But I 
have no idea how this can be done.

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1853123/+subscriptions



reply via email to

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