• H
    ehci: Use uframe precision for interrupt threshold checking (v2) · 9359a58b
    Hans de Goede 提交于
    Before this patch, the following could happen:
    1) Transfer completes, raises interrupt
    2) .5 ms later we check if the guest has queued up any new transfers
    3) We find and execute a new transfer
    4) .2 ms later the new transfer completes
    5) We re-run our frame_timer to write back the completion, but less then
       1 ms has passed since our last run, so frindex is not changed, so the
       interrupt threshold code delays the interrupt
    6) 1 ms from the re-run our frame-timer runs again and finally delivers
       the interrupt
    
    This leads to unnecessary large delays of interrupts, this code fixes this
    by changing frindex to uframe precision and using that for interrupt threshold
    control, making the interrupt fire at step 5 for guest which have low interrupt
    threshold settings (like Linux).
    
    Note that the guest still sees the frindex move in steps of 8 for migration
    compatibility.
    
    This boosts Linux read speed of a simple cheap USB thumb drive by 6 %.
    
    Changes in v2:
    -Make the guest see frindex move in steps of 8 by modifying ehci_opreg_read,
     rather then using a shadow variable
    Signed-off-by: NHans de Goede <hdegoede@redhat.com>
    Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
    9359a58b
hcd-ehci.c 72.6 KB