From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
To: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
Cc: maciej.fijalkowski@intel.com,
nex.sw.ncis.osdt.itp.upstreaming@intel.com,
netdev@vger.kernel.org, jiri@nvidia.com, michal.kubiak@intel.com,
intel-wired-lan@lists.osuosl.org, pio.raczynski@gmail.com,
sridhar.samudrala@intel.com, jacob.e.keller@intel.com,
wojciech.drewek@intel.com,
Piotr Raczynski <piotr.raczynski@intel.com>,
przemyslaw.kitszel@intel.com
Subject: Re: [Intel-wired-lan] [iwl-next v1 4/7] ice: allocate devlink for subfunction
Date: Tue, 9 Apr 2024 15:44:28 +0200 [thread overview]
Message-ID: <ZhVGPAEmqYNHJywJ@mev-dev> (raw)
In-Reply-To: <4c99838f-3ee3-46ea-80e2-5b94336d7661@intel.com>
On Tue, Apr 09, 2024 at 10:34:27AM +0200, Mateusz Polchlopek wrote:
>
>
> On 4/8/2024 12:30 PM, Michal Swiatkowski wrote:
> > From: Piotr Raczynski <piotr.raczynski@intel.com>
> >
> > Make devlink allocation function generic to use it for PF and for SF.
> >
> > Add function for SF devlink port creation. It will be used in next
> > patch.
> >
> > Signed-off-by: Piotr Raczynski <piotr.raczynski@intel.com>
> > Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
> > ---
> > .../net/ethernet/intel/ice/devlink/devlink.c | 39 ++++++++++++--
> > .../net/ethernet/intel/ice/devlink/devlink.h | 1 +
> > .../ethernet/intel/ice/devlink/devlink_port.c | 51 +++++++++++++++++++
> > .../ethernet/intel/ice/devlink/devlink_port.h | 3 ++
> > 4 files changed, 89 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.c b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> > index 661af04c8eef..05a752fec316 100644
> > --- a/drivers/net/ethernet/intel/ice/devlink/devlink.c
> > +++ b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> > @@ -10,6 +10,7 @@
> > #include "ice_eswitch.h"
> > #include "ice_fw_update.h"
> > #include "ice_dcb_lib.h"
> > +#include "ice_sf_eth.h"
> > /* context for devlink info version reporting */
> > struct ice_info_ctx {
> > @@ -1286,6 +1287,8 @@ static const struct devlink_ops ice_devlink_ops = {
> > .port_new = ice_devlink_port_new,
> > };
> > +static const struct devlink_ops ice_sf_devlink_ops;
> > +
> > static int
> > ice_devlink_enable_roce_get(struct devlink *devlink, u32 id,
> > struct devlink_param_gset_ctx *ctx)
> > @@ -1417,14 +1420,17 @@ static void ice_devlink_free(void *devlink_ptr)
> > }
> > /**
> > - * ice_allocate_pf - Allocate devlink and return PF structure pointer
> > + * ice_devlink_alloc - Allocate devlink and return devlink priv pointer
> > * @dev: the device to allocate for
> > + * @priv_size: size of the priv memory
> > + * @ops: pointer to devlink ops for this device
> > *
> > - * Allocate a devlink instance for this device and return the private area as
> > - * the PF structure. The devlink memory is kept track of through devres by
> > - * adding an action to remove it when unwinding.
> > + * Allocate a devlink instance for this device and return the private pointer
> > + * The devlink memory is kept track of through devres by adding an action to
> > + * remove it when unwinding.
> > */
> > -struct ice_pf *ice_allocate_pf(struct device *dev)
> > +static void *ice_devlink_alloc(struct device *dev, size_t priv_size,
> > + const struct devlink_ops *ops)
>
> Why do we need priv_size and ops if those are not used in the function?
> Shouldn't it be line:
>
> devlink = devlink_alloc(&ice_devlink_ops, sizeof(struct ice_pf), dev);
>
> in ice_devlink_alloc changed to take the passed param?
>
>
Right, it is an error. I will fix it in v2. Thanks for pointing it.
Michal
> > {
> > struct devlink *devlink;
> > @@ -1439,6 +1445,29 @@ struct ice_pf *ice_allocate_pf(struct device *dev)
> > return devlink_priv(devlink);
> > }
> > +/**
> > + * ice_allocate_pf - Allocate devlink and return PF structure pointer
> > + * @dev: the device to allocate for
> > + *
> > + * Allocate a devlink instance for PF.
> > + */
> > +struct ice_pf *ice_allocate_pf(struct device *dev)
> > +{
> > + return ice_devlink_alloc(dev, sizeof(struct ice_pf), &ice_devlink_ops);
> > +}
> > +
> > +/**
> > + * ice_allocate_sf - Allocate devlink and return SF structure pointer
> > + * @dev: the device to allocate for
> > + *
> > + * Allocate a devlink instance for SF.
> > + */
> > +struct ice_sf_priv *ice_allocate_sf(struct device *dev)
> > +{
> > + return ice_devlink_alloc(dev, sizeof(struct ice_sf_priv),
> > + &ice_sf_devlink_ops);
> > +}
> > +
> > /**
> > * ice_devlink_register - Register devlink interface for this PF
> > * @pf: the PF to register the devlink for.
> > diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.h b/drivers/net/ethernet/intel/ice/devlink/devlink.h
> > index d291c0e2e17b..1b2a5980d5e8 100644
> > --- a/drivers/net/ethernet/intel/ice/devlink/devlink.h
> > +++ b/drivers/net/ethernet/intel/ice/devlink/devlink.h
> > @@ -5,6 +5,7 @@
> > #define _ICE_DEVLINK_H_
> > struct ice_pf *ice_allocate_pf(struct device *dev);
> > +struct ice_sf_priv *ice_allocate_sf(struct device *dev);
> > void ice_devlink_register(struct ice_pf *pf);
> > void ice_devlink_unregister(struct ice_pf *pf);
> > diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink_port.c b/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
> > index f5e305a71bd0..1b933083f551 100644
> > --- a/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
> > +++ b/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
> > @@ -432,6 +432,57 @@ void ice_devlink_destroy_vf_port(struct ice_vf *vf)
> > devlink_port_unregister(&vf->devlink_port);
> > }
> > +/**
> > + * ice_devlink_create_sf_dev_port - Register virtual port for a subfunction
> > + * @sf_dev: the subfunction device to create a devlink port for
> > + *
> > + * Register virtual flavour devlink port for the subfunction auxiliary device
> > + * created after activating a dynamically added devlink port.
> > + *
> > + * Return: zero on success or an error code on failure.
> > + */
> > +int ice_devlink_create_sf_dev_port(struct ice_sf_dev *sf_dev)
> > +{
> > + struct devlink_port_attrs attrs = {};
> > + struct devlink_port *devlink_port;
> > + struct ice_dynamic_port *dyn_port;
> > + struct devlink *devlink;
> > + struct ice_vsi *vsi;
> > + struct device *dev;
> > + struct ice_pf *pf;
> > + int err;
> > +
> > + dyn_port = sf_dev->dyn_port;
> > + vsi = dyn_port->vsi;
> > + pf = dyn_port->pf;
> > + dev = ice_pf_to_dev(pf);
> > +
> > + devlink_port = &sf_dev->priv->devlink_port;
> > +
> > + attrs.flavour = DEVLINK_PORT_FLAVOUR_VIRTUAL;
> > +
> > + devlink_port_attrs_set(devlink_port, &attrs);
> > + devlink = priv_to_devlink(sf_dev->priv);
> > +
> > + err = devl_port_register(devlink, devlink_port, vsi->idx);
> > + if (err)
> > + dev_err(dev, "Failed to create virtual devlink port for auxiliary subfunction device %d",
> > + vsi->idx);
> > +
> > + return err;
> > +}
> > +
> > +/**
> > + * ice_devlink_destroy_sf_dev_port - Destroy virtual port for a subfunction
> > + * @sf_dev: the subfunction device to create a devlink port for
> > + *
> > + * Unregisters the virtual port associated with this subfunction.
> > + */
> > +void ice_devlink_destroy_sf_dev_port(struct ice_sf_dev *sf_dev)
> > +{
> > + devl_port_unregister(&sf_dev->priv->devlink_port);
> > +}
> > +
> > /**
> > * ice_activate_dynamic_port - Activate a dynamic port
> > * @dyn_port: dynamic port instance to activate
> > diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink_port.h b/drivers/net/ethernet/intel/ice/devlink/devlink_port.h
> > index 30146fef64b9..1f66705e0261 100644
> > --- a/drivers/net/ethernet/intel/ice/devlink/devlink_port.h
> > +++ b/drivers/net/ethernet/intel/ice/devlink/devlink_port.h
> > @@ -5,6 +5,7 @@
> > #define _DEVLINK_PORT_H_
> > #include "../ice.h"
> > +#include "ice_sf_eth.h"
> > /**
> > * struct ice_dynamic_port - Track dynamically added devlink port instance
> > @@ -30,6 +31,8 @@ int ice_devlink_create_pf_port(struct ice_pf *pf);
> > void ice_devlink_destroy_pf_port(struct ice_pf *pf);
> > int ice_devlink_create_vf_port(struct ice_vf *vf);
> > void ice_devlink_destroy_vf_port(struct ice_vf *vf);
> > +int ice_devlink_create_sf_dev_port(struct ice_sf_dev *sf_dev);
> > +void ice_devlink_destroy_sf_dev_port(struct ice_sf_dev *sf_dev);
> > #define ice_devlink_port_to_dyn(p) \
> > container_of(port, struct ice_dynamic_port, devlink_port)
WARNING: multiple messages have this Message-ID (diff)
From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
To: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
Cc: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
jacob.e.keller@intel.com, michal.kubiak@intel.com,
maciej.fijalkowski@intel.com, sridhar.samudrala@intel.com,
przemyslaw.kitszel@intel.com, wojciech.drewek@intel.com,
pio.raczynski@gmail.com, jiri@nvidia.com,
nex.sw.ncis.osdt.itp.upstreaming@intel.com,
Piotr Raczynski <piotr.raczynski@intel.com>
Subject: Re: [iwl-next v1 4/7] ice: allocate devlink for subfunction
Date: Tue, 9 Apr 2024 15:44:28 +0200 [thread overview]
Message-ID: <ZhVGPAEmqYNHJywJ@mev-dev> (raw)
In-Reply-To: <4c99838f-3ee3-46ea-80e2-5b94336d7661@intel.com>
On Tue, Apr 09, 2024 at 10:34:27AM +0200, Mateusz Polchlopek wrote:
>
>
> On 4/8/2024 12:30 PM, Michal Swiatkowski wrote:
> > From: Piotr Raczynski <piotr.raczynski@intel.com>
> >
> > Make devlink allocation function generic to use it for PF and for SF.
> >
> > Add function for SF devlink port creation. It will be used in next
> > patch.
> >
> > Signed-off-by: Piotr Raczynski <piotr.raczynski@intel.com>
> > Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
> > ---
> > .../net/ethernet/intel/ice/devlink/devlink.c | 39 ++++++++++++--
> > .../net/ethernet/intel/ice/devlink/devlink.h | 1 +
> > .../ethernet/intel/ice/devlink/devlink_port.c | 51 +++++++++++++++++++
> > .../ethernet/intel/ice/devlink/devlink_port.h | 3 ++
> > 4 files changed, 89 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.c b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> > index 661af04c8eef..05a752fec316 100644
> > --- a/drivers/net/ethernet/intel/ice/devlink/devlink.c
> > +++ b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> > @@ -10,6 +10,7 @@
> > #include "ice_eswitch.h"
> > #include "ice_fw_update.h"
> > #include "ice_dcb_lib.h"
> > +#include "ice_sf_eth.h"
> > /* context for devlink info version reporting */
> > struct ice_info_ctx {
> > @@ -1286,6 +1287,8 @@ static const struct devlink_ops ice_devlink_ops = {
> > .port_new = ice_devlink_port_new,
> > };
> > +static const struct devlink_ops ice_sf_devlink_ops;
> > +
> > static int
> > ice_devlink_enable_roce_get(struct devlink *devlink, u32 id,
> > struct devlink_param_gset_ctx *ctx)
> > @@ -1417,14 +1420,17 @@ static void ice_devlink_free(void *devlink_ptr)
> > }
> > /**
> > - * ice_allocate_pf - Allocate devlink and return PF structure pointer
> > + * ice_devlink_alloc - Allocate devlink and return devlink priv pointer
> > * @dev: the device to allocate for
> > + * @priv_size: size of the priv memory
> > + * @ops: pointer to devlink ops for this device
> > *
> > - * Allocate a devlink instance for this device and return the private area as
> > - * the PF structure. The devlink memory is kept track of through devres by
> > - * adding an action to remove it when unwinding.
> > + * Allocate a devlink instance for this device and return the private pointer
> > + * The devlink memory is kept track of through devres by adding an action to
> > + * remove it when unwinding.
> > */
> > -struct ice_pf *ice_allocate_pf(struct device *dev)
> > +static void *ice_devlink_alloc(struct device *dev, size_t priv_size,
> > + const struct devlink_ops *ops)
>
> Why do we need priv_size and ops if those are not used in the function?
> Shouldn't it be line:
>
> devlink = devlink_alloc(&ice_devlink_ops, sizeof(struct ice_pf), dev);
>
> in ice_devlink_alloc changed to take the passed param?
>
>
Right, it is an error. I will fix it in v2. Thanks for pointing it.
Michal
> > {
> > struct devlink *devlink;
> > @@ -1439,6 +1445,29 @@ struct ice_pf *ice_allocate_pf(struct device *dev)
> > return devlink_priv(devlink);
> > }
> > +/**
> > + * ice_allocate_pf - Allocate devlink and return PF structure pointer
> > + * @dev: the device to allocate for
> > + *
> > + * Allocate a devlink instance for PF.
> > + */
> > +struct ice_pf *ice_allocate_pf(struct device *dev)
> > +{
> > + return ice_devlink_alloc(dev, sizeof(struct ice_pf), &ice_devlink_ops);
> > +}
> > +
> > +/**
> > + * ice_allocate_sf - Allocate devlink and return SF structure pointer
> > + * @dev: the device to allocate for
> > + *
> > + * Allocate a devlink instance for SF.
> > + */
> > +struct ice_sf_priv *ice_allocate_sf(struct device *dev)
> > +{
> > + return ice_devlink_alloc(dev, sizeof(struct ice_sf_priv),
> > + &ice_sf_devlink_ops);
> > +}
> > +
> > /**
> > * ice_devlink_register - Register devlink interface for this PF
> > * @pf: the PF to register the devlink for.
> > diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.h b/drivers/net/ethernet/intel/ice/devlink/devlink.h
> > index d291c0e2e17b..1b2a5980d5e8 100644
> > --- a/drivers/net/ethernet/intel/ice/devlink/devlink.h
> > +++ b/drivers/net/ethernet/intel/ice/devlink/devlink.h
> > @@ -5,6 +5,7 @@
> > #define _ICE_DEVLINK_H_
> > struct ice_pf *ice_allocate_pf(struct device *dev);
> > +struct ice_sf_priv *ice_allocate_sf(struct device *dev);
> > void ice_devlink_register(struct ice_pf *pf);
> > void ice_devlink_unregister(struct ice_pf *pf);
> > diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink_port.c b/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
> > index f5e305a71bd0..1b933083f551 100644
> > --- a/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
> > +++ b/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
> > @@ -432,6 +432,57 @@ void ice_devlink_destroy_vf_port(struct ice_vf *vf)
> > devlink_port_unregister(&vf->devlink_port);
> > }
> > +/**
> > + * ice_devlink_create_sf_dev_port - Register virtual port for a subfunction
> > + * @sf_dev: the subfunction device to create a devlink port for
> > + *
> > + * Register virtual flavour devlink port for the subfunction auxiliary device
> > + * created after activating a dynamically added devlink port.
> > + *
> > + * Return: zero on success or an error code on failure.
> > + */
> > +int ice_devlink_create_sf_dev_port(struct ice_sf_dev *sf_dev)
> > +{
> > + struct devlink_port_attrs attrs = {};
> > + struct devlink_port *devlink_port;
> > + struct ice_dynamic_port *dyn_port;
> > + struct devlink *devlink;
> > + struct ice_vsi *vsi;
> > + struct device *dev;
> > + struct ice_pf *pf;
> > + int err;
> > +
> > + dyn_port = sf_dev->dyn_port;
> > + vsi = dyn_port->vsi;
> > + pf = dyn_port->pf;
> > + dev = ice_pf_to_dev(pf);
> > +
> > + devlink_port = &sf_dev->priv->devlink_port;
> > +
> > + attrs.flavour = DEVLINK_PORT_FLAVOUR_VIRTUAL;
> > +
> > + devlink_port_attrs_set(devlink_port, &attrs);
> > + devlink = priv_to_devlink(sf_dev->priv);
> > +
> > + err = devl_port_register(devlink, devlink_port, vsi->idx);
> > + if (err)
> > + dev_err(dev, "Failed to create virtual devlink port for auxiliary subfunction device %d",
> > + vsi->idx);
> > +
> > + return err;
> > +}
> > +
> > +/**
> > + * ice_devlink_destroy_sf_dev_port - Destroy virtual port for a subfunction
> > + * @sf_dev: the subfunction device to create a devlink port for
> > + *
> > + * Unregisters the virtual port associated with this subfunction.
> > + */
> > +void ice_devlink_destroy_sf_dev_port(struct ice_sf_dev *sf_dev)
> > +{
> > + devl_port_unregister(&sf_dev->priv->devlink_port);
> > +}
> > +
> > /**
> > * ice_activate_dynamic_port - Activate a dynamic port
> > * @dyn_port: dynamic port instance to activate
> > diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink_port.h b/drivers/net/ethernet/intel/ice/devlink/devlink_port.h
> > index 30146fef64b9..1f66705e0261 100644
> > --- a/drivers/net/ethernet/intel/ice/devlink/devlink_port.h
> > +++ b/drivers/net/ethernet/intel/ice/devlink/devlink_port.h
> > @@ -5,6 +5,7 @@
> > #define _DEVLINK_PORT_H_
> > #include "../ice.h"
> > +#include "ice_sf_eth.h"
> > /**
> > * struct ice_dynamic_port - Track dynamically added devlink port instance
> > @@ -30,6 +31,8 @@ int ice_devlink_create_pf_port(struct ice_pf *pf);
> > void ice_devlink_destroy_pf_port(struct ice_pf *pf);
> > int ice_devlink_create_vf_port(struct ice_vf *vf);
> > void ice_devlink_destroy_vf_port(struct ice_vf *vf);
> > +int ice_devlink_create_sf_dev_port(struct ice_sf_dev *sf_dev);
> > +void ice_devlink_destroy_sf_dev_port(struct ice_sf_dev *sf_dev);
> > #define ice_devlink_port_to_dyn(p) \
> > container_of(port, struct ice_dynamic_port, devlink_port)
next prev parent reply other threads:[~2024-04-09 13:44 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-08 10:30 [Intel-wired-lan] [iwl-next v1 0/7] ice: support devlink subfunction Michal Swiatkowski
2024-04-08 10:30 ` Michal Swiatkowski
2024-04-08 10:30 ` [Intel-wired-lan] [iwl-next v1 1/7] ice: add new VSI type for subfunctions Michal Swiatkowski
2024-04-08 10:30 ` Michal Swiatkowski
2024-04-08 10:30 ` [Intel-wired-lan] [iwl-next v1 2/7] ice: export ice ndo_ops functions Michal Swiatkowski
2024-04-08 10:30 ` Michal Swiatkowski
2024-04-08 10:30 ` [Intel-wired-lan] [iwl-next v1 3/7] ice: add basic devlink subfunctions support Michal Swiatkowski
2024-04-08 10:30 ` Michal Swiatkowski
2024-04-08 10:30 ` [Intel-wired-lan] [iwl-next v1 4/7] ice: allocate devlink for subfunction Michal Swiatkowski
2024-04-08 10:30 ` Michal Swiatkowski
2024-04-09 8:34 ` [Intel-wired-lan] " Mateusz Polchlopek
2024-04-09 8:34 ` Mateusz Polchlopek
2024-04-09 13:44 ` Michal Swiatkowski [this message]
2024-04-09 13:44 ` Michal Swiatkowski
2024-04-08 10:30 ` [Intel-wired-lan] [iwl-next v1 5/7] ice: base subfunction aux driver Michal Swiatkowski
2024-04-08 10:30 ` Michal Swiatkowski
2024-04-08 10:30 ` [Intel-wired-lan] [iwl-next v1 6/7] ice: implement netdev for subfunction Michal Swiatkowski
2024-04-08 10:30 ` Michal Swiatkowski
2024-04-08 10:30 ` [Intel-wired-lan] [iwl-next v1 7/7] ice: allow to activate and deactivate subfunction Michal Swiatkowski
2024-04-08 10:30 ` 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=ZhVGPAEmqYNHJywJ@mev-dev \
--to=michal.swiatkowski@linux.intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jacob.e.keller@intel.com \
--cc=jiri@nvidia.com \
--cc=maciej.fijalkowski@intel.com \
--cc=mateusz.polchlopek@intel.com \
--cc=michal.kubiak@intel.com \
--cc=netdev@vger.kernel.org \
--cc=nex.sw.ncis.osdt.itp.upstreaming@intel.com \
--cc=pio.raczynski@gmail.com \
--cc=piotr.raczynski@intel.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.