• Alan Brady's avatar
    idpf: implement virtchnl transaction manager · 34c21fa8
    Alan Brady authored
    This starts refactoring how virtchnl messages are handled by adding a
    transaction manager (idpf_vc_xn_manager).
    
    There are two primary motivations here which are to enable handling of
    multiple messages at once and to make it more robust in general. As it
    is right now, the driver may only have one pending message at a time and
    there's no guarantee that the response we receive was actually intended
    for the message we sent prior.
    
    This works by utilizing a "cookie" field of the message descriptor. It
    is arbitrary what data we put in the cookie and the response is required
    to have the same cookie the original message was sent with. Then using a
    "transaction" abstraction that uses the completion API to pair responses
    to the message it belongs to.
    
    The cookie works such that the first half is the index to the
    transaction in our array, and the second half is a "salt" that gets
    incremented every message. This enables quick lookups into the array and
    also ensuring we have the correct message. The salt is necessary because
    after, for example, a message times out and we deem the response was
    lost for some reason, we could theoretically reuse the same index but
    using a different salt ensures that when we do actually get a response
    it's not the old message that timed out previously finally coming in.
    Since the number of transactions allocated is U8_MAX and the salt is 8
    bits, we can never have a conflict because we can't roll over the salt
    without using more transactions than we have available.
    
    This starts by only converting the VIRTCHNL2_OP_VERSION message to use
    this new transaction API. Follow up patches will convert all virtchnl
    messages to use the API.
    Tested-by: default avatarAlexander Lobakin <aleksander.lobakin@intel.com>
    Reviewed-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
    Reviewed-by: default avatarIgor Bagnucki <igor.bagnucki@intel.com>
    Co-developed-by: default avatarJoshua Hay <joshua.a.hay@intel.com>
    Signed-off-by: default avatarJoshua Hay <joshua.a.hay@intel.com>
    Signed-off-by: default avatarAlan Brady <alan.brady@intel.com>
    Tested-by: default avatarKrishneil Singh <krishneil.k.singh@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    34c21fa8
idpf_virtchnl.c 117 KB