uhci: invalidate queue on device address changes
authorGerd Hoffmann <kraxel@redhat.com>
Wed, 5 Feb 2014 13:54:14 +0000 (14:54 +0100)
committerGerd Hoffmann <kraxel@redhat.com>
Tue, 18 Feb 2014 14:39:13 +0000 (15:39 +0100)
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
hw/usb/hcd-uhci.c

index ad814b5..0820244 100644 (file)
@@ -252,9 +252,11 @@ static bool uhci_queue_verify(UHCIQueue *queue, uint32_t qh_addr, UHCI_TD *td,
                               uint32_t td_addr, bool queuing)
 {
     UHCIAsync *first = QTAILQ_FIRST(&queue->asyncs);
+    uint32_t queue_token_addr = (queue->token >> 8) & 0x7f;
 
     return queue->qh_addr == qh_addr &&
            queue->token == uhci_queue_token(td) &&
+           queue_token_addr == queue->ep->dev->addr &&
            (queuing || !(td->ctrl & TD_CTRL_ACTIVE) || first == NULL ||
             first->td_addr == td_addr);
 }