qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 1/2] net: forbid the reentrant RX


From: Jason Wang
Subject: Re: [PATCH 1/2] net: forbid the reentrant RX
Date: Tue, 28 Jul 2020 12:00:18 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0


On 2020/7/22 下午4:57, Jason Wang wrote:
The memory API allows DMA into NIC's MMIO area. This means the NIC's
RX routine must be reentrant. Instead of auditing all the NIC, we can
simply detect the reentrancy and return early. The queue->delivering
is set and cleared by qemu_net_queue_deliver() for other queue helpers
to know whether the delivering in on going (NIC's receive is being
called). We can check it and return early in qemu_net_queue_flush() to
forbid reentrant RX.

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
  net/queue.c | 3 +++
  1 file changed, 3 insertions(+)

diff --git a/net/queue.c b/net/queue.c
index 0164727e39..19e32c80fd 100644
--- a/net/queue.c
+++ b/net/queue.c
@@ -250,6 +250,9 @@ void qemu_net_queue_purge(NetQueue *queue, NetClientState 
*from)
bool qemu_net_queue_flush(NetQueue *queue)
  {
+    if (queue->delivering)
+        return false;
+
      while (!QTAILQ_EMPTY(&queue->packets)) {
          NetPacket *packet;
          int ret;


Queued for rc2.

Thanks




reply via email to

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