lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID:
 <PH0PR12MB54818883821AC50658B042E5DC3F2@PH0PR12MB5481.namprd12.prod.outlook.com>
Date: Mon, 1 Apr 2024 09:47:49 +0000
From: Parav Pandit <parav@...dia.com>
To: Kalesh Anakkur Purayil <kalesh-anakkur.purayil@...adcom.com>
CC: "netdev@...r.kernel.org" <netdev@...r.kernel.org>, "davem@...emloft.net"
	<davem@...emloft.net>, "edumazet@...gle.com" <edumazet@...gle.com>,
	"kuba@...nel.org" <kuba@...nel.org>, "pabeni@...hat.com" <pabeni@...hat.com>,
	"corbet@....net" <corbet@....net>, Saeed Mahameed <saeedm@...dia.com>,
	"leon@...nel.org" <leon@...nel.org>, "jiri@...nulli.us" <jiri@...nulli.us>,
	Shay Drori <shayd@...dia.com>, Dan Jurgens <danielj@...dia.com>, Dima Chumak
	<dchumak@...dia.com>, "linux-doc@...r.kernel.org"
	<linux-doc@...r.kernel.org>, "linux-rdma@...r.kernel.org"
	<linux-rdma@...r.kernel.org>, Jiri Pirko <jiri@...dia.com>
Subject: RE: [net-next 2/2] mlx5/core: Support max_io_eqs for a function


> From: Kalesh Anakkur Purayil <kalesh-anakkur.purayil@...adcom.com>
> Sent: Monday, April 1, 2024 2:47 PM
> 
> On Mon, Apr 1, 2024 at 2:36 PM Parav Pandit <parav@...dia.com> wrote:
> >
> > Implement get and set for the maximum IO event queues for SF and VF.
> > This enables administrator on the hypervisor to control the maximum
> > IO event queues which are typically used to derive the maximum and
> > default number of net device channels or rdma device completion vectors.
> >
> > Signed-off-by: Parav Pandit <parav@...dia.com>
> > Reviewed-by: Jiri Pirko <jiri@...dia.com>
> > ---
> >  .../mellanox/mlx5/core/esw/devlink_port.c     |  2 +
> >  .../net/ethernet/mellanox/mlx5/core/eswitch.h |  7 ++
> >  .../mellanox/mlx5/core/eswitch_offloads.c     | 94 +++++++++++++++++++
> >  3 files changed, 103 insertions(+)
> >
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
> b/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
> > index d8e739cbcbce..76d1ed93c773 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
> > @@ -98,6 +98,8 @@ static const struct devlink_port_ops
> mlx5_esw_pf_vf_dl_port_ops = {
> >         .port_fn_ipsec_packet_get = mlx5_devlink_port_fn_ipsec_packet_get,
> >         .port_fn_ipsec_packet_set = mlx5_devlink_port_fn_ipsec_packet_set,
> >  #endif /* CONFIG_XFRM_OFFLOAD */
> > +       .port_fn_max_io_eqs_get = mlx5_devlink_port_fn_max_io_eqs_get,
> > +       .port_fn_max_io_eqs_set = mlx5_devlink_port_fn_max_io_eqs_set,
> >  };
> >
> >  static void mlx5_esw_offloads_sf_devlink_port_attrs_set(struct
> mlx5_eswitch *esw,
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
> b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
> > index 349e28a6dd8d..50ce1ea20dd4 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
> > @@ -573,6 +573,13 @@ int mlx5_devlink_port_fn_ipsec_packet_get(struct
> devlink_port *port, bool *is_en
> >  int mlx5_devlink_port_fn_ipsec_packet_set(struct devlink_port *port, bool
> enable,
> >                                           struct netlink_ext_ack *extack);
> >  #endif /* CONFIG_XFRM_OFFLOAD */
> > +int mlx5_devlink_port_fn_max_io_eqs_get(struct devlink_port *port,
> > +                                       u32 *max_io_eqs,
> > +                                       struct netlink_ext_ack *extack);
> > +int mlx5_devlink_port_fn_max_io_eqs_set(struct devlink_port *port,
> > +                                       u32 max_io_eqs,
> > +                                       struct netlink_ext_ack *extack);
> > +
> >  void *mlx5_eswitch_get_uplink_priv(struct mlx5_eswitch *esw, u8
> rep_type);
> >
> >  int __mlx5_eswitch_set_vport_vlan(struct mlx5_eswitch *esw,
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
> b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
> > index baaae628b0a0..9d9a06a25cac 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
> > @@ -66,6 +66,8 @@
> >
> >  #define MLX5_ESW_FT_OFFLOADS_DROP_RULE (1)
> >
> > +#define MLX5_ESW_MAX_CTRL_EQS 4
> > +
> >  static struct esw_vport_tbl_namespace mlx5_esw_vport_tbl_mirror_ns = {
> >         .max_fte = MLX5_ESW_VPORT_TBL_SIZE,
> >         .max_num_groups = MLX5_ESW_VPORT_TBL_NUM_GROUPS,
> > @@ -4557,3 +4559,95 @@ int
> mlx5_devlink_port_fn_ipsec_packet_set(struct devlink_port *port,
> >         return err;
> >  }
> >  #endif /* CONFIG_XFRM_OFFLOAD */
> > +
> > +int mlx5_devlink_port_fn_max_io_eqs_get(struct devlink_port *port, u32
> *max_io_eqs,
> > +                                       struct netlink_ext_ack *extack)
> > +{
> > +       struct mlx5_eswitch *esw = mlx5_devlink_eswitch_nocheck_get(port-
> >devlink);
> > +       struct mlx5_vport *vport = mlx5_devlink_port_vport_get(port);
> > +       int query_out_sz = MLX5_ST_SZ_BYTES(query_hca_cap_out);
> > +       u16 vport_num = vport->vport;
> > +       void *query_ctx;
> > +       void *hca_caps;
> > +       u32 max_eqs;
> > +       int err;
> > +
> > +       if (!MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
> > +               NL_SET_ERR_MSG_MOD(extack, "Device doesn't support VHCA
> management");
> > +               return -EOPNOTSUPP;
> > +       }
> > +
> > +       query_ctx = kzalloc(query_out_sz, GFP_KERNEL);
> > +       if (!query_ctx)
> > +               return -ENOMEM;
> > +
> > +       mutex_lock(&esw->state_lock);
> > +       err = mlx5_vport_get_other_func_cap(esw->dev, vport_num,
> query_ctx,
> > +                                           MLX5_CAP_GENERAL);
> > +       if (err) {
> > +               NL_SET_ERR_MSG_MOD(extack, "Failed getting HCA caps");
> > +               goto out;
> > +       }
> > +
> > +       hca_caps = MLX5_ADDR_OF(query_hca_cap_out, query_ctx, capability);
> > +       max_eqs = MLX5_GET(cmd_hca_cap, hca_caps, max_num_eqs);
> > +       if (max_eqs < MLX5_ESW_MAX_CTRL_EQS)
> > +               *max_io_eqs = 0;
> > +       else
> > +               *max_io_eqs = max_eqs - MLX5_ESW_MAX_CTRL_EQS;
> > +out:
> [Kalesh]: Missing " kfree(query_ctx);" here?
> > +       mutex_unlock(&esw->state_lock);
> > +       return 0;
> [Kalesh] "return err;" to propagate the error back to the caller?
> > +}
Ack. Thanks Kalesh. Fixing both the comments in v1.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ