mirror of https://github.com/xemu-project/xemu.git
e1000e: Reset packet state after emptying Tx queue
Keeping Tx packet state after the transmit queue is emptied has some problems: - The datasheet says the descriptors can be reused after the transmit queue is emptied, but the Tx packet state may keep references to them. - The Tx packet state cannot be migrated so it can be reset anytime the migration happens. Always reset Tx packet state always after the queue is emptied. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
5d92e88a50
commit
5c86734025
|
@ -959,6 +959,8 @@ e1000e_start_xmit(E1000ECore *core, const E1000E_TxRing *txr)
|
|||
if (!ide || !e1000e_intrmgr_delay_tx_causes(core, &cause)) {
|
||||
e1000e_set_interrupt_cause(core, cause);
|
||||
}
|
||||
|
||||
net_tx_pkt_reset(txr->tx->tx_pkt, net_tx_pkt_unmap_frag_pci, core->owner);
|
||||
}
|
||||
|
||||
static bool
|
||||
|
@ -3389,8 +3391,6 @@ e1000e_core_pci_uninit(E1000ECore *core)
|
|||
qemu_del_vm_change_state_handler(core->vmstate);
|
||||
|
||||
for (i = 0; i < E1000E_NUM_QUEUES; i++) {
|
||||
net_tx_pkt_reset(core->tx[i].tx_pkt,
|
||||
net_tx_pkt_unmap_frag_pci, core->owner);
|
||||
net_tx_pkt_uninit(core->tx[i].tx_pkt);
|
||||
}
|
||||
|
||||
|
@ -3515,8 +3515,6 @@ static void e1000e_reset(E1000ECore *core, bool sw)
|
|||
e1000x_reset_mac_addr(core->owner_nic, core->mac, core->permanent_mac);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(core->tx); i++) {
|
||||
net_tx_pkt_reset(core->tx[i].tx_pkt,
|
||||
net_tx_pkt_unmap_frag_pci, core->owner);
|
||||
memset(&core->tx[i].props, 0, sizeof(core->tx[i].props));
|
||||
core->tx[i].skip_cp = false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue