ehci: fix td writeback
Only write back the dwords the hc is supposed to update. Should not make a difference in theory as the guest must not touch the td while it is active to avoid races. But it is still more correct. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
a5e0139ab6
commit
4ed1c57a64
@ -2070,6 +2070,7 @@ out:
|
||||
static int ehci_state_writeback(EHCIQueue *q)
|
||||
{
|
||||
EHCIPacket *p = QTAILQ_FIRST(&q->packets);
|
||||
uint32_t *qtd, addr;
|
||||
int again = 0;
|
||||
|
||||
/* Write back the QTD from the QH area */
|
||||
@ -2077,8 +2078,9 @@ static int ehci_state_writeback(EHCIQueue *q)
|
||||
assert(p->qtdaddr == q->qtdaddr);
|
||||
|
||||
ehci_trace_qtd(q, NLPTR_GET(p->qtdaddr), (EHCIqtd *) &q->qh.next_qtd);
|
||||
put_dwords(q->ehci, NLPTR_GET(p->qtdaddr), (uint32_t *) &q->qh.next_qtd,
|
||||
sizeof(EHCIqtd) >> 2);
|
||||
qtd = (uint32_t *) &q->qh.next_qtd;
|
||||
addr = NLPTR_GET(p->qtdaddr);
|
||||
put_dwords(q->ehci, addr + 2 * sizeof(uint32_t), qtd + 2, 2);
|
||||
ehci_free_packet(p);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user