• S
    USB: xhci: Minimize HW event ring dequeue pointer writes. · c06d68b8
    Sarah Sharp 提交于
    The xHCI specification suggests that writing the hardware event ring dequeue
    pointer register too often can be an expensive operation for the xHCI hardware
    to manage.  It suggests minimizing the number of writes to that register.
    
    Originally, the driver wrote the event ring dequeue pointer after each
    event was processed.  Depending on how the event ring moderation register
    is set up and how fast the transfers are completing, there may be several
    events processed for each interrupt.  This patch makes the hardware event
    ring dequeue pointer be written only once per interrupt.
    
    Make the transfer event handler and port status event handler only write
    the software event ring dequeue pointer.  Move the updating of the
    hardware event ring dequeue pointer into the interrupt function.  Move the
    contents of xhci_set_hc_event_deq() into the interrupt handler.  The
    interrupt handler must clear the event handler busy flag, so it might as
    well also write the dequeue pointer to the same register.  This eliminates
    two 32-bit PCI reads and two 32-bit PCI writes.
    Reported-by: NAndiry Xu <andiry.xu@amd.com>
    Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
    c06d68b8
xhci-ring.c 97.5 KB