Skip to content
Snippets Groups Projects
Commit 22dc8663 authored by Jason Wang's avatar Jason Wang
Browse files

net: forbid the reentrant RX


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: default avatarJason Wang <jasowang@redhat.com>
parent c546ecf2
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment