2022-10-12 08:51:29

by Cai Huoqing

[permalink] [raw]
Subject: [PATCH] net: hinic: Update the range of MTU from 256 to 9600

From: caihuoqing <[email protected]>

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 <[email protected]>
---
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;
--
2.25.1


2022-10-12 10:06:36

by shaozhengchao

[permalink] [raw]
Subject: Re: [PATCH] net: hinic: Update the range of MTU from 256 to 9600



On 2022/10/12 16:29, Cai Huoqing wrote:
> From: caihuoqing <[email protected]>
>
> 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 <[email protected]>
> ---
> 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

2022-10-12 10:46:53

by Cai Huoqing

[permalink] [raw]
Subject: Re: [PATCH] net: hinic: Update the range of MTU from 256 to 9600

On 12 10月 22 17:25:21, shaozhengchao wrote:
>
>
> On 2022/10/12 16:29, Cai Huoqing wrote:
> > From: caihuoqing <[email protected]>
> >
> > 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 <[email protected]>
> > ---
> > 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

2022-10-12 16:13:16

by Jakub Kicinski

[permalink] [raw]
Subject: Re: [PATCH] net: hinic: Update the range of MTU from 256 to 9600

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.

2022-10-13 06:24:57

by Cai Huoqing

[permalink] [raw]
Subject: Re: [PATCH] net: hinic: Update the range of MTU from 256 to 9600

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/[email protected]/

Thanks,
> backported to stable releases.