diff mbox series

net: hinic: Update the range of MTU from 256 to 9600

Message ID 20221012082945.10353-1-cai.huoqing@linux.dev (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series net: hinic: Update the range of MTU from 256 to 9600 | expand

Checks

Context Check Description
netdev/tree_selection success Guessed tree name to be net-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/subject_prefix warning Target tree name not specified in the subject
netdev/cover_letter success Single patches do not need cover letters
netdev/patch_count success Link
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 16 this patch: 16
netdev/cc_maintainers success CCed 7 of 7 maintainers
netdev/build_clang success Errors and warnings before: 2 this patch: 2
netdev/module_param success Was 0 now: 0
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 14 this patch: 14
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 52 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Cai Huoqing Oct. 12, 2022, 8:29 a.m. UTC
From: caihuoqing <caihuoqing@baidu.com>

Hinic hardware only support MTU from 256 to 9600, so set
the max_mtu and min_mtu.

And not need to add the validity judgment when set mtu,
because the judgment is made in net/core: dev_validate_mtu

Signed-off-by: caihuoqing <caihuoqing@baidu.com>
---
 drivers/net/ethernet/huawei/hinic/hinic_dev.h  |  3 +++
 drivers/net/ethernet/huawei/hinic/hinic_main.c |  3 ++-
 drivers/net/ethernet/huawei/hinic/hinic_port.c | 17 +----------------
 3 files changed, 6 insertions(+), 17 deletions(-)

Comments

shaozhengchao Oct. 12, 2022, 9:25 a.m. UTC | #1
On 2022/10/12 16:29, Cai Huoqing wrote:
> From: caihuoqing <caihuoqing@baidu.com>
> 
> Hinic hardware only support MTU from 256 to 9600, so set
> the max_mtu and min_mtu.
> 
> And not need to add the validity judgment when set mtu,
> because the judgment is made in net/core: dev_validate_mtu
> 
> Signed-off-by: caihuoqing <caihuoqing@baidu.com>
> ---
>   drivers/net/ethernet/huawei/hinic/hinic_dev.h  |  3 +++
>   drivers/net/ethernet/huawei/hinic/hinic_main.c |  3 ++-
>   drivers/net/ethernet/huawei/hinic/hinic_port.c | 17 +----------------
>   3 files changed, 6 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/net/ethernet/huawei/hinic/hinic_dev.h b/drivers/net/ethernet/huawei/hinic/hinic_dev.h
> index a4fbf44f944c..2bbc94c0a9c1 100644
> --- a/drivers/net/ethernet/huawei/hinic/hinic_dev.h
> +++ b/drivers/net/ethernet/huawei/hinic/hinic_dev.h
> @@ -22,6 +22,9 @@
>   
>   #define LP_PKT_CNT		64
>   
> +#define HINIC_MAX_MTU_SIZE		9600
> +#define HINIC_MIN_MTU_SIZE		256
> +
>   enum hinic_flags {
>   	HINIC_LINK_UP = BIT(0),
>   	HINIC_INTF_UP = BIT(1),
> diff --git a/drivers/net/ethernet/huawei/hinic/hinic_main.c b/drivers/net/ethernet/huawei/hinic/hinic_main.c
> index c23ee2ddbce3..41e52f775aae 100644
> --- a/drivers/net/ethernet/huawei/hinic/hinic_main.c
> +++ b/drivers/net/ethernet/huawei/hinic/hinic_main.c
> @@ -1189,7 +1189,8 @@ static int nic_dev_init(struct pci_dev *pdev)
>   	else
>   		netdev->netdev_ops = &hinicvf_netdev_ops;
>   
> -	netdev->max_mtu = ETH_MAX_MTU;
> +	netdev->max_mtu = HINIC_MAX_MTU_SIZE;
> +	netdev->min_mtu = HINIC_MIN_MTU_SIZE;
>   
>   	nic_dev = netdev_priv(netdev);
>   	nic_dev->netdev = netdev;
> diff --git a/drivers/net/ethernet/huawei/hinic/hinic_port.c b/drivers/net/ethernet/huawei/hinic/hinic_port.c
> index 28ae6f1201a8..0a39c3dffa9a 100644
> --- a/drivers/net/ethernet/huawei/hinic/hinic_port.c
> +++ b/drivers/net/ethernet/huawei/hinic/hinic_port.c
> @@ -17,9 +17,6 @@
>   #include "hinic_port.h"
>   #include "hinic_dev.h"
>   
> -#define HINIC_MIN_MTU_SIZE              256
> -#define HINIC_MAX_JUMBO_FRAME_SIZE      15872
> -
>   enum mac_op {
>   	MAC_DEL,
>   	MAC_SET,
> @@ -147,24 +144,12 @@ int hinic_port_get_mac(struct hinic_dev *nic_dev, u8 *addr)
>    **/
>   int hinic_port_set_mtu(struct hinic_dev *nic_dev, int new_mtu)
>   {
> -	struct net_device *netdev = nic_dev->netdev;
>   	struct hinic_hwdev *hwdev = nic_dev->hwdev;
>   	struct hinic_port_mtu_cmd port_mtu_cmd;
>   	struct hinic_hwif *hwif = hwdev->hwif;
>   	u16 out_size = sizeof(port_mtu_cmd);
>   	struct pci_dev *pdev = hwif->pdev;
> -	int err, max_frame;
> -
> -	if (new_mtu < HINIC_MIN_MTU_SIZE) {
> -		netif_err(nic_dev, drv, netdev, "mtu < MIN MTU size");
> -		return -EINVAL;
> -	}
> -
> -	max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
> -	if (max_frame > HINIC_MAX_JUMBO_FRAME_SIZE) {
> -		netif_err(nic_dev, drv, netdev, "mtu > MAX MTU size");
> -		return -EINVAL;
> -	}
> +	int err;
>   
>   	port_mtu_cmd.func_idx = HINIC_HWIF_FUNC_IDX(hwif);
>   	port_mtu_cmd.mtu = new_mtu;

Hi Cai:
	You cannot change the maximum supported jumbo frame size.
Because as far as I know, this is not compatible with the older
firmware version. If you change the maximum MTU, the maximum length
of packets received by the port will be affected with older fw. So
donot change it.

Zhengchao Shao
Cai Huoqing Oct. 12, 2022, 10:32 a.m. UTC | #2
On 12 10月 22 17:25:21, shaozhengchao wrote:
> 
> 
> On 2022/10/12 16:29, Cai Huoqing wrote:
> > From: caihuoqing <caihuoqing@baidu.com>
> > 
> > Hinic hardware only support MTU from 256 to 9600, so set
> > the max_mtu and min_mtu.
> > 
> > And not need to add the validity judgment when set mtu,
> > because the judgment is made in net/core: dev_validate_mtu
> > 
> > Signed-off-by: caihuoqing <caihuoqing@baidu.com>
> > ---
> >   drivers/net/ethernet/huawei/hinic/hinic_dev.h  |  3 +++
> >   drivers/net/ethernet/huawei/hinic/hinic_main.c |  3 ++-
> >   drivers/net/ethernet/huawei/hinic/hinic_port.c | 17 +----------------
> >   3 files changed, 6 insertions(+), 17 deletions(-)
> > 
> > diff --git a/drivers/net/ethernet/huawei/hinic/hinic_dev.h b/drivers/net/ethernet/huawei/hinic/hinic_dev.h
> > index a4fbf44f944c..2bbc94c0a9c1 100644
> > --- a/drivers/net/ethernet/huawei/hinic/hinic_dev.h
> > +++ b/drivers/net/ethernet/huawei/hinic/hinic_dev.h
> > @@ -22,6 +22,9 @@
> >   #define LP_PKT_CNT		64
> > +#define HINIC_MAX_MTU_SIZE		9600
Hi Shao, thanks for your reply.

I will change it in patch v2, like
"#define HINIC_MAX_MTU_SIZE (HINIC_MAX_JUMBO_FRAME_SIZE - ETH_HLEN - ETH_FCS_LEN)"
to compatible the old firmware (maybe some old cards).
> > +#define HINIC_MIN_MTU_SIZE		256
> > +
> >   enum hinic_flags {
> >   	HINIC_LINK_UP = BIT(0),
> >   	HINIC_INTF_UP = BIT(1),
> > diff --git a/drivers/net/ethernet/huawei/hinic/hinic_main.c b/drivers/net/ethernet/huawei/hinic/hinic_main.c
> > index c23ee2ddbce3..41e52f775aae 100644
> > --- a/drivers/net/ethernet/huawei/hinic/hinic_main.c
> > +++ b/drivers/net/ethernet/huawei/hinic/hinic_main.c
> > @@ -1189,7 +1189,8 @@ static int nic_dev_init(struct pci_dev *pdev)
> >   	else
> >   		netdev->netdev_ops = &hinicvf_netdev_ops;
> > -	netdev->max_mtu = ETH_MAX_MTU;
> > +	netdev->max_mtu = HINIC_MAX_MTU_SIZE;
> > +	netdev->min_mtu = HINIC_MIN_MTU_SIZE;
> >   	nic_dev = netdev_priv(netdev);
> >   	nic_dev->netdev = netdev;
> > diff --git a/drivers/net/ethernet/huawei/hinic/hinic_port.c b/drivers/net/ethernet/huawei/hinic/hinic_port.c
> > index 28ae6f1201a8..0a39c3dffa9a 100644
> > --- a/drivers/net/ethernet/huawei/hinic/hinic_port.c
> > +++ b/drivers/net/ethernet/huawei/hinic/hinic_port.c
> > @@ -17,9 +17,6 @@
> >   #include "hinic_port.h"
> >   #include "hinic_dev.h"
> > -#define HINIC_MIN_MTU_SIZE              256
> > -#define HINIC_MAX_JUMBO_FRAME_SIZE      15872
> > -
> >   enum mac_op {
> >   	MAC_DEL,
> >   	MAC_SET,
> > @@ -147,24 +144,12 @@ int hinic_port_get_mac(struct hinic_dev *nic_dev, u8 *addr)
> >    **/
> >   int hinic_port_set_mtu(struct hinic_dev *nic_dev, int new_mtu)
> >   {
> > -	struct net_device *netdev = nic_dev->netdev;
> >   	struct hinic_hwdev *hwdev = nic_dev->hwdev;
> >   	struct hinic_port_mtu_cmd port_mtu_cmd;
> >   	struct hinic_hwif *hwif = hwdev->hwif;
> >   	u16 out_size = sizeof(port_mtu_cmd);
> >   	struct pci_dev *pdev = hwif->pdev;
> > -	int err, max_frame;
> > -
> > -	if (new_mtu < HINIC_MIN_MTU_SIZE) {
> > -		netif_err(nic_dev, drv, netdev, "mtu < MIN MTU size");
> > -		return -EINVAL;
> > -	}
> > -
> > -	max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
> > -	if (max_frame > HINIC_MAX_JUMBO_FRAME_SIZE) {
> > -		netif_err(nic_dev, drv, netdev, "mtu > MAX MTU size");
> > -		return -EINVAL;
> > -	}
> > +	int err;
> >   	port_mtu_cmd.func_idx = HINIC_HWIF_FUNC_IDX(hwif);
> >   	port_mtu_cmd.mtu = new_mtu;
> 
> Hi Cai:
> 	You cannot change the maximum supported jumbo frame size.
> Because as far as I know, this is not compatible with the older
> firmware version. If you change the maximum MTU, the maximum length
> of packets received by the port will be affected with older fw. So
> donot change it.
> 
> Zhengchao Shao
Jakub Kicinski Oct. 12, 2022, 3:49 p.m. UTC | #3
On Wed, 12 Oct 2022 16:29:40 +0800 Cai Huoqing wrote:
> Hinic hardware only support MTU from 256 to 9600, so set
> the max_mtu and min_mtu.

Sounds like a bug fix so please add a Fixes tag so that the patch gets
backported to stable releases.
Cai Huoqing Oct. 13, 2022, 6:14 a.m. UTC | #4
On 12 10月 22 08:49:09, Jakub Kicinski wrote:
> On Wed, 12 Oct 2022 16:29:40 +0800 Cai Huoqing wrote:
> > Hinic hardware only support MTU from 256 to 9600, so set
> > the max_mtu and min_mtu.
> 
> Sounds like a bug fix so please add a Fixes tag so that the patch gets
Hi Jakub,
    Not a bug fix, after v2 reverse the value of max_mtu for Shao's comments,
this patch just simplify the code.
v2 patch here:
https://lore.kernel.org/lkml/20221013060723.7306-1-cai.huoqing@linux.dev/

Thanks,
> backported to stable releases.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/huawei/hinic/hinic_dev.h b/drivers/net/ethernet/huawei/hinic/hinic_dev.h
index a4fbf44f944c..2bbc94c0a9c1 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_dev.h
+++ b/drivers/net/ethernet/huawei/hinic/hinic_dev.h
@@ -22,6 +22,9 @@ 
 
 #define LP_PKT_CNT		64
 
+#define HINIC_MAX_MTU_SIZE		9600
+#define HINIC_MIN_MTU_SIZE		256
+
 enum hinic_flags {
 	HINIC_LINK_UP = BIT(0),
 	HINIC_INTF_UP = BIT(1),
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_main.c b/drivers/net/ethernet/huawei/hinic/hinic_main.c
index c23ee2ddbce3..41e52f775aae 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_main.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_main.c
@@ -1189,7 +1189,8 @@  static int nic_dev_init(struct pci_dev *pdev)
 	else
 		netdev->netdev_ops = &hinicvf_netdev_ops;
 
-	netdev->max_mtu = ETH_MAX_MTU;
+	netdev->max_mtu = HINIC_MAX_MTU_SIZE;
+	netdev->min_mtu = HINIC_MIN_MTU_SIZE;
 
 	nic_dev = netdev_priv(netdev);
 	nic_dev->netdev = netdev;
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_port.c b/drivers/net/ethernet/huawei/hinic/hinic_port.c
index 28ae6f1201a8..0a39c3dffa9a 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_port.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_port.c
@@ -17,9 +17,6 @@ 
 #include "hinic_port.h"
 #include "hinic_dev.h"
 
-#define HINIC_MIN_MTU_SIZE              256
-#define HINIC_MAX_JUMBO_FRAME_SIZE      15872
-
 enum mac_op {
 	MAC_DEL,
 	MAC_SET,
@@ -147,24 +144,12 @@  int hinic_port_get_mac(struct hinic_dev *nic_dev, u8 *addr)
  **/
 int hinic_port_set_mtu(struct hinic_dev *nic_dev, int new_mtu)
 {
-	struct net_device *netdev = nic_dev->netdev;
 	struct hinic_hwdev *hwdev = nic_dev->hwdev;
 	struct hinic_port_mtu_cmd port_mtu_cmd;
 	struct hinic_hwif *hwif = hwdev->hwif;
 	u16 out_size = sizeof(port_mtu_cmd);
 	struct pci_dev *pdev = hwif->pdev;
-	int err, max_frame;
-
-	if (new_mtu < HINIC_MIN_MTU_SIZE) {
-		netif_err(nic_dev, drv, netdev, "mtu < MIN MTU size");
-		return -EINVAL;
-	}
-
-	max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
-	if (max_frame > HINIC_MAX_JUMBO_FRAME_SIZE) {
-		netif_err(nic_dev, drv, netdev, "mtu > MAX MTU size");
-		return -EINVAL;
-	}
+	int err;
 
 	port_mtu_cmd.func_idx = HINIC_HWIF_FUNC_IDX(hwif);
 	port_mtu_cmd.mtu = new_mtu;