Revision 2c7b15c1 hw/usb/hcd-ehci.c

b/hw/usb/hcd-ehci.c
1550 1550
    endp    = get_field(qh.epchar, QH_EPCHAR_EP);
1551 1551
    if ((devaddr != get_field(q->qh.epchar, QH_EPCHAR_DEVADDR)) ||
1552 1552
        (endp    != get_field(q->qh.epchar, QH_EPCHAR_EP)) ||
1553
        (memcmp(&qh.current_qtd, &q->qh.current_qtd,
1554
                                 9 * sizeof(uint32_t)) != 0) ||
1553
        (qh.current_qtd != q->qh.current_qtd) ||
1554
        (q->async && qh.next_qtd != q->qh.next_qtd) ||
1555
        (memcmp(&qh.altnext_qtd, &q->qh.altnext_qtd,
1556
                                 7 * sizeof(uint32_t)) != 0) ||
1555 1557
        (q->dev != NULL && q->dev->addr != devaddr)) {
1556 1558
        if (ehci_reset_queue(q) > 0) {
1557 1559
            ehci_trace_guest_bug(ehci, "guest updated active QH");
......
1719 1721
    p = QTAILQ_FIRST(&q->packets);
1720 1722
    if (p != NULL) {
1721 1723
        if (p->qtdaddr != q->qtdaddr ||
1722
            (!NLPTR_TBIT(p->qtd.next) && (p->qtd.next != qtd.next)) ||
1724
            (q->async && !NLPTR_TBIT(p->qtd.next) &&
1725
                (p->qtd.next != qtd.next)) ||
1723 1726
            (!NLPTR_TBIT(p->qtd.altnext) && (p->qtd.altnext != qtd.altnext)) ||
1724 1727
            p->qtd.bufptr[0] != qtd.bufptr[0]) {
1725 1728
            ehci_cancel_queue(q);

Also available in: Unified diff