> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-boun...@osuosl.org> On Behalf Of > Alan Brady > Sent: Thursday, February 22, 2024 11:05 AM > To: intel-wired-...@lists.osuosl.org > Cc: Kitszel, Przemyslaw <przemyslaw.kits...@intel.com>; Hay, Joshua A > <joshua.a....@intel.com>; Lobakin, Aleksander > <aleksander.loba...@intel.com>; Brady, Alan <alan.br...@intel.com>; > net...@vger.kernel.org; Bagnucki, Igor <igor.bagnu...@intel.com> > Subject: [Intel-wired-lan] [PATCH v6 02/11 iwl-next] idpf: implement virtchnl > transaction manager > > 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: Alexander Lobakin <aleksander.loba...@intel.com> > Reviewed-by: Przemek Kitszel <przemyslaw.kits...@intel.com> > Reviewed-by: Igor Bagnucki <igor.bagnu...@intel.com> > Co-developed-by: Joshua Hay <joshua.a....@intel.com> > Signed-off-by: Joshua Hay <joshua.a....@intel.com> > Signed-off-by: Alan Brady <alan.br...@intel.com> > --- > drivers/net/ethernet/intel/idpf/idpf.h | 6 +- > .../ethernet/intel/idpf/idpf_controlq_api.h | 5 + > drivers/net/ethernet/intel/idpf/idpf_lib.c | 2 + > drivers/net/ethernet/intel/idpf/idpf_main.c | 3 + > drivers/net/ethernet/intel/idpf/idpf_vf_dev.c | 2 +- > .../net/ethernet/intel/idpf/idpf_virtchnl.c | 614 ++++++++++++++++-- > .../net/ethernet/intel/idpf/idpf_virtchnl.h | 2 +- > 7 files changed, 561 insertions(+), 73 deletions(-) > > diff --git a/drivers/net/ethernet/intel/idpf/idpf.h > b/drivers/net/ethernet/intel/idpf/idpf.h > index b2f1bc63c3b6..c3b08d4593b0 100644 > --- a/drivers/net/ethernet/intel/idpf/idpf.h > +++ b/drivers/net/ethernet/intel/idpf/idpf.h
Tested-by: Krishneil Singh <krishneil.k.si...@intel.com>