• Stanislaw Gruszka's avatar
    rt2x00: tune multi-registers I/O timeout · e9dc51aa
    Stanislaw Gruszka authored
    We provide timeout value to rt2x00usb_vendor_request_buff() based on
    number of registers to process. That value is passed down to
    rt2x00usb_vendor_req_buff_lock() and ends in usb_control_msg(). But we
    do not read/write all registers in rt2x00usb_vendor_req_buff_lock() at
    once. We read/write them in chunks of 64 bytes in the loop, hence passed
    timeout value to low level is too big.
    
    Patch removes timeout argument from rt2x00usb_vendor_request_buff() and
    use short REGISTER_TIMEOUT in rt2x00usb_vendor_req_buff_lock(). That
    timeout value should be fine for 64 bytes and smaller requests. For
    EEPROM read we introduced new timeout value equal to 2 seconds.
    
    Patch fixes process uninterruptible sleep stalls for long period, when
    USB bus has problem to satisfy a request and we wait very long time on
    usb_start_wait_urb().
    Reported-and-tested-by: default avatarSakari Ailus <sakari.ailus@iki.fi>
    Signed-off-by: default avatarStanislaw Gruszka <sgruszka@redhat.com>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    e9dc51aa
rt2x00usb.c 22.2 KB