All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Poirier <benjamin.poirier@gmail.com>
To: Coiby Xu <coiby.xu@gmail.com>
Cc: linux-staging@lists.linux.dev, netdev@vger.kernel.org,
	Shung-Hsi Yu <shung-hsi.yu@suse.com>,
	Manish Chopra <manishc@marvell.com>,
	"supporter:QLOGIC QLGE 10Gb ETHERNET DRIVER"
	<GR-Linux-NIC-Dev@marvell.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [RFC 06/19] staging: qlge: disable flow control by default
Date: Tue, 22 Jun 2021 16:49:51 +0900	[thread overview]
Message-ID: <YNGWHxYF5UkPk2U5@d3> (raw)
In-Reply-To: <20210621134902.83587-7-coiby.xu@gmail.com>

On 2021-06-21 21:48 +0800, Coiby Xu wrote:
> According to the TODO item,
> > * the flow control implementation in firmware is buggy (sends a flood of pause
> >   frames, resets the link, device and driver buffer queues become
> >   desynchronized), disable it by default
> 
> Currently, qlge_mpi_port_cfg_work calls qlge_mb_get_port_cfg which gets
> the link config from the firmware and saves it to qdev->link_config. By
> default, flow control is enabled. This commit writes the
> save the pause parameter of qdev->link_config and don't let it
> overwritten by link settings of current port. Since qdev->link_config=0
> when qdev is initialized, this could disable flow control by default and
> the pause parameter value could also survive MPI resetting,
>     $ ethtool -a enp94s0f0
>     Pause parameters for enp94s0f0:
>     Autonegotiate:  off
>     RX:             off
>     TX:             off
> 
> The follow control can be enabled manually,
> 
>     $ ethtool -A enp94s0f0 rx on tx on
>     $ ethtool -a enp94s0f0
>     Pause parameters for enp94s0f0:
>     Autonegotiate:  off
>     RX:             on
>     TX:             on
> 
> Signed-off-by: Coiby Xu <coiby.xu@gmail.com>
> ---
>  drivers/staging/qlge/TODO       |  3 ---
>  drivers/staging/qlge/qlge_mpi.c | 11 ++++++++++-
>  2 files changed, 10 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/staging/qlge/TODO b/drivers/staging/qlge/TODO
> index b7a60425fcd2..8c84160b5993 100644
> --- a/drivers/staging/qlge/TODO
> +++ b/drivers/staging/qlge/TODO
> @@ -4,9 +4,6 @@
>    ql_build_rx_skb(). That function is now used exclusively to handle packets
>    that underwent header splitting but it still contains code to handle non
>    split cases.
> -* the flow control implementation in firmware is buggy (sends a flood of pause
> -  frames, resets the link, device and driver buffer queues become
> -  desynchronized), disable it by default
>  * some structures are initialized redundantly (ex. memset 0 after
>    alloc_etherdev())
>  * the driver has a habit of using runtime checks where compile time checks are
> diff --git a/drivers/staging/qlge/qlge_mpi.c b/drivers/staging/qlge/qlge_mpi.c
> index 2630ebf50341..0f1c7da80413 100644
> --- a/drivers/staging/qlge/qlge_mpi.c
> +++ b/drivers/staging/qlge/qlge_mpi.c
> @@ -806,6 +806,7 @@ int qlge_mb_get_port_cfg(struct qlge_adapter *qdev)
>  {
>  	struct mbox_params mbc;
>  	struct mbox_params *mbcp = &mbc;
> +	u32 saved_pause_link_config = 0;

Initialization is not needed given the code below, in fact the
declaration can be moved to the block below.

>  	int status = 0;
>  
>  	memset(mbcp, 0, sizeof(struct mbox_params));
> @@ -826,7 +827,15 @@ int qlge_mb_get_port_cfg(struct qlge_adapter *qdev)
>  	} else	{
>  		netif_printk(qdev, drv, KERN_DEBUG, qdev->ndev,
>  			     "Passed Get Port Configuration.\n");
> -		qdev->link_config = mbcp->mbox_out[1];
> +		/*
> +		 * Don't let the pause parameter be overwritten by
> +		 *
> +		 * In this way, follow control can be disabled by default
> +		 * and the setting could also survive the MPI reset
> +		 */

It seems this comment is incomplete. Also, it's "flow control", not
"follow control".

> +		saved_pause_link_config = qdev->link_config & CFG_PAUSE_STD;
> +		qdev->link_config = ~CFG_PAUSE_STD & mbcp->mbox_out[1];
> +		qdev->link_config |= saved_pause_link_config;
>  		qdev->max_frame_size = mbcp->mbox_out[2];
>  	}
>  	return status;
> -- 
> 2.32.0
> 

  reply	other threads:[~2021-06-22  7:49 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-21 13:48 [RFC 00/19] Improve the qlge driver based on drivers/staging/qlge/TODO Coiby Xu
2021-06-21 13:48 ` [RFC 01/19] staging: qlge: fix incorrect truesize accounting Coiby Xu
2021-06-21 14:10   ` Dan Carpenter
2021-06-21 14:10     ` Dan Carpenter
2021-06-22 11:36     ` Coiby Xu
2021-06-22 11:36       ` Coiby Xu
2021-06-23  4:55       ` Benjamin Poirier
2021-06-23  4:55         ` Benjamin Poirier
2021-06-24 11:47         ` Coiby Xu
2021-06-24 11:47           ` Coiby Xu
2021-06-28  0:14           ` Coiby Xu
2021-06-28  0:14             ` Coiby Xu
2021-06-21 13:48 ` [RFC 02/19] staging: qlge: change LARGE_BUFFER_MAX_SIZE to 4096 Coiby Xu
2021-06-21 13:48 ` [RFC 03/19] staging: qlge: alloc skb with only enough room for header when data is put in the fragments Coiby Xu
2021-06-21 13:48 ` [RFC 04/19] staging: qlge: add qlge_* prefix to avoid namespace clashes Coiby Xu
2021-06-22  7:55   ` Benjamin Poirier
2021-06-22  7:55     ` Benjamin Poirier
2021-06-24 11:34     ` Coiby Xu
2021-06-24 11:34       ` Coiby Xu
2021-06-21 13:48 ` [RFC 05/19] staging: qlge: rename rx to completion queue and seperate rx_ring from completion queue Coiby Xu
2021-06-21 13:48 ` [RFC 06/19] staging: qlge: disable flow control by default Coiby Xu
2021-06-22  7:49   ` Benjamin Poirier [this message]
2021-06-22  7:49     ` Benjamin Poirier
2021-06-24 11:33     ` Coiby Xu
2021-06-24 11:33       ` Coiby Xu
2021-06-21 13:48 ` [RFC 07/19] staging: qlge: remove the TODO item of unnecessary memset 0 Coiby Xu
2021-06-21 13:48 ` [RFC 08/19] staging: qlge: reorder members of qlge_adapter for optimization Coiby Xu
2021-06-21 13:48 ` [RFC 09/19] staging: qlge: remove the TODO item of reorder struct Coiby Xu
2021-06-21 13:48 ` [RFC 10/19] staging: qlge: remove the TODO item of avoid legacy/deprecated apis Coiby Xu
2021-06-21 13:48 ` [RFC 11/19] staging: qlge: the number of pages to contain a buffer queue is constant Coiby Xu
2021-06-21 13:48 ` [RFC 12/19] staging: qlge: rewrite do while loops as for loops in qlge_start_rx_ring Coiby Xu
2021-06-22  7:45   ` Benjamin Poirier
2021-06-22  7:45     ` Benjamin Poirier
2021-06-24 11:56     ` Coiby Xu
2021-06-24 11:56       ` Coiby Xu
2021-06-21 13:48 ` [RFC 13/19] staging: qlge: rewrite do while loop as for loop in qlge_sem_spinlock Coiby Xu
2021-06-22  7:20   ` Dan Carpenter
2021-06-22  7:20     ` Dan Carpenter
2021-06-24 11:22     ` Coiby Xu
2021-06-24 11:22       ` Coiby Xu
2021-06-30 10:58       ` Joe Perches
2021-06-30 10:58         ` Joe Perches
2021-06-30 23:33         ` Coiby Xu
2021-06-30 23:33           ` Coiby Xu
2021-07-01  4:35           ` Joe Perches
2021-07-01  4:35             ` Joe Perches
2021-07-02 23:56             ` Coiby Xu
2021-07-02 23:56               ` Coiby Xu
2021-06-21 13:48 ` [RFC 14/19] staging: qlge: rewrite do while loop as for loop in qlge_refill_bq Coiby Xu
2021-06-21 13:48 ` [RFC 15/19] staging: qlge: remove the TODO item about rewriting while loops as simple for loops Coiby Xu
2021-06-21 13:48 ` [RFC 16/19] staging: qlge: remove deadcode in qlge_build_rx_skb Coiby Xu
2021-06-22  7:29   ` Dan Carpenter
2021-06-22  7:29     ` Dan Carpenter
2021-06-24 11:25     ` Coiby Xu
2021-06-24 11:25       ` Coiby Xu
2021-06-24 12:49       ` Dan Carpenter
2021-06-24 12:49         ` Dan Carpenter
2021-06-27 10:53         ` Coiby Xu
2021-06-27 10:53           ` Coiby Xu
2021-06-28  6:46           ` Dan Carpenter
2021-06-28  6:46             ` Dan Carpenter
2021-06-29 13:35             ` Coiby Xu
2021-06-29 13:35               ` Coiby Xu
2021-06-29 14:22               ` Dan Carpenter
2021-06-29 14:22                 ` Dan Carpenter
2021-06-30 23:19                 ` Coiby Xu
2021-06-30 23:19                   ` Coiby Xu
2021-06-21 13:49 ` [RFC 17/19] staging: qlge: fix weird line wrapping Coiby Xu
2021-06-22  8:46   ` Dan Carpenter
2021-06-22  8:46     ` Dan Carpenter
2021-06-24 11:55     ` Coiby Xu
2021-06-24 11:55       ` Coiby Xu
2021-06-21 13:49 ` [RFC 18/19] staging: qlge: fix two indentation issues Coiby Xu
2021-06-21 13:49 ` [RFC 19/19] staging: qlge: remove TODO item of unnecessary runtime checks Coiby Xu

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=YNGWHxYF5UkPk2U5@d3 \
    --to=benjamin.poirier@gmail.com \
    --cc=GR-Linux-NIC-Dev@marvell.com \
    --cc=coiby.xu@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-staging@lists.linux.dev \
    --cc=manishc@marvell.com \
    --cc=netdev@vger.kernel.org \
    --cc=shung-hsi.yu@suse.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.