From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
To: Jiri Pirko <jiri@resnulli.us>
Cc: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
pawel.chmielewski@intel.com, sridhar.samudrala@intel.com,
jacob.e.keller@intel.com, pio.raczynski@gmail.com,
konrad.knitter@intel.com, marcin.szycik@intel.com,
wojciech.drewek@intel.com, nex.sw.ncis.nat.hpm.dev@intel.com,
przemyslaw.kitszel@intel.com
Subject: Re: [iwl-next v3 1/8] ice: devlink PF MSI-X max and min parameter
Date: Fri, 9 Aug 2024 13:39:42 +0200 [thread overview]
Message-ID: <ZrX//oyvlRUITMnb@mev-dev.igk.intel.com> (raw)
In-Reply-To: <ZrX9mbsJD8VLEOs6@nanopsycho.orion>
On Fri, Aug 09, 2024 at 01:29:29PM +0200, Jiri Pirko wrote:
> Fri, Aug 09, 2024 at 01:05:00PM CEST, michal.swiatkowski@linux.intel.com wrote:
> >On Fri, Aug 09, 2024 at 12:51:58PM +0200, Jiri Pirko wrote:
> >> Fri, Aug 09, 2024 at 07:13:34AM CEST, michal.swiatkowski@linux.intel.com wrote:
> >> >On Thu, Aug 08, 2024 at 05:34:35PM +0200, Jiri Pirko wrote:
> >> >> Thu, Aug 08, 2024 at 09:20:09AM CEST, michal.swiatkowski@linux.intel.com wrote:
> >> >> >Use generic devlink PF MSI-X parameter to allow user to change MSI-X
> >> >> >range.
> >> >> >
> >> >> >Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
> >> >> >Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
> >> >> >---
> >> >> > .../net/ethernet/intel/ice/devlink/devlink.c | 56 ++++++++++++++++++-
> >> >> > drivers/net/ethernet/intel/ice/ice.h | 8 +++
> >> >> > drivers/net/ethernet/intel/ice/ice_irq.c | 14 ++++-
> >> >> > 3 files changed, 76 insertions(+), 2 deletions(-)
> >> >> >
> >> >> >diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.c b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> >> >> >index 29a5f822cb8b..bdc22ea13e0f 100644
> >> >> >--- a/drivers/net/ethernet/intel/ice/devlink/devlink.c
> >> >> >+++ b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> >> >> >@@ -1518,6 +1518,32 @@ static int ice_devlink_local_fwd_validate(struct devlink *devlink, u32 id,
> >> >> > return 0;
> >> >> > }
> >> >> >
> >> >> >+static int
> >> >> >+ice_devlink_msix_max_pf_validate(struct devlink *devlink, u32 id,
> >> >> >+ union devlink_param_value val,
> >> >> >+ struct netlink_ext_ack *extack)
> >> >> >+{
> >> >> >+ if (val.vu16 > ICE_MAX_MSIX) {
> >> >> >+ NL_SET_ERR_MSG_MOD(extack, "PF max MSI-X is too high");
> >> >>
> >> >> No reason to have "PF" in the text. Also, no reason to have "max MSI-X".
> >> >> That is the name of the param.
> >> >>
> >> >
> >> >Ok, will change both, thanks.
> >> >
> >> >>
> >> >>
> >> >> >+ return -EINVAL;
> >> >> >+ }
> >> >> >+
> >> >> >+ return 0;
> >> >> >+}
> >> >> >+
> >> >> >+static int
> >> >> >+ice_devlink_msix_min_pf_validate(struct devlink *devlink, u32 id,
> >> >> >+ union devlink_param_value val,
> >> >> >+ struct netlink_ext_ack *extack)
> >> >> >+{
> >> >> >+ if (val.vu16 <= ICE_MIN_MSIX) {
> >> >> >+ NL_SET_ERR_MSG_MOD(extack, "PF min MSI-X is too low");
> >> >>
> >> >> Same comment as for max goes here.
> >> >>
> >> >>
> >> >> >+ return -EINVAL;
> >> >> >+ }
> >> >> >+
> >> >> >+ return 0;
> >> >> >+}
> >> >> >+
> >> >> > enum ice_param_id {
> >> >> > ICE_DEVLINK_PARAM_ID_BASE = DEVLINK_PARAM_GENERIC_ID_MAX,
> >> >> > ICE_DEVLINK_PARAM_ID_TX_SCHED_LAYERS,
> >> >> >@@ -1535,6 +1561,15 @@ static const struct devlink_param ice_dvl_rdma_params[] = {
> >> >> > ice_devlink_enable_iw_validate),
> >> >> > };
> >> >> >
> >> >> >+static const struct devlink_param ice_dvl_msix_params[] = {
> >> >> >+ DEVLINK_PARAM_GENERIC(MSIX_VEC_PER_PF_MAX,
> >> >> >+ BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
> >> >> >+ NULL, NULL, ice_devlink_msix_max_pf_validate),
> >> >> >+ DEVLINK_PARAM_GENERIC(MSIX_VEC_PER_PF_MIN,
> >> >> >+ BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
> >> >> >+ NULL, NULL, ice_devlink_msix_min_pf_validate),
> >> >> >+};
> >> >> >+
> >> >> > static const struct devlink_param ice_dvl_sched_params[] = {
> >> >> > DEVLINK_PARAM_DRIVER(ICE_DEVLINK_PARAM_ID_TX_SCHED_LAYERS,
> >> >> > "tx_scheduling_layers",
> >> >> >@@ -1637,6 +1672,7 @@ void ice_devlink_unregister(struct ice_pf *pf)
> >> >> > int ice_devlink_register_params(struct ice_pf *pf)
> >> >> > {
> >> >> > struct devlink *devlink = priv_to_devlink(pf);
> >> >> >+ union devlink_param_value value;
> >> >> > struct ice_hw *hw = &pf->hw;
> >> >> > int status;
> >> >> >
> >> >> >@@ -1645,11 +1681,27 @@ int ice_devlink_register_params(struct ice_pf *pf)
> >> >> > if (status)
> >> >> > return status;
> >> >> >
> >> >> >+ status = devl_params_register(devlink, ice_dvl_msix_params,
> >> >> >+ ARRAY_SIZE(ice_dvl_msix_params));
> >> >> >+ if (status)
> >> >> >+ return status;
> >> >> >+
> >> >> > if (hw->func_caps.common_cap.tx_sched_topo_comp_mode_en)
> >> >> > status = devl_params_register(devlink, ice_dvl_sched_params,
> >> >> > ARRAY_SIZE(ice_dvl_sched_params));
> >> >> >+ if (status)
> >> >> >+ return status;
> >> >> >
> >> >> >- return status;
> >> >> >+ value.vu16 = pf->msix.max;
> >> >> >+ devl_param_driverinit_value_set(devlink,
> >> >> >+ DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX,
> >> >> >+ value);
> >> >> >+ value.vu16 = pf->msix.min;
> >> >> >+ devl_param_driverinit_value_set(devlink,
> >> >> >+ DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN,
> >> >> >+ value);
> >> >> >+
> >> >> >+ return 0;
> >> >> > }
> >> >> >
> >> >> > void ice_devlink_unregister_params(struct ice_pf *pf)
> >> >> >@@ -1659,6 +1711,8 @@ void ice_devlink_unregister_params(struct ice_pf *pf)
> >> >> >
> >> >> > devl_params_unregister(devlink, ice_dvl_rdma_params,
> >> >> > ARRAY_SIZE(ice_dvl_rdma_params));
> >> >> >+ devl_params_unregister(devlink, ice_dvl_msix_params,
> >> >> >+ ARRAY_SIZE(ice_dvl_msix_params));
> >> >> >
> >> >> > if (hw->func_caps.common_cap.tx_sched_topo_comp_mode_en)
> >> >> > devl_params_unregister(devlink, ice_dvl_sched_params,
> >> >> >diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
> >> >> >index d6f80da30dec..a67456057c77 100644
> >> >> >--- a/drivers/net/ethernet/intel/ice/ice.h
> >> >> >+++ b/drivers/net/ethernet/intel/ice/ice.h
> >> >> >@@ -95,6 +95,7 @@
> >> >> > #define ICE_MIN_LAN_TXRX_MSIX 1
> >> >> > #define ICE_MIN_LAN_OICR_MSIX 1
> >> >> > #define ICE_MIN_MSIX (ICE_MIN_LAN_TXRX_MSIX + ICE_MIN_LAN_OICR_MSIX)
> >> >> >+#define ICE_MAX_MSIX 256
> >> >> > #define ICE_FDIR_MSIX 2
> >> >> > #define ICE_RDMA_NUM_AEQ_MSIX 4
> >> >> > #define ICE_MIN_RDMA_MSIX 2
> >> >> >@@ -545,6 +546,12 @@ struct ice_agg_node {
> >> >> > u8 valid;
> >> >> > };
> >> >> >
> >> >> >+struct ice_pf_msix {
> >> >> >+ u16 cur;
> >> >> >+ u16 min;
> >> >> >+ u16 max;
> >> >> >+};
> >> >> >+
> >> >> > struct ice_pf {
> >> >> > struct pci_dev *pdev;
> >> >> > struct ice_adapter *adapter;
> >> >> >@@ -615,6 +622,7 @@ struct ice_pf {
> >> >> > struct msi_map ll_ts_irq; /* LL_TS interrupt MSIX vector */
> >> >> > u16 max_pf_txqs; /* Total Tx queues PF wide */
> >> >> > u16 max_pf_rxqs; /* Total Rx queues PF wide */
> >> >> >+ struct ice_pf_msix msix;
> >> >> > u16 num_lan_msix; /* Total MSIX vectors for base driver */
> >> >> > u16 num_lan_tx; /* num LAN Tx queues setup */
> >> >> > u16 num_lan_rx; /* num LAN Rx queues setup */
> >> >> >diff --git a/drivers/net/ethernet/intel/ice/ice_irq.c b/drivers/net/ethernet/intel/ice/ice_irq.c
> >> >> >index ad82ff7d1995..4e559fd6e49f 100644
> >> >> >--- a/drivers/net/ethernet/intel/ice/ice_irq.c
> >> >> >+++ b/drivers/net/ethernet/intel/ice/ice_irq.c
> >> >> >@@ -252,7 +252,19 @@ void ice_clear_interrupt_scheme(struct ice_pf *pf)
> >> >> > int ice_init_interrupt_scheme(struct ice_pf *pf)
> >> >> > {
> >> >> > int total_vectors = pf->hw.func_caps.common_cap.num_msix_vectors;
> >> >> >- int vectors, max_vectors;
> >> >> >+ union devlink_param_value value;
> >> >> >+ int vectors, max_vectors, err;
> >> >> >+
> >> >> >+ /* load default PF MSI-X range */
> >> >> >+ err = devl_param_driverinit_value_get(priv_to_devlink(pf),
> >> >> >+ DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN,
> >> >> >+ &value);
> >> >>
> >> >> If err is not 0, you have a bug in the driver. Perhaps it a about the
> >> >> time to make this return void and add some WARN_ONs inside the function?
> >> >>
> >> >
> >> >err is not 0 when this param isn't found (not registered yet). It is a
> >> >case when driver is probing, I want to have here default values and
> >> >register it later. Instead of checking if it is probe context or reload
> >> >context I am checking if param already exists. The param doesn't exist in
> >> >probe, but exists in reload.
> >>
> >> No, you have to make sure that you are using these values after they are
> >> set. Please fix.
> >>
> >
> >I am not using value if this function returns error. If function returns
> >error default values are set. The function
> >devl_param_driverinit_value_get() is already checking if parameter
> >exists. Why do you want me to check it before calling this function? Do
> >you mean that calling it with not registered parameters is a problem? I
> >don't see why it can be a problem.
>
> If you call this for non-existing parameter, your driver flow is wrong.
> That's my point.
>
>
But this function is checking this scenerio (existing of parameter), why
not to use it?
The ice_init_interrupt_scheme is reused in probe and in reload. I don't
think it is reasonable to have one for probe and one for reload. Simpler
is to check if the context is probe or reload. Instead of checking sth
else (I don't know, flag from upper layer, or flag set only in
probe/reload) I am checking if parameters exsists. I don't think the
flow is wrong here.
> >
> >>
> >> >
> >> >>
> >> >> >+ pf->msix.min = err ? ICE_MIN_MSIX : value.vu16;
> >> >> >+
> >> >> >+ err = devl_param_driverinit_value_get(priv_to_devlink(pf),
> >> >> >+ DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX,
> >> >> >+ &value);
> >> >> >+ pf->msix.max = err ? total_vectors / 2 : value.vu16;
> >> >> >
> >> >> > vectors = ice_ena_msix_range(pf);
> >> >> >
> >> >> >--
> >> >> >2.42.0
> >> >> >
next prev parent reply other threads:[~2024-08-09 11:42 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-08 7:20 [iwl-next v3 0/8] ice: managing MSI-X in driver Michal Swiatkowski
2024-08-08 7:20 ` [iwl-next v3 1/8] ice: devlink PF MSI-X max and min parameter Michal Swiatkowski
2024-08-08 15:34 ` Jiri Pirko
2024-08-09 5:13 ` Michal Swiatkowski
2024-08-09 5:18 ` [Intel-wired-lan] " Paul Menzel
2024-08-09 5:30 ` Paul Menzel
2024-08-09 10:52 ` Jiri Pirko
2024-08-09 10:51 ` Jiri Pirko
2024-08-09 11:05 ` Michal Swiatkowski
2024-08-09 11:29 ` Jiri Pirko
2024-08-09 11:39 ` Michal Swiatkowski [this message]
2024-08-10 6:33 ` Jiri Pirko
2024-08-08 7:20 ` [iwl-next v3 2/8] ice: remove splitting MSI-X between features Michal Swiatkowski
2024-08-08 7:20 ` [iwl-next v3 3/8] ice: get rid of num_lan_msix field Michal Swiatkowski
2024-08-08 7:20 ` [iwl-next v3 4/8] ice, irdma: move interrupts code to irdma Michal Swiatkowski
2024-08-08 7:20 ` [iwl-next v3 5/8] ice: treat dyn_allowed only as suggestion Michal Swiatkowski
2024-08-08 7:20 ` [iwl-next v3 6/8] ice: enable_rdma devlink param Michal Swiatkowski
2024-08-08 7:20 ` [iwl-next v3 7/8] ice: simplify VF MSI-X managing Michal Swiatkowski
2024-08-08 7:20 ` [iwl-next v3 8/8] ice: init flow director before RDMA Michal Swiatkowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZrX//oyvlRUITMnb@mev-dev.igk.intel.com \
--to=michal.swiatkowski@linux.intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jacob.e.keller@intel.com \
--cc=jiri@resnulli.us \
--cc=konrad.knitter@intel.com \
--cc=marcin.szycik@intel.com \
--cc=netdev@vger.kernel.org \
--cc=nex.sw.ncis.nat.hpm.dev@intel.com \
--cc=pawel.chmielewski@intel.com \
--cc=pio.raczynski@gmail.com \
--cc=przemyslaw.kitszel@intel.com \
--cc=sridhar.samudrala@intel.com \
--cc=wojciech.drewek@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox