mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
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: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
c546ecf27d
commit
22dc8663d9
1 changed files with 3 additions and 0 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue