mbox series

[iwl-next,0/4] ice: use relative VSI index for VFs VSIs

Message ID 20240216220638.2558451-1-jacob.e.keller@intel.com
Headers show
Series ice: use relative VSI index for VFs VSIs | expand

Message

Jacob Keller Feb. 16, 2024, 10:06 p.m. UTC
The ice driver currently communicates firmware VSI numbers to its virtual
functions over virtchnl. For E800 series hardware, the VF driver has no
direct use of the VSI number.

Some older legacy hardware could use the actual VSI number when
communicating directly to firmware via the AdminQ. The E800 hardware does
not allow this, and all communication happens over mailbox to the PF. The
VFs do not have a direct access to the firmware. Additionally, none of the
registers exposed to the VF depend on the VSI number.

Further, the PF is able to lookup the VSI for the VF without using the
number provided by the VF over virtchnl. Thus, there is no reason that the
number provided to the VF must actually be a real VSI number, nor does it
need to be distinct across multiple VFs.

This series modifies the ice driver to send a relative VSI number to the VF
instead of sending the firmware values. This simplifies the interface with
the VF, as the PF can simply validate this relative number. Currently, only
a single VSI is provided to each VF. Thus, a simple static value of 1 is
used. We can easily extend this to use a proper relative index if we enable
multiple VSIs for a VF in the future.

First, a couple of patches cleanup a few places in the code which still use
the VF VSI IDs. Then, the VSI ID logic over virtchnl is changed to use the
static values. Finally, the vf->lan_vsi_num field is no longer used and only
set, so we can simplify the driver further by removing this entirely.

This eliminates a path for leaking information about the PF state to the VF,
and simplifies the PF driver logic. Several of the removed code flows
required an iterated scan over the VSI list to locate the VSI with the
reported VSI number.

Finally, this has significant value for a future series implementing VF live
migration. Now that the PF always passes relative VSI indexes, migration
will no longer need to worry about migrating the absolute VSI numbers sent
previously, which will simplify both the migration process as well as
continued handling of a migrated VF after a migration event completes.

Jacob Keller (4):
  ice: pass VSI pointer into ice_vc_isvalid_q_id
  ice: remove unnecessary duplicate checks for VF VSI ID
  ice: use relative VSI index for VFs instead of PF VSI number
  ice: remove vf->lan_vsi_num field

 drivers/net/ethernet/intel/ice/ice_sriov.c    |  1 -
 drivers/net/ethernet/intel/ice/ice_vf_lib.c   | 10 +-----
 drivers/net/ethernet/intel/ice/ice_vf_lib.h   |  5 ---
 drivers/net/ethernet/intel/ice/ice_virtchnl.c | 31 +++++++------------
 drivers/net/ethernet/intel/ice/ice_virtchnl.h |  9 ++++++
 .../ethernet/intel/ice/ice_virtchnl_fdir.c    |  3 --
 6 files changed, 22 insertions(+), 37 deletions(-)


base-commit: 6cffde791c4f1c276fdfcf068554c3c77de35f40

Comments

Romanowski, Rafal March 1, 2024, 3:25 p.m. UTC | #1
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of
> Jacob Keller
> Sent: Friday, February 16, 2024 11:07 PM
> To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Intel Wired LAN
> <intel-wired-lan@lists.osuosl.org>
> Cc: Keller, Jacob E <jacob.e.keller@intel.com>; Kitszel, Przemyslaw
> <przemyslaw.kitszel@intel.com>
> Subject: [Intel-wired-lan] [PATCH iwl-next 0/4] ice: use relative VSI index for
> VFs VSIs
> 
> The ice driver currently communicates firmware VSI numbers to its virtual
> functions over virtchnl. For E800 series hardware, the VF driver has no direct
> use of the VSI number.
> 
> Some older legacy hardware could use the actual VSI number when
> communicating directly to firmware via the AdminQ. The E800 hardware does
> not allow this, and all communication happens over mailbox to the PF. The VFs
> do not have a direct access to the firmware. Additionally, none of the registers
> exposed to the VF depend on the VSI number.
> 
> Further, the PF is able to lookup the VSI for the VF without using the number
> provided by the VF over virtchnl. Thus, there is no reason that the number
> provided to the VF must actually be a real VSI number, nor does it need to be
> distinct across multiple VFs.
> 
> This series modifies the ice driver to send a relative VSI number to the VF
> instead of sending the firmware values. This simplifies the interface with the
> VF, as the PF can simply validate this relative number. Currently, only a single
> VSI is provided to each VF. Thus, a simple static value of 1 is used. We can
> easily extend this to use a proper relative index if we enable multiple VSIs for a
> VF in the future.
> 
> First, a couple of patches cleanup a few places in the code which still use the
> VF VSI IDs. Then, the VSI ID logic over virtchnl is changed to use the static
> values. Finally, the vf->lan_vsi_num field is no longer used and only set, so we
> can simplify the driver further by removing this entirely.
> 
> This eliminates a path for leaking information about the PF state to the VF, and
> simplifies the PF driver logic. Several of the removed code flows required an
> iterated scan over the VSI list to locate the VSI with the reported VSI number.
> 
> Finally, this has significant value for a future series implementing VF live
> migration. Now that the PF always passes relative VSI indexes, migration will
> no longer need to worry about migrating the absolute VSI numbers sent
> previously, which will simplify both the migration process as well as continued
> handling of a migrated VF after a migration event completes.
> 
> Jacob Keller (4):
>   ice: pass VSI pointer into ice_vc_isvalid_q_id
>   ice: remove unnecessary duplicate checks for VF VSI ID
>   ice: use relative VSI index for VFs instead of PF VSI number
>   ice: remove vf->lan_vsi_num field
> 
>  drivers/net/ethernet/intel/ice/ice_sriov.c    |  1 -
>  drivers/net/ethernet/intel/ice/ice_vf_lib.c   | 10 +-----
>  drivers/net/ethernet/intel/ice/ice_vf_lib.h   |  5 ---
>  drivers/net/ethernet/intel/ice/ice_virtchnl.c | 31 +++++++------------
> drivers/net/ethernet/intel/ice/ice_virtchnl.h |  9 ++++++
>  .../ethernet/intel/ice/ice_virtchnl_fdir.c    |  3 --
>  6 files changed, 22 insertions(+), 37 deletions(-)
> 
> 
> base-commit: 6cffde791c4f1c276fdfcf068554c3c77de35f40
> --
> 2.41.0

Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>