From: Simon Horman <horms@kernel.org>
To: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
Cc: Vinicius Costa Gomes <vinicius.gomes@intel.com>,
intel-wired-lan@lists.osuosl.org, stable@vger.kernel.org,
linux-kernel@vger.kernel.org, Eric Dumazet <edumazet@google.com>,
Tony Nguyen <anthony.l.nguyen@intel.com>,
netdev@vger.kernel.org, Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [Intel-wired-lan] [PATCH iwl-net v1 2/4] igc: Fix reset adapter logics when tx mode change
Date: Wed, 3 Jul 2024 16:03:18 +0100 [thread overview]
Message-ID: <20240703150318.GN598357@kernel.org> (raw)
In-Reply-To: <20240702040926.3327530-3-faizal.abdul.rahim@linux.intel.com>
On Tue, Jul 02, 2024 at 12:09:24AM -0400, Faizal Rahim wrote:
> Following the "igc: Fix TX Hang issue when QBV Gate is close" changes,
> remaining issues with the reset adapter logic in igc_tsn_offload_apply()
> have been observed:
>
> 1. The reset adapter logics for i225 and i226 differ, although they should
> be the same according to the guidelines in I225/6 HW Design Section
> 7.5.2.1 on software initialization during tx mode changes.
> 2. The i225 resets adapter every time, even though tx mode doesn't change.
> This occurs solely based on the condition igc_is_device_id_i225() when
> calling schedule_work().
> 3. i226 doesn't reset adapter for tsn->legacy tx mode changes. It only
> resets adapter for legacy->tsn tx mode transitions.
> 4. qbv_count introduced in the patch is actually not needed; in this
> context, a non-zero value of qbv_count is used to indicate if tx mode
> was unconditionally set to tsn in igc_tsn_enable_offload(). This could
> be replaced by checking the existing register
> IGC_TQAVCTRL_TRANSMIT_MODE_TSN bit.
>
> This patch resolves all issues and enters schedule_work() to reset the
> adapter only when changing tx mode. It also removes reliance on qbv_count.
>
> qbv_count field will be removed in a future patch.
>
> Test ran:
>
> 1. Verify reset adapter behaviour in i225/6:
> a) Enrol a new GCL
> Reset adapter observed (tx mode change legacy->tsn)
> b) Enrol a new GCL without deleting qdisc
> No reset adapter observed (tx mode remain tsn->tsn)
> c) Delete qdisc
> Reset adapter observed (tx mode change tsn->legacy)
>
> 2. Tested scenario from "igc: Fix TX Hang issue when QBV Gate is closed"
> to confirm it remains resolved.
>
> Fixes: 175c241288c0 ("igc: Fix TX Hang issue when QBV Gate is closed")
> Signed-off-by: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
Hi Faizal,
Nits below not withstahdning, this looks good to me.
Reviewed-by: Simon Horman <horms@kernel.org>
> ---
> drivers/net/ethernet/intel/igc/igc_tsn.c | 26 +++++++++++++++++++++---
> 1 file changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.c b/drivers/net/ethernet/intel/igc/igc_tsn.c
> index 02dd41aff634..61f047ebf34d 100644
> --- a/drivers/net/ethernet/intel/igc/igc_tsn.c
> +++ b/drivers/net/ethernet/intel/igc/igc_tsn.c
> @@ -49,6 +49,13 @@ static unsigned int igc_tsn_new_flags(struct igc_adapter *adapter)
> return new_flags;
> }
>
> +static bool igc_tsn_is_tx_mode_in_tsn(struct igc_adapter *adapter)
> +{
> + struct igc_hw *hw = &adapter->hw;
> +
> + return (bool)(rd32(IGC_TQAVCTRL) & IGC_TQAVCTRL_TRANSMIT_MODE_TSN);
Perhaps it is more a question of taste than anything else.
But my preference, FIIW, is to avoid casts.
And I think in this case using !! is a common pattern.
(Completely untested!)
return !!(rd32(IGC_TQAVCTRL) & IGC_TQAVCTRL_TRANSMIT_MODE_TSN);
> +}
> +
> void igc_tsn_adjust_txtime_offset(struct igc_adapter *adapter)
> {
> struct igc_hw *hw = &adapter->hw;
> @@ -334,15 +341,28 @@ int igc_tsn_reset(struct igc_adapter *adapter)
> return err;
> }
>
> +static bool igc_tsn_will_tx_mode_change(struct igc_adapter *adapter)
> +{
> + bool any_tsn_enabled = (bool)(igc_tsn_new_flags(adapter) &
> + IGC_FLAG_TSN_ANY_ENABLED);
Ditto.
> +
> + if ((any_tsn_enabled && !igc_tsn_is_tx_mode_in_tsn(adapter)) ||
> + (!any_tsn_enabled && igc_tsn_is_tx_mode_in_tsn(adapter)))
> + return true;
> + else
> + return false;
Likewise, this is probably more a matter of taste than anything else.
But I think this could be expressed as:
(Completely untested!)
return (any_tsn_enabled && !igc_tsn_is_tx_mode_in_tsn(adapter)) ||
(!any_tsn_enabled && igc_tsn_is_tx_mode_in_tsn(adapter));
Similarly in the previous patch of this series.
> +}
> +
> int igc_tsn_offload_apply(struct igc_adapter *adapter)
> {
> struct igc_hw *hw = &adapter->hw;
>
> - /* Per I225/6 HW Design Section 7.5.2.1, transmit mode
> - * cannot be changed dynamically. Require reset the adapter.
> + /* Per I225/6 HW Design Section 7.5.2.1 guideline, if tx mode change
> + * from legacy->tsn or tsn->legacy, then reset adapter is needed.
> */
> if (netif_running(adapter->netdev) &&
> - (igc_is_device_id_i225(hw) || !adapter->qbv_count)) {
> + (igc_is_device_id_i225(hw) || igc_is_device_id_i226(hw)) &&
> + igc_tsn_will_tx_mode_change(adapter)) {
> schedule_work(&adapter->reset_task);
> return 0;
> }
> --
> 2.25.1
>
>
WARNING: multiple messages have this Message-ID (diff)
From: Simon Horman <horms@kernel.org>
To: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
Cc: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Jesse Brandeburg <jesse.brandeburg@intel.com>,
Tony Nguyen <anthony.l.nguyen@intel.com>,
Vinicius Costa Gomes <vinicius.gomes@intel.com>,
intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH iwl-net v1 2/4] igc: Fix reset adapter logics when tx mode change
Date: Wed, 3 Jul 2024 16:03:18 +0100 [thread overview]
Message-ID: <20240703150318.GN598357@kernel.org> (raw)
In-Reply-To: <20240702040926.3327530-3-faizal.abdul.rahim@linux.intel.com>
On Tue, Jul 02, 2024 at 12:09:24AM -0400, Faizal Rahim wrote:
> Following the "igc: Fix TX Hang issue when QBV Gate is close" changes,
> remaining issues with the reset adapter logic in igc_tsn_offload_apply()
> have been observed:
>
> 1. The reset adapter logics for i225 and i226 differ, although they should
> be the same according to the guidelines in I225/6 HW Design Section
> 7.5.2.1 on software initialization during tx mode changes.
> 2. The i225 resets adapter every time, even though tx mode doesn't change.
> This occurs solely based on the condition igc_is_device_id_i225() when
> calling schedule_work().
> 3. i226 doesn't reset adapter for tsn->legacy tx mode changes. It only
> resets adapter for legacy->tsn tx mode transitions.
> 4. qbv_count introduced in the patch is actually not needed; in this
> context, a non-zero value of qbv_count is used to indicate if tx mode
> was unconditionally set to tsn in igc_tsn_enable_offload(). This could
> be replaced by checking the existing register
> IGC_TQAVCTRL_TRANSMIT_MODE_TSN bit.
>
> This patch resolves all issues and enters schedule_work() to reset the
> adapter only when changing tx mode. It also removes reliance on qbv_count.
>
> qbv_count field will be removed in a future patch.
>
> Test ran:
>
> 1. Verify reset adapter behaviour in i225/6:
> a) Enrol a new GCL
> Reset adapter observed (tx mode change legacy->tsn)
> b) Enrol a new GCL without deleting qdisc
> No reset adapter observed (tx mode remain tsn->tsn)
> c) Delete qdisc
> Reset adapter observed (tx mode change tsn->legacy)
>
> 2. Tested scenario from "igc: Fix TX Hang issue when QBV Gate is closed"
> to confirm it remains resolved.
>
> Fixes: 175c241288c0 ("igc: Fix TX Hang issue when QBV Gate is closed")
> Signed-off-by: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
Hi Faizal,
Nits below not withstahdning, this looks good to me.
Reviewed-by: Simon Horman <horms@kernel.org>
> ---
> drivers/net/ethernet/intel/igc/igc_tsn.c | 26 +++++++++++++++++++++---
> 1 file changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.c b/drivers/net/ethernet/intel/igc/igc_tsn.c
> index 02dd41aff634..61f047ebf34d 100644
> --- a/drivers/net/ethernet/intel/igc/igc_tsn.c
> +++ b/drivers/net/ethernet/intel/igc/igc_tsn.c
> @@ -49,6 +49,13 @@ static unsigned int igc_tsn_new_flags(struct igc_adapter *adapter)
> return new_flags;
> }
>
> +static bool igc_tsn_is_tx_mode_in_tsn(struct igc_adapter *adapter)
> +{
> + struct igc_hw *hw = &adapter->hw;
> +
> + return (bool)(rd32(IGC_TQAVCTRL) & IGC_TQAVCTRL_TRANSMIT_MODE_TSN);
Perhaps it is more a question of taste than anything else.
But my preference, FIIW, is to avoid casts.
And I think in this case using !! is a common pattern.
(Completely untested!)
return !!(rd32(IGC_TQAVCTRL) & IGC_TQAVCTRL_TRANSMIT_MODE_TSN);
> +}
> +
> void igc_tsn_adjust_txtime_offset(struct igc_adapter *adapter)
> {
> struct igc_hw *hw = &adapter->hw;
> @@ -334,15 +341,28 @@ int igc_tsn_reset(struct igc_adapter *adapter)
> return err;
> }
>
> +static bool igc_tsn_will_tx_mode_change(struct igc_adapter *adapter)
> +{
> + bool any_tsn_enabled = (bool)(igc_tsn_new_flags(adapter) &
> + IGC_FLAG_TSN_ANY_ENABLED);
Ditto.
> +
> + if ((any_tsn_enabled && !igc_tsn_is_tx_mode_in_tsn(adapter)) ||
> + (!any_tsn_enabled && igc_tsn_is_tx_mode_in_tsn(adapter)))
> + return true;
> + else
> + return false;
Likewise, this is probably more a matter of taste than anything else.
But I think this could be expressed as:
(Completely untested!)
return (any_tsn_enabled && !igc_tsn_is_tx_mode_in_tsn(adapter)) ||
(!any_tsn_enabled && igc_tsn_is_tx_mode_in_tsn(adapter));
Similarly in the previous patch of this series.
> +}
> +
> int igc_tsn_offload_apply(struct igc_adapter *adapter)
> {
> struct igc_hw *hw = &adapter->hw;
>
> - /* Per I225/6 HW Design Section 7.5.2.1, transmit mode
> - * cannot be changed dynamically. Require reset the adapter.
> + /* Per I225/6 HW Design Section 7.5.2.1 guideline, if tx mode change
> + * from legacy->tsn or tsn->legacy, then reset adapter is needed.
> */
> if (netif_running(adapter->netdev) &&
> - (igc_is_device_id_i225(hw) || !adapter->qbv_count)) {
> + (igc_is_device_id_i225(hw) || igc_is_device_id_i226(hw)) &&
> + igc_tsn_will_tx_mode_change(adapter)) {
> schedule_work(&adapter->reset_task);
> return 0;
> }
> --
> 2.25.1
>
>
next prev parent reply other threads:[~2024-07-03 15:03 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-02 4:09 [Intel-wired-lan] [PATCH iwl-net v1 0/4] igc bug fixes related to qbv_count usage Faizal Rahim
2024-07-02 4:09 ` Faizal Rahim
2024-07-02 4:09 ` [Intel-wired-lan] [PATCH iwl-net v1 1/4] igc: Fix qbv_config_change_errors logics Faizal Rahim
2024-07-02 4:09 ` Faizal Rahim
2024-07-02 4:16 ` [Intel-wired-lan] " kernel test robot
2024-07-03 15:08 ` Simon Horman
2024-07-03 15:08 ` Simon Horman
2024-07-05 16:58 ` [Intel-wired-lan] " Abdul Rahim, Faizal
2024-07-05 16:58 ` Abdul Rahim, Faizal
2024-07-02 4:09 ` [Intel-wired-lan] [PATCH iwl-net v1 2/4] igc: Fix reset adapter logics when tx mode change Faizal Rahim
2024-07-02 4:09 ` Faizal Rahim
2024-07-03 15:03 ` Simon Horman [this message]
2024-07-03 15:03 ` Simon Horman
2024-07-05 16:52 ` [Intel-wired-lan] " Abdul Rahim, Faizal
2024-07-05 16:52 ` Abdul Rahim, Faizal
2024-07-02 4:09 ` [Intel-wired-lan] [PATCH iwl-net v1 3/4] igc: Remove unused qbv_count Faizal Rahim
2024-07-02 4:09 ` Faizal Rahim
2024-07-03 15:10 ` [Intel-wired-lan] " Simon Horman
2024-07-03 15:10 ` Simon Horman
2024-07-05 16:47 ` [Intel-wired-lan] " Abdul Rahim, Faizal
2024-07-05 16:47 ` Abdul Rahim, Faizal
2024-07-02 4:09 ` [Intel-wired-lan] [PATCH iwl-net v1 4/4] igc: Fix qbv tx latency by setting gtxoffset Faizal Rahim
2024-07-02 4:09 ` Faizal Rahim
2024-07-03 15:10 ` [Intel-wired-lan] " Simon Horman
2024-07-03 15:10 ` Simon Horman
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=20240703150318.GN598357@kernel.org \
--to=horms@kernel.org \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=faizal.abdul.rahim@linux.intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=stable@vger.kernel.org \
--cc=vinicius.gomes@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.