From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH net-next v2 01/12] ice: basic support for eswitch mode management
Date: Tue, 22 Jun 2021 23:41:40 -0400 [thread overview]
Message-ID: <YNKtdJjFpyiZG1YJ@localhost.localdomain> (raw)
In-Reply-To: <f1083357-9eb9-3bbb-baa5-0b4392ca4d4f@molgen.mpg.de>
On Wed, Jun 23, 2021 at 07:58:00AM +0200, Paul Menzel wrote:
> Dear Michal, dear Grzegorz,
>
>
> Am 22.06.21 um 23:21 schrieb Michal Swiatkowski:
> > Write set and get eswitch mode functions used by devlink
>
> Commit 08f4b5918b2 (net/devlink: Add E-Switch mode control) spells it
> E-Switch mode.
>
> To make the commit summary a statement, maybe use:
>
> > ice: Support basic E-Switch mode control
>
Sure, thanks
> > ops. Use new pf struct member eswitch_mode to track current
> > eswitch mode in driver.
> >
> > Changing eswitch mode is only allowed when there are no
> > VFs created.
> >
> > Create new file for eswitch related code.
> >
> > Add config flag ICE_SWITCHDEV to allow user to choose if
> > switchdev support should be enabled or disabled.
> >
> > Use case examples:
> > - show current eswitch mode ('legacy' is the default one)
> > [root at localhost]# devlink dev eswitch show pci/0000:03:00.1
> > > pci/0000:03:00.1: mode legacy
>
> At least Mozilla Thunderbird displays this as a quote. Is your `devlink`
> command really prepending a >?
>
No, good catch, I will remove this >
> > - move to 'switchdev' mode
> > [root at localhost]# devlink dev eswitch set pci/0000:03:00.1 mode
> > switchdev
> > [root at localhost]# devlink dev eswitch show pci/0000:03:00.1
> > > pci/0000:03:00.1: mode switchdev
> >
> > - create 2 VFs
> > [root at localhost]# echo 2 > /sys/class/net/ens4f1/device/sriov_numvfs
> >
> > - unsuccessful attempt to change eswitch mode while VFs are created
> > [root at localhost]# devlink dev eswitch set pci/0000:03:00.1 mode legacy
> > > devlink answers: Operation not supported
> >
> > - destroy VFs
> > [root at localhost]# echo 0 > /sys/class/net/ens4f1/device/sriov_numvfs
> >
> > - restore 'legacy' mode
> > [root at localhost]# devlink dev eswitch set pci/0000:03:00.1 mode legacy
> > [root at localhost]# devlink dev eswitch show pci/0000:03:00.1
> > > pci/0000:03:00.1: mode legacy
>
> Thank you for adding these examples to the commit message. I?d put some of
> them into the Kconfig description of `ICE_SWITCHDEV`.
>
>
> Kind regards,
>
> Paul
>
>
You mean putting this devlink command to help section of Kconfig?
Something like:
To go to E-switch mode type:
devlink dev eswitch set pci/0000:03:00.1 mode switchdev
Is this right place for this kind of information? I have seen that
Mellanox doesn't have command example in Kconfig for switchdev.
Thanks for reviweing this.
Best regards,
Michal
> > Co-developed-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
> > Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
> > Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
> > ---
> > drivers/net/ethernet/intel/Kconfig | 10 ++++
> > drivers/net/ethernet/intel/ice/Makefile | 1 +
> > drivers/net/ethernet/intel/ice/ice.h | 1 +
> > drivers/net/ethernet/intel/ice/ice_devlink.c | 3 +
> > drivers/net/ethernet/intel/ice/ice_eswitch.c | 62 ++++++++++++++++++++
> > drivers/net/ethernet/intel/ice/ice_eswitch.h | 34 +++++++++++
> > 6 files changed, 111 insertions(+)
> > create mode 100644 drivers/net/ethernet/intel/ice/ice_eswitch.c
> > create mode 100644 drivers/net/ethernet/intel/ice/ice_eswitch.h
> >
> > diff --git a/drivers/net/ethernet/intel/Kconfig b/drivers/net/ethernet/intel/Kconfig
> > index 3639cf79cfae..4da8b3930f6e 100644
> > --- a/drivers/net/ethernet/intel/Kconfig
> > +++ b/drivers/net/ethernet/intel/Kconfig
> > @@ -313,6 +313,16 @@ config ICE
> > To compile this driver as a module, choose M here. The module
> > will be called ice.
> > +config ICE_SWITCHDEV
> > + bool "Switchdev Support"
> > + default y
> > + depends on ICE && NET_SWITCHDEV
> > + help
> > + Say Y here if you want to use Switchdev in the
> > + driver.
> > +
> > + If unsure, say N.
> > +
> > config FM10K
> > tristate "Intel(R) FM10000 Ethernet Switch Host Interface Support"
> > default n
> > diff --git a/drivers/net/ethernet/intel/ice/Makefile b/drivers/net/ethernet/intel/ice/Makefile
> > index 4f538cdf42c1..0545594c80ba 100644
> > --- a/drivers/net/ethernet/intel/ice/Makefile
> > +++ b/drivers/net/ethernet/intel/ice/Makefile
> > @@ -33,3 +33,4 @@ ice-$(CONFIG_PTP_1588_CLOCK) += ice_ptp.o ice_ptp_hw.o
> > ice-$(CONFIG_DCB) += ice_dcb.o ice_dcb_nl.o ice_dcb_lib.o
> > ice-$(CONFIG_RFS_ACCEL) += ice_arfs.o
> > ice-$(CONFIG_XDP_SOCKETS) += ice_xsk.o
> > +ice-$(CONFIG_ICE_SWITCHDEV) += ice_eswitch.o
> > diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
> > index f4729caccbe9..729d375fbebc 100644
> > --- a/drivers/net/ethernet/intel/ice/ice.h
> > +++ b/drivers/net/ethernet/intel/ice/ice.h
> > @@ -430,6 +430,7 @@ struct ice_pf {
> > struct ice_vsi **vsi; /* VSIs created by the driver */
> > struct ice_sw *first_sw; /* first switch created by firmware */
> > + u16 eswitch_mode; /* current mode of eswitch */
> > /* Virtchnl/SR-IOV config info */
> > struct ice_vf *vf;
> > u16 num_alloc_vfs; /* actual number of VFs allocated */
> > diff --git a/drivers/net/ethernet/intel/ice/ice_devlink.c b/drivers/net/ethernet/intel/ice/ice_devlink.c
> > index d69507d57de1..de6d0a8ba1a8 100644
> > --- a/drivers/net/ethernet/intel/ice/ice_devlink.c
> > +++ b/drivers/net/ethernet/intel/ice/ice_devlink.c
> > @@ -4,6 +4,7 @@
> > #include "ice.h"
> > #include "ice_lib.h"
> > #include "ice_devlink.h"
> > +#include "ice_eswitch.h"
> > #include "ice_fw_update.h"
> > /* context for devlink info version reporting */
> > @@ -423,6 +424,8 @@ ice_devlink_flash_update(struct devlink *devlink,
> > static const struct devlink_ops ice_devlink_ops = {
> > .supported_flash_update_params = DEVLINK_SUPPORT_FLASH_UPDATE_OVERWRITE_MASK,
> > + .eswitch_mode_get = ice_eswitch_mode_get,
> > + .eswitch_mode_set = ice_eswitch_mode_set,
> > .info_get = ice_devlink_info_get,
> > .flash_update = ice_devlink_flash_update,
> > };
> > diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch.c b/drivers/net/ethernet/intel/ice/ice_eswitch.c
> > new file mode 100644
> > index 000000000000..1370c41b77ab
> > --- /dev/null
> > +++ b/drivers/net/ethernet/intel/ice/ice_eswitch.c
> > @@ -0,0 +1,62 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/* Copyright (C) 2019-2021, Intel Corporation. */
> > +
> > +#include "ice.h"
> > +#include "ice_eswitch.h"
> > +#include "ice_devlink.h"
> > +
> > +/**
> > + * ice_eswitch_mode_set - set new eswitch mode
> > + * @devlink: pointer to devlink structure
> > + * @mode: eswitch mode to switch to
> > + * @extack: pointer to extack structure
> > + */
> > +int
> > +ice_eswitch_mode_set(struct devlink *devlink, u16 mode,
> > + struct netlink_ext_ack *extack)
> > +{
> > + struct ice_pf *pf = devlink_priv(devlink);
> > +
> > + if (pf->eswitch_mode == mode)
> > + return 0;
> > +
> > + if (pf->num_alloc_vfs) {
> > + dev_info(ice_pf_to_dev(pf), "Changing eswitch mode is allowed only if there is no VFs created");
> > + NL_SET_ERR_MSG_MOD(extack, "Changing eswitch mode is allowed only if there is no VFs created");
> > + return -EOPNOTSUPP;
> > + }
> > +
> > + switch (mode) {
> > + case DEVLINK_ESWITCH_MODE_LEGACY:
> > + dev_info(ice_pf_to_dev(pf), "PF %d changed eswitch mode to legacy",
> > + pf->hw.pf_id);
> > + NL_SET_ERR_MSG_MOD(extack, "Changed eswitch mode to legacy");
> > + break;
> > + case DEVLINK_ESWITCH_MODE_SWITCHDEV:
> > + {
> > + dev_info(ice_pf_to_dev(pf), "PF %d changed eswitch mode to switchdev",
> > + pf->hw.pf_id);
> > + NL_SET_ERR_MSG_MOD(extack, "Changed eswitch mode to switchdev");
> > + break;
> > + }
> > + default:
> > + NL_SET_ERR_MSG_MOD(extack, "Unknown eswitch mode");
> > + return -EINVAL;
> > + }
> > +
> > + pf->eswitch_mode = mode;
> > + return 0;
> > +}
> > +
> > +/**
> > + * ice_eswitch_mode_get - get current eswitch mode
> > + * @devlink: pointer to devlink structure
> > + * @mode: output parameter for current eswitch mode
> > + */
> > +int ice_eswitch_mode_get(struct devlink *devlink, u16 *mode)
> > +{
> > + struct ice_pf *pf = devlink_priv(devlink);
> > +
> > + *mode = pf->eswitch_mode;
> > + return 0;
> > +}
> > diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch.h b/drivers/net/ethernet/intel/ice/ice_eswitch.h
> > new file mode 100644
> > index 000000000000..0aa6fb7e0c4e
> > --- /dev/null
> > +++ b/drivers/net/ethernet/intel/ice/ice_eswitch.h
> > @@ -0,0 +1,34 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +/* Copyright (C) 2019-2021, Intel Corporation. */
> > +
> > +#ifndef _ICE_ESWITCH_H_
> > +#define _ICE_ESWITCH_H_
> > +#include <net/devlink.h>
> > +
> > +#ifdef CONFIG_ICE_SWITCHDEV
> > +int ice_eswitch_mode_get(struct devlink *devlink, u16 *mode);
> > +int
> > +ice_eswitch_mode_set(struct devlink *devlink, u16 mode,
> > + struct netlink_ext_ack *extack);
> > +bool ice_is_eswitch_mode_switchdev(struct ice_pf *pf);
> > +#else /* CONFIG_ICE_SWITCHDEV */
> > +static inline int
> > +ice_eswitch_mode_get(struct devlink *devlink, u16 *mode)
> > +{
> > + return DEVLINK_ESWITCH_MODE_LEGACY;
> > +}
> > +
> > +static inline int
> > +ice_eswitch_mode_set(struct devlink *devlink, u16 mode,
> > + struct netlink_ext_ack *extack)
> > +{
> > + return -EOPNOTSUPP;
> > +}
> > +
> > +static inline bool
> > +ice_is_eswitch_mode_switchdev(struct ice_pf *pf)
> > +{
> > + return false;
> > +}
> > +#endif /* CONFIG_ICE_SWITCHDEV */
> > +#endif
> >
next prev parent reply other threads:[~2021-06-23 3:41 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-22 21:21 [Intel-wired-lan] [PATCH net-next v2 00/12] Add switchdev driver model for ice driver Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 01/12] ice: basic support for eswitch mode management Michal Swiatkowski
2021-06-23 5:58 ` Paul Menzel
2021-06-23 3:41 ` Michal Swiatkowski [this message]
2021-07-05 10:22 ` Paul Menzel
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 02/12] ice: Move devlink port to PF/VF struct Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 03/12] ice: introduce VF port representor Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 04/12] ice: allow process vf opcodes in different ways Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 05/12] ice: manage VSI antispoof and destination override Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 06/12] ice: allow changing lan_en and lb_en on dflt rules Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 07/12] ice: setting and releasing switchdev environment Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 08/12] ice: introduce new type of VSI for switchdev Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 09/12] ice: enable/disable switchdev when managing VFs Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 10/12] ice: rebuild switchdev when resetting all VFs Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 11/12] ice: switchdev slow path Michal Swiatkowski
2021-06-22 21:21 ` [Intel-wired-lan] [PATCH net-next v2 12/12] ice: add port representor ethtool ops and stats Michal Swiatkowski
2021-06-23 5:48 ` [Intel-wired-lan] [PATCH net-next v2 00/12] Add switchdev driver model for ice driver Paul Menzel
2021-06-23 7:50 ` 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=YNKtdJjFpyiZG1YJ@localhost.localdomain \
--to=michal.swiatkowski@linux.intel.com \
--cc=intel-wired-lan@osuosl.org \
/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