From nobody Fri Dec 19 17:33:10 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B060C32771 for ; Mon, 26 Sep 2022 11:23:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237860AbiIZLW7 (ORCPT ); Mon, 26 Sep 2022 07:22:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231727AbiIZLVh (ORCPT ); Mon, 26 Sep 2022 07:21:37 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0922C67164; Mon, 26 Sep 2022 03:39:20 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id D734260BB7; Mon, 26 Sep 2022 10:38:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C9E30C433D6; Mon, 26 Sep 2022 10:38:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1664188707; bh=NI1KVVdpCcaD/rkhIBvb6loFYvP+w155ya0gBH6kW10=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=L42KWepWKCu5QCscxMB4UZxmH2vmB9w1ZAUNiFfxWTs2djjC3gTSRzAbcoxj7u/cB UKLubkCbNSlh2ssBq3eGXVPc7ran/z9tHQkWhACG+5E0Uita3w0Y+F/a29ncw15Ty1 r37lnZXb8he2uPLGlBj9o6KfQGRfOkHtuMawNbxU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vladimir Oltean , Jakub Kicinski , Sasha Levin Subject: [PATCH 5.15 096/148] net: enetc: move enetc_set_psfp() out of the common enetc_set_features() Date: Mon, 26 Sep 2022 12:12:10 +0200 Message-Id: <20220926100759.677969818@linuxfoundation.org> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220926100756.074519146@linuxfoundation.org> References: <20220926100756.074519146@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Vladimir Oltean [ Upstream commit fed38e64d9b99d65a36c0dbadc3d3f8ddd9ea030 ] The VF netdev driver shouldn't respond to changes in the NETIF_F_HW_TC flag; only PFs should. Moreover, TSN-specific code should go to enetc_qos.c, which should not be included in the VF driver. Fixes: 79e499829f3f ("net: enetc: add hw tc hw offload features for PSPF ca= pability") Signed-off-by: Vladimir Oltean Link: https://lore.kernel.org/r/20220916133209.3351399-1-vladimir.oltean@nx= p.com Signed-off-by: Jakub Kicinski Signed-off-by: Sasha Levin --- drivers/net/ethernet/freescale/enetc/enetc.c | 32 +------------------ drivers/net/ethernet/freescale/enetc/enetc.h | 9 ++++-- .../net/ethernet/freescale/enetc/enetc_pf.c | 11 ++++++- .../net/ethernet/freescale/enetc/enetc_qos.c | 23 +++++++++++++ .../net/ethernet/freescale/enetc/enetc_vf.c | 4 ++- 5 files changed, 44 insertions(+), 35 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/eth= ernet/freescale/enetc/enetc.c index 042327b9981f..bd840061ba8f 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -2307,29 +2307,6 @@ static int enetc_set_rss(struct net_device *ndev, in= t en) return 0; } =20 -static int enetc_set_psfp(struct net_device *ndev, int en) -{ - struct enetc_ndev_priv *priv =3D netdev_priv(ndev); - int err; - - if (en) { - err =3D enetc_psfp_enable(priv); - if (err) - return err; - - priv->active_offloads |=3D ENETC_F_QCI; - return 0; - } - - err =3D enetc_psfp_disable(priv); - if (err) - return err; - - priv->active_offloads &=3D ~ENETC_F_QCI; - - return 0; -} - static void enetc_enable_rxvlan(struct net_device *ndev, bool en) { struct enetc_ndev_priv *priv =3D netdev_priv(ndev); @@ -2348,11 +2325,9 @@ static void enetc_enable_txvlan(struct net_device *n= dev, bool en) enetc_bdr_enable_txvlan(&priv->si->hw, i, en); } =20 -int enetc_set_features(struct net_device *ndev, - netdev_features_t features) +void enetc_set_features(struct net_device *ndev, netdev_features_t feature= s) { netdev_features_t changed =3D ndev->features ^ features; - int err =3D 0; =20 if (changed & NETIF_F_RXHASH) enetc_set_rss(ndev, !!(features & NETIF_F_RXHASH)); @@ -2364,11 +2339,6 @@ int enetc_set_features(struct net_device *ndev, if (changed & NETIF_F_HW_VLAN_CTAG_TX) enetc_enable_txvlan(ndev, !!(features & NETIF_F_HW_VLAN_CTAG_TX)); - - if (changed & NETIF_F_HW_TC) - err =3D enetc_set_psfp(ndev, !!(features & NETIF_F_HW_TC)); - - return err; } =20 #ifdef CONFIG_FSL_ENETC_PTP_CLOCK diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/eth= ernet/freescale/enetc/enetc.h index 08b283347d9c..5cacda8b4ef0 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -385,8 +385,7 @@ void enetc_start(struct net_device *ndev); void enetc_stop(struct net_device *ndev); netdev_tx_t enetc_xmit(struct sk_buff *skb, struct net_device *ndev); struct net_device_stats *enetc_get_stats(struct net_device *ndev); -int enetc_set_features(struct net_device *ndev, - netdev_features_t features); +void enetc_set_features(struct net_device *ndev, netdev_features_t feature= s); int enetc_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd); int enetc_setup_tc(struct net_device *ndev, enum tc_setup_type type, void *type_data); @@ -421,6 +420,7 @@ int enetc_setup_tc_block_cb(enum tc_setup_type type, vo= id *type_data, int enetc_setup_tc_psfp(struct net_device *ndev, void *type_data); int enetc_psfp_init(struct enetc_ndev_priv *priv); int enetc_psfp_clean(struct enetc_ndev_priv *priv); +int enetc_set_psfp(struct net_device *ndev, bool en); =20 static inline void enetc_get_max_cap(struct enetc_ndev_priv *priv) { @@ -496,4 +496,9 @@ static inline int enetc_psfp_disable(struct enetc_ndev_= priv *priv) { return 0; } + +static inline int enetc_set_psfp(struct net_device *ndev, bool en) +{ + return 0; +} #endif diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/= ethernet/freescale/enetc/enetc_pf.c index d522bd5c90b4..36f5abd1c61b 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -708,6 +708,13 @@ static int enetc_pf_set_features(struct net_device *nd= ev, { netdev_features_t changed =3D ndev->features ^ features; struct enetc_ndev_priv *priv =3D netdev_priv(ndev); + int err; + + if (changed & NETIF_F_HW_TC) { + err =3D enetc_set_psfp(ndev, !!(features & NETIF_F_HW_TC)); + if (err) + return err; + } =20 if (changed & NETIF_F_HW_VLAN_CTAG_FILTER) { struct enetc_pf *pf =3D enetc_si_priv(priv->si); @@ -721,7 +728,9 @@ static int enetc_pf_set_features(struct net_device *nde= v, if (changed & NETIF_F_LOOPBACK) enetc_set_loopback(ndev, !!(features & NETIF_F_LOOPBACK)); =20 - return enetc_set_features(ndev, features); + enetc_set_features(ndev, features); + + return 0; } =20 static const struct net_device_ops enetc_ndev_ops =3D { diff --git a/drivers/net/ethernet/freescale/enetc/enetc_qos.c b/drivers/net= /ethernet/freescale/enetc/enetc_qos.c index d779dde522c8..6b236e0fd806 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_qos.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_qos.c @@ -1529,6 +1529,29 @@ int enetc_setup_tc_block_cb(enum tc_setup_type type,= void *type_data, } } =20 +int enetc_set_psfp(struct net_device *ndev, bool en) +{ + struct enetc_ndev_priv *priv =3D netdev_priv(ndev); + int err; + + if (en) { + err =3D enetc_psfp_enable(priv); + if (err) + return err; + + priv->active_offloads |=3D ENETC_F_QCI; + return 0; + } + + err =3D enetc_psfp_disable(priv); + if (err) + return err; + + priv->active_offloads &=3D ~ENETC_F_QCI; + + return 0; +} + int enetc_psfp_init(struct enetc_ndev_priv *priv) { if (epsfp.psfp_sfi_bitmap) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_vf.c b/drivers/net/= ethernet/freescale/enetc/enetc_vf.c index 1a9d1e8b772c..8daea3a776b5 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_vf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_vf.c @@ -88,7 +88,9 @@ static int enetc_vf_set_mac_addr(struct net_device *ndev,= void *addr) static int enetc_vf_set_features(struct net_device *ndev, netdev_features_t features) { - return enetc_set_features(ndev, features); + enetc_set_features(ndev, features); + + return 0; } =20 /* Probing/ Init */ --=20 2.35.1