• H
    ehci: Retry to fill the queue while waiting for td completion · b4ea8664
    Hans de Goede 提交于
    If the guest is using multiple transfers to try and keep the usb bus busy /
    used at maximum efficiency, currently we would see / do the following:
    
    1) submit transfer 1 to the device
    2) submit transfer 2 to the device
    3) report transfer 1 completion to guest
    4) report transfer 2 completion to guest
    5) submit transfer 1 to the device
    6) report transfer 1 completion to guest
    7) submit transfer 2 to the device
    8) report transfer 2 completion to guest
    etc.
    
    So after the initial submission we would effectively only have 1 transfer
    in flight, rather then 2. This is caused by us not checking the queue for
    addition of new transfers by the guest (ie the resubmission of a recently
    finished transfer), while waiting for a pending transfer to complete.
    This patch does add a check for this, changing the sequence to:
    
    1) submit transfer 1 to the device
    2) submit transfer 2 to the device
    3) report transfer 1 completion to guest
    4) submit transfer 1 to the device
    5) report transfer 2 completion to guest
    6) submit transfer 2 to the device
    etc.
    
    Thus keeping 2 transfers in flight (most of the time, and always 1),
    as intended by the guest.
    Signed-off-by: NHans de Goede <hdegoede@redhat.com>
    Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
    b4ea8664
hcd-ehci.c 81.9 KB