• Mika Westerberg's avatar
    thunderbolt: Rework control channel to be more reliable · d7f781bf
    Mika Westerberg authored
    If a request times out the response might arrive right after the request
    is failed. This response is pushed to the kfifo and next request will
    read it instead. Since it most likely will not pass our validation
    checks in parse_header() the next request will fail as well, and
    response to that request will be pushed to the kfifo, ad infinitum.
    
    We end up in a situation where all requests fail and no devices can be
    added anymore until the driver is unloaded and reloaded again.
    
    To overcome this, rework the control channel so that we will have a
    queue of outstanding requests. Each request will be handled in turn and
    the response is validated against what is expected. Unexpected packets
    (for example responses for requests that have been timed out) are
    dropped. This model is copied from Greybus implementation with small
    changes here and there to get it cope with Thunderbolt control packets.
    
    In addition the configuration packets support sequence number whic...
    d7f781bf
ctl.h 4.55 KB