From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
To: Wojciech Drewek <wojciech.drewek@intel.com>
Cc: Jan Sokolowski <jan.sokolowski@intel.com>,
Jiri Pirko <jiri@resnulli.us>,
marcin.szycik@intel.com, sridhar.samudrala@intel.com,
konrad.knitter@intel.com, pawel.chmielewski@intel.com,
intel-wired-lan@lists.osuosl.org,
nex.sw.ncis.nat.hpm.dev@intel.com, pio.raczynski@gmail.com,
netdev@vger.kernel.org, jacob.e.keller@intel.com,
przemyslaw.kitszel@intel.com
Subject: Re: [Intel-wired-lan] [iwl-next v1 6/7] ice: enable_rdma devlink param
Date: Tue, 13 Feb 2024 11:48:06 +0100 [thread overview]
Message-ID: <ZctI5v99LmGx285J@mev-dev> (raw)
In-Reply-To: <bb501538-29d5-4930-97b6-1c02f1b7ecba@intel.com>
On Tue, Feb 13, 2024 at 11:19:49AM +0100, Wojciech Drewek wrote:
>
>
> On 13.02.2024 10:58, Michal Swiatkowski wrote:
> > On Tue, Feb 13, 2024 at 10:07:17AM +0100, Jiri Pirko wrote:
> >> Tue, Feb 13, 2024 at 08:35:08AM CET, michal.swiatkowski@linux.intel.com wrote:
> >>> Implement enable_rdma devlink parameter to allow user to turn RDMA
> >>> feature on and off.
> >>>
> >>> It is useful when there is no enough interrupts and user doesn't need
> >>> RDMA feature.
> >>>
> >>> Reviewed-by: Jan Sokolowski <jan.sokolowski@intel.com>
> >>> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> >>> Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
> >>> ---
> >>> drivers/net/ethernet/intel/ice/ice_devlink.c | 32 ++++++++++++++++++--
> >>> drivers/net/ethernet/intel/ice/ice_lib.c | 8 ++++-
> >>> drivers/net/ethernet/intel/ice/ice_main.c | 18 +++++------
> >>> 3 files changed, 45 insertions(+), 13 deletions(-)
> >>>
> >>> diff --git a/drivers/net/ethernet/intel/ice/ice_devlink.c b/drivers/net/ethernet/intel/ice/ice_devlink.c
> >>> index b82ff9556a4b..4f048268db72 100644
> >>> --- a/drivers/net/ethernet/intel/ice/ice_devlink.c
> >>> +++ b/drivers/net/ethernet/intel/ice/ice_devlink.c
> >>> @@ -1675,6 +1675,19 @@ ice_devlink_msix_min_pf_validate(struct devlink *devlink, u32 id,
> >>> return 0;
> >>> }
> >>>
> >>> +static int ice_devlink_enable_rdma_validate(struct devlink *devlink, u32 id,
> >>> + union devlink_param_value val,
> >>> + struct netlink_ext_ack *extack)
> >>> +{
> >>> + struct ice_pf *pf = devlink_priv(devlink);
> >>> + bool new_state = val.vbool;
> >>> +
> >>> + if (new_state && !test_bit(ICE_FLAG_RDMA_ENA, pf->flags))
> >>> + return -EOPNOTSUPP;
> >>> +
> >>> + return 0;
> >>> +}
> >>> +
> >>> static const struct devlink_param ice_devlink_params[] = {
> >>> DEVLINK_PARAM_GENERIC(ENABLE_ROCE, BIT(DEVLINK_PARAM_CMODE_RUNTIME),
> >>> ice_devlink_enable_roce_get,
> >>> @@ -1700,6 +1713,8 @@ static const struct devlink_param ice_devlink_params[] = {
> >>> ice_devlink_msix_min_pf_get,
> >>> ice_devlink_msix_min_pf_set,
> >>> ice_devlink_msix_min_pf_validate),
> >>> + DEVLINK_PARAM_GENERIC(ENABLE_RDMA, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
> >>> + NULL, NULL, ice_devlink_enable_rdma_validate),
> >>> };
> >>>
> >>> static void ice_devlink_free(void *devlink_ptr)
> >>> @@ -1776,9 +1791,22 @@ ice_devlink_set_switch_id(struct ice_pf *pf, struct netdev_phys_item_id *ppid)
> >>> int ice_devlink_register_params(struct ice_pf *pf)
> >>> {
> >>> struct devlink *devlink = priv_to_devlink(pf);
> >>> + union devlink_param_value value;
> >>> + int err;
> >>> +
> >>> + err = devlink_params_register(devlink, ice_devlink_params,
> >>
> >> Interesting, can't you just take the lock before this and call
> >> devl_params_register()?
> >>
> > I mess up a locking here and also in subfunction patchset. I will follow
> > you suggestion and take lock for whole init/cleanup. Thanks.
> >
> >> Moreover, could you please fix your init/cleanup paths for hold devlink
> >> instance lock the whole time?
> >>
> > You right, I will prepare patch for it.
>
> I think my patch implements your suggestion Jiri:
> https://lore.kernel.org/netdev/20240212211202.1051990-5-anthony.l.nguyen@intel.com/
>
Right, I based my patchset before your changes was applied to Tony's
tree. Thanks Wojtek.
So, in v2 there will be dev_version.
Thanks
Michal
> >
> >>
> >> pw-bot: cr
> >>
> >>
> >>> + ARRAY_SIZE(ice_devlink_params));
> >>> + if (err)
> >>> + return err;
> >>>
> >>> - return devlink_params_register(devlink, ice_devlink_params,
> >>> - ARRAY_SIZE(ice_devlink_params));
> >>> + devl_lock(devlink);
> >>> + value.vbool = test_bit(ICE_FLAG_RDMA_ENA, pf->flags);
> >>> + devl_param_driverinit_value_set(devlink,
> >>> + DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA,
> >>> + value);
> >>> + devl_unlock(devlink);
> >>> +
> >>> + return 0;
> >>> }
> >>>
> >>> void ice_devlink_unregister_params(struct ice_pf *pf)
> >>> diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c
> >>> index a30d2d2b51c1..4d5c3d699044 100644
> >>> --- a/drivers/net/ethernet/intel/ice/ice_lib.c
> >>> +++ b/drivers/net/ethernet/intel/ice/ice_lib.c
> >>> @@ -829,7 +829,13 @@ bool ice_is_safe_mode(struct ice_pf *pf)
> >>> */
> >>> bool ice_is_rdma_ena(struct ice_pf *pf)
> >>> {
> >>> - return test_bit(ICE_FLAG_RDMA_ENA, pf->flags);
> >>> + union devlink_param_value value;
> >>> + int err;
> >>> +
> >>> + err = devl_param_driverinit_value_get(priv_to_devlink(pf),
> >>> + DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA,
> >>> + &value);
> >>> + return err ? false : value.vbool;
> >>> }
> >>>
> >>> /**
> >>> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
> >>> index 824732f16112..4dd59d888ec7 100644
> >>> --- a/drivers/net/ethernet/intel/ice/ice_main.c
> >>> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
> >>> @@ -5177,23 +5177,21 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)
> >>> if (err)
> >>> goto err_init;
> >>>
> >>> + err = ice_init_devlink(pf);
> >>> + if (err)
> >>> + goto err_init_devlink;
> >>> +
> >>> devl_lock(priv_to_devlink(pf));
> >>> err = ice_load(pf);
> >>> devl_unlock(priv_to_devlink(pf));
> >>> if (err)
> >>> goto err_load;
> >>>
> >>> - err = ice_init_devlink(pf);
> >>> - if (err)
> >>> - goto err_init_devlink;
> >>> -
> >>> return 0;
> >>>
> >>> -err_init_devlink:
> >>> - devl_lock(priv_to_devlink(pf));
> >>> - ice_unload(pf);
> >>> - devl_unlock(priv_to_devlink(pf));
> >>> err_load:
> >>> + ice_deinit_devlink(pf);
> >>> +err_init_devlink:
> >>> ice_deinit(pf);
> >>> err_init:
> >>> pci_disable_device(pdev);
> >>> @@ -5290,12 +5288,12 @@ static void ice_remove(struct pci_dev *pdev)
> >>> if (!ice_is_safe_mode(pf))
> >>> ice_remove_arfs(pf);
> >>>
> >>> - ice_deinit_devlink(pf);
> >>> -
> >>> devl_lock(priv_to_devlink(pf));
> >>> ice_unload(pf);
> >>> devl_unlock(priv_to_devlink(pf));
> >>>
> >>> + ice_deinit_devlink(pf);
> >>> +
> >>> ice_deinit(pf);
> >>> ice_vsi_release_all(pf);
> >>>
> >>> --
> >>> 2.42.0
> >>>
> >>>
WARNING: multiple messages have this Message-ID (diff)
From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
To: Wojciech Drewek <wojciech.drewek@intel.com>
Cc: Jiri Pirko <jiri@resnulli.us>,
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,
nex.sw.ncis.nat.hpm.dev@intel.com, przemyslaw.kitszel@intel.com,
Jan Sokolowski <jan.sokolowski@intel.com>
Subject: Re: [iwl-next v1 6/7] ice: enable_rdma devlink param
Date: Tue, 13 Feb 2024 11:48:06 +0100 [thread overview]
Message-ID: <ZctI5v99LmGx285J@mev-dev> (raw)
In-Reply-To: <bb501538-29d5-4930-97b6-1c02f1b7ecba@intel.com>
On Tue, Feb 13, 2024 at 11:19:49AM +0100, Wojciech Drewek wrote:
>
>
> On 13.02.2024 10:58, Michal Swiatkowski wrote:
> > On Tue, Feb 13, 2024 at 10:07:17AM +0100, Jiri Pirko wrote:
> >> Tue, Feb 13, 2024 at 08:35:08AM CET, michal.swiatkowski@linux.intel.com wrote:
> >>> Implement enable_rdma devlink parameter to allow user to turn RDMA
> >>> feature on and off.
> >>>
> >>> It is useful when there is no enough interrupts and user doesn't need
> >>> RDMA feature.
> >>>
> >>> Reviewed-by: Jan Sokolowski <jan.sokolowski@intel.com>
> >>> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> >>> Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
> >>> ---
> >>> drivers/net/ethernet/intel/ice/ice_devlink.c | 32 ++++++++++++++++++--
> >>> drivers/net/ethernet/intel/ice/ice_lib.c | 8 ++++-
> >>> drivers/net/ethernet/intel/ice/ice_main.c | 18 +++++------
> >>> 3 files changed, 45 insertions(+), 13 deletions(-)
> >>>
> >>> diff --git a/drivers/net/ethernet/intel/ice/ice_devlink.c b/drivers/net/ethernet/intel/ice/ice_devlink.c
> >>> index b82ff9556a4b..4f048268db72 100644
> >>> --- a/drivers/net/ethernet/intel/ice/ice_devlink.c
> >>> +++ b/drivers/net/ethernet/intel/ice/ice_devlink.c
> >>> @@ -1675,6 +1675,19 @@ ice_devlink_msix_min_pf_validate(struct devlink *devlink, u32 id,
> >>> return 0;
> >>> }
> >>>
> >>> +static int ice_devlink_enable_rdma_validate(struct devlink *devlink, u32 id,
> >>> + union devlink_param_value val,
> >>> + struct netlink_ext_ack *extack)
> >>> +{
> >>> + struct ice_pf *pf = devlink_priv(devlink);
> >>> + bool new_state = val.vbool;
> >>> +
> >>> + if (new_state && !test_bit(ICE_FLAG_RDMA_ENA, pf->flags))
> >>> + return -EOPNOTSUPP;
> >>> +
> >>> + return 0;
> >>> +}
> >>> +
> >>> static const struct devlink_param ice_devlink_params[] = {
> >>> DEVLINK_PARAM_GENERIC(ENABLE_ROCE, BIT(DEVLINK_PARAM_CMODE_RUNTIME),
> >>> ice_devlink_enable_roce_get,
> >>> @@ -1700,6 +1713,8 @@ static const struct devlink_param ice_devlink_params[] = {
> >>> ice_devlink_msix_min_pf_get,
> >>> ice_devlink_msix_min_pf_set,
> >>> ice_devlink_msix_min_pf_validate),
> >>> + DEVLINK_PARAM_GENERIC(ENABLE_RDMA, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
> >>> + NULL, NULL, ice_devlink_enable_rdma_validate),
> >>> };
> >>>
> >>> static void ice_devlink_free(void *devlink_ptr)
> >>> @@ -1776,9 +1791,22 @@ ice_devlink_set_switch_id(struct ice_pf *pf, struct netdev_phys_item_id *ppid)
> >>> int ice_devlink_register_params(struct ice_pf *pf)
> >>> {
> >>> struct devlink *devlink = priv_to_devlink(pf);
> >>> + union devlink_param_value value;
> >>> + int err;
> >>> +
> >>> + err = devlink_params_register(devlink, ice_devlink_params,
> >>
> >> Interesting, can't you just take the lock before this and call
> >> devl_params_register()?
> >>
> > I mess up a locking here and also in subfunction patchset. I will follow
> > you suggestion and take lock for whole init/cleanup. Thanks.
> >
> >> Moreover, could you please fix your init/cleanup paths for hold devlink
> >> instance lock the whole time?
> >>
> > You right, I will prepare patch for it.
>
> I think my patch implements your suggestion Jiri:
> https://lore.kernel.org/netdev/20240212211202.1051990-5-anthony.l.nguyen@intel.com/
>
Right, I based my patchset before your changes was applied to Tony's
tree. Thanks Wojtek.
So, in v2 there will be dev_version.
Thanks
Michal
> >
> >>
> >> pw-bot: cr
> >>
> >>
> >>> + ARRAY_SIZE(ice_devlink_params));
> >>> + if (err)
> >>> + return err;
> >>>
> >>> - return devlink_params_register(devlink, ice_devlink_params,
> >>> - ARRAY_SIZE(ice_devlink_params));
> >>> + devl_lock(devlink);
> >>> + value.vbool = test_bit(ICE_FLAG_RDMA_ENA, pf->flags);
> >>> + devl_param_driverinit_value_set(devlink,
> >>> + DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA,
> >>> + value);
> >>> + devl_unlock(devlink);
> >>> +
> >>> + return 0;
> >>> }
> >>>
> >>> void ice_devlink_unregister_params(struct ice_pf *pf)
> >>> diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c
> >>> index a30d2d2b51c1..4d5c3d699044 100644
> >>> --- a/drivers/net/ethernet/intel/ice/ice_lib.c
> >>> +++ b/drivers/net/ethernet/intel/ice/ice_lib.c
> >>> @@ -829,7 +829,13 @@ bool ice_is_safe_mode(struct ice_pf *pf)
> >>> */
> >>> bool ice_is_rdma_ena(struct ice_pf *pf)
> >>> {
> >>> - return test_bit(ICE_FLAG_RDMA_ENA, pf->flags);
> >>> + union devlink_param_value value;
> >>> + int err;
> >>> +
> >>> + err = devl_param_driverinit_value_get(priv_to_devlink(pf),
> >>> + DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA,
> >>> + &value);
> >>> + return err ? false : value.vbool;
> >>> }
> >>>
> >>> /**
> >>> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
> >>> index 824732f16112..4dd59d888ec7 100644
> >>> --- a/drivers/net/ethernet/intel/ice/ice_main.c
> >>> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
> >>> @@ -5177,23 +5177,21 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)
> >>> if (err)
> >>> goto err_init;
> >>>
> >>> + err = ice_init_devlink(pf);
> >>> + if (err)
> >>> + goto err_init_devlink;
> >>> +
> >>> devl_lock(priv_to_devlink(pf));
> >>> err = ice_load(pf);
> >>> devl_unlock(priv_to_devlink(pf));
> >>> if (err)
> >>> goto err_load;
> >>>
> >>> - err = ice_init_devlink(pf);
> >>> - if (err)
> >>> - goto err_init_devlink;
> >>> -
> >>> return 0;
> >>>
> >>> -err_init_devlink:
> >>> - devl_lock(priv_to_devlink(pf));
> >>> - ice_unload(pf);
> >>> - devl_unlock(priv_to_devlink(pf));
> >>> err_load:
> >>> + ice_deinit_devlink(pf);
> >>> +err_init_devlink:
> >>> ice_deinit(pf);
> >>> err_init:
> >>> pci_disable_device(pdev);
> >>> @@ -5290,12 +5288,12 @@ static void ice_remove(struct pci_dev *pdev)
> >>> if (!ice_is_safe_mode(pf))
> >>> ice_remove_arfs(pf);
> >>>
> >>> - ice_deinit_devlink(pf);
> >>> -
> >>> devl_lock(priv_to_devlink(pf));
> >>> ice_unload(pf);
> >>> devl_unlock(priv_to_devlink(pf));
> >>>
> >>> + ice_deinit_devlink(pf);
> >>> +
> >>> ice_deinit(pf);
> >>> ice_vsi_release_all(pf);
> >>>
> >>> --
> >>> 2.42.0
> >>>
> >>>
next prev parent reply other threads:[~2024-02-13 10:55 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-13 7:35 [Intel-wired-lan] [iwl-next v1 0/7] ice: managing MSI-X in driver Michal Swiatkowski
2024-02-13 7:35 ` Michal Swiatkowski
2024-02-13 7:35 ` [Intel-wired-lan] [iwl-next v1 1/7] ice: devlink PF MSI-X max and min parameter Michal Swiatkowski
2024-02-13 7:35 ` Michal Swiatkowski
2024-02-13 9:03 ` [Intel-wired-lan] " Jiri Pirko
2024-02-13 9:03 ` Jiri Pirko
2024-02-13 10:01 ` [Intel-wired-lan] " Michal Swiatkowski
2024-02-13 10:01 ` Michal Swiatkowski
2024-02-13 11:31 ` [Intel-wired-lan] " Jiri Pirko
2024-02-13 11:31 ` Jiri Pirko
2024-02-13 11:51 ` [Intel-wired-lan] " Michal Swiatkowski
2024-02-13 11:51 ` Michal Swiatkowski
2024-02-13 7:35 ` [Intel-wired-lan] [iwl-next v1 2/7] ice: remove splitting MSI-X between features Michal Swiatkowski
2024-02-13 7:35 ` Michal Swiatkowski
2024-02-13 7:35 ` [Intel-wired-lan] [iwl-next v1 3/7] ice: get rid of num_lan_msix field Michal Swiatkowski
2024-02-13 7:35 ` Michal Swiatkowski
2024-02-13 7:35 ` [Intel-wired-lan] [iwl-next v1 4/7] ice, irdma: move interrupts code to irdma Michal Swiatkowski
2024-02-13 7:35 ` Michal Swiatkowski
2024-02-13 7:35 ` [Intel-wired-lan] [iwl-next v1 5/7] ice: treat dyn_allowed only as suggestion Michal Swiatkowski
2024-02-13 7:35 ` Michal Swiatkowski
2024-02-13 7:35 ` [Intel-wired-lan] [iwl-next v1 6/7] ice: enable_rdma devlink param Michal Swiatkowski
2024-02-13 7:35 ` Michal Swiatkowski
2024-02-13 9:07 ` [Intel-wired-lan] " Jiri Pirko
2024-02-13 9:07 ` Jiri Pirko
2024-02-13 9:58 ` [Intel-wired-lan] " Michal Swiatkowski
2024-02-13 9:58 ` Michal Swiatkowski
2024-02-13 10:19 ` [Intel-wired-lan] " Wojciech Drewek
2024-02-13 10:19 ` Wojciech Drewek
2024-02-13 10:48 ` Michal Swiatkowski [this message]
2024-02-13 10:48 ` Michal Swiatkowski
2024-02-13 11:35 ` [Intel-wired-lan] " Jiri Pirko
2024-02-13 11:35 ` Jiri Pirko
2024-02-13 7:35 ` [Intel-wired-lan] [iwl-next v1 7/7] ice: simplify VF MSI-X managing Michal Swiatkowski
2024-02-13 7:35 ` 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=ZctI5v99LmGx285J@mev-dev \
--to=michal.swiatkowski@linux.intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jacob.e.keller@intel.com \
--cc=jan.sokolowski@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.