linux-s390.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V2 net-next 0/6] ethtool: add support to set/get tx copybreak buf size and rx buf len
@ 2021-09-24 14:29 Guangbin Huang
  2021-09-24 14:29 ` [PATCH V2 net-next 1/6] ethtool: add support to set/get tx copybreak buf size via ethtool Guangbin Huang
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Guangbin Huang @ 2021-09-24 14:29 UTC (permalink / raw)
  To: davem, kuba, mkubecek, andrew, amitc, idosch, danieller,
	jesse.brandeburg, anthony.l.nguyen, jdike, richard, anton.ivanov,
	netanel, akiyano, gtzalik, saeedb, chris.snook, ulli.kroll,
	linus.walleij, jeroendb, csully, awogbemila, jdmason,
	rain.1986.08.12, zyjzyj2000, kys, haiyangz, mst, jasowang,
	doshir, pv-drivers, jwi, kgraul, hca, gor, johannes
  Cc: netdev, lipeng321, chenhao288, huangguangbin2, linux-s390

This series add support to set/get tx copybreak buf size and rx buf len via
ethtool and hns3 driver implements them.

Tx copybreak buf size is used for tx copybreak feature which for small size
packet or frag. Use ethtool --get-tunable command to get it, and ethtool
--set-tunable command to set it, examples are as follow:

1. set tx spare buf size to 102400:
$ ethtool --set-tunable eth1 tx-buf-size 102400

2. get tx spare buf size:
$ ethtool --get-tunable eth1 tx-buf-size
tx-buf-size: 102400

Rx buf len is buffer length of each rx BD. Use ethtool -g command to get
it, and ethtool -G command to set it, examples are as follow:

1. set rx buf len to 4096
$ ethtool -G eth1 rx-buf-len 4096

2. get rx buf len
$ ethtool -g eth1
...
RX Buf Len:     4096


Change log:
V1 -> V2
1.Add documentation for rx buf len and tx copybreak buf size.
2.Extend structure ringparam_ext for extenal ring params.
3.Change type of ETHTOOL_A_RINGS_RX_BUF_LEN from NLA_U32 to
  NLA_POLICY_MIN(NLA_U32, 1).
4.Add supported_ring_params in ethtool_ops to indicate if support external
  params.



Hao Chen (6):
  ethtool: add support to set/get tx copybreak buf size via ethtool
  net: hns3: add support to set/get tx copybreak buf size via ethtool
    for hns3 driver
  ethtool: add support to set/get rx buf len via ethtool
  ethtool: extend ringparam setting uAPI with rx_buf_len
  net: hns3: add support to set/get rx buf len via ethtool for hns3
    driver
  net: hns3: remove the way to set tx spare buf via module parameter

 Documentation/networking/ethtool-netlink.rst  |  26 ++++
 arch/um/drivers/vector_kern.c                 |   4 +-
 drivers/net/can/c_can/c_can_ethtool.c         |   4 +-
 drivers/net/ethernet/3com/typhoon.c           |   4 +-
 drivers/net/ethernet/amazon/ena/ena_ethtool.c |   8 +-
 drivers/net/ethernet/amd/pcnet32.c            |   8 +-
 drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c  |   8 +-
 .../ethernet/aquantia/atlantic/aq_ethtool.c   |   8 +-
 drivers/net/ethernet/atheros/atlx/atl1.c      |   8 +-
 drivers/net/ethernet/broadcom/b44.c           |   8 +-
 drivers/net/ethernet/broadcom/bcm63xx_enet.c  |  16 ++-
 drivers/net/ethernet/broadcom/bnx2.c          |   8 +-
 .../ethernet/broadcom/bnx2x/bnx2x_ethtool.c   |   8 +-
 .../net/ethernet/broadcom/bnxt/bnxt_ethtool.c |   8 +-
 drivers/net/ethernet/broadcom/tg3.c           |  10 +-
 .../net/ethernet/brocade/bna/bnad_ethtool.c   |   8 +-
 drivers/net/ethernet/cadence/macb_main.c      |   8 +-
 .../ethernet/cavium/liquidio/lio_ethtool.c    |   8 +-
 .../ethernet/cavium/thunder/nicvf_ethtool.c   |   8 +-
 drivers/net/ethernet/chelsio/cxgb/cxgb2.c     |   8 +-
 .../net/ethernet/chelsio/cxgb3/cxgb3_main.c   |   8 +-
 .../ethernet/chelsio/cxgb4/cxgb4_ethtool.c    |   8 +-
 .../ethernet/chelsio/cxgb4vf/cxgb4vf_main.c   |   8 +-
 .../net/ethernet/cisco/enic/enic_ethtool.c    |   8 +-
 drivers/net/ethernet/cortina/gemini.c         |   8 +-
 .../net/ethernet/emulex/benet/be_ethtool.c    |   4 +-
 drivers/net/ethernet/ethoc.c                  |   8 +-
 drivers/net/ethernet/faraday/ftgmac100.c      |   8 +-
 .../ethernet/freescale/enetc/enetc_ethtool.c  |   4 +-
 .../net/ethernet/freescale/gianfar_ethtool.c  |   8 +-
 .../net/ethernet/freescale/ucc_geth_ethtool.c |   8 +-
 drivers/net/ethernet/google/gve/gve_ethtool.c |   4 +-
 .../net/ethernet/hisilicon/hns/hns_ethtool.c  |   6 +-
 .../net/ethernet/hisilicon/hns3/hns3_enet.c   |  11 +-
 .../net/ethernet/hisilicon/hns3/hns3_enet.h   |   2 +
 .../ethernet/hisilicon/hns3/hns3_ethtool.c    | 116 ++++++++++++++++--
 .../net/ethernet/huawei/hinic/hinic_ethtool.c |   8 +-
 drivers/net/ethernet/ibm/emac/core.c          |   4 +-
 drivers/net/ethernet/ibm/ibmvnic.c            |   8 +-
 drivers/net/ethernet/intel/e100.c             |   8 +-
 .../net/ethernet/intel/e1000/e1000_ethtool.c  |   8 +-
 drivers/net/ethernet/intel/e1000e/ethtool.c   |   8 +-
 .../net/ethernet/intel/fm10k/fm10k_ethtool.c  |   8 +-
 .../net/ethernet/intel/i40e/i40e_ethtool.c    |   8 +-
 .../net/ethernet/intel/iavf/iavf_ethtool.c    |  12 +-
 drivers/net/ethernet/intel/ice/ice_ethtool.c  |   8 +-
 drivers/net/ethernet/intel/igb/igb_ethtool.c  |   8 +-
 drivers/net/ethernet/intel/igbvf/ethtool.c    |   8 +-
 drivers/net/ethernet/intel/igc/igc_ethtool.c  |   8 +-
 .../net/ethernet/intel/ixgb/ixgb_ethtool.c    |   8 +-
 .../net/ethernet/intel/ixgbe/ixgbe_ethtool.c  |   8 +-
 drivers/net/ethernet/intel/ixgbevf/ethtool.c  |   8 +-
 drivers/net/ethernet/marvell/mv643xx_eth.c    |   8 +-
 drivers/net/ethernet/marvell/mvneta.c         |   8 +-
 .../net/ethernet/marvell/mvpp2/mvpp2_main.c   |   8 +-
 .../marvell/octeontx2/nic/otx2_ethtool.c      |   8 +-
 drivers/net/ethernet/marvell/skge.c           |   8 +-
 drivers/net/ethernet/marvell/sky2.c           |   8 +-
 .../net/ethernet/mellanox/mlx4/en_ethtool.c   |   8 +-
 .../ethernet/mellanox/mlx5/core/en_ethtool.c  |   8 +-
 .../net/ethernet/mellanox/mlx5/core/en_rep.c  |   8 +-
 .../mellanox/mlx5/core/ipoib/ethtool.c        |   8 +-
 .../mellanox/mlxbf_gige/mlxbf_gige_ethtool.c  |   4 +-
 drivers/net/ethernet/micrel/ksz884x.c         |   5 +-
 .../net/ethernet/myricom/myri10ge/myri10ge.c  |   4 +-
 drivers/net/ethernet/neterion/s2io.c          |   4 +-
 .../ethernet/netronome/nfp/nfp_net_ethtool.c  |   8 +-
 drivers/net/ethernet/nvidia/forcedeth.c       |  10 +-
 .../oki-semi/pch_gbe/pch_gbe_ethtool.c        |  10 +-
 .../net/ethernet/pasemi/pasemi_mac_ethtool.c  |   4 +-
 .../ethernet/pensando/ionic/ionic_ethtool.c   |   8 +-
 .../qlogic/netxen/netxen_nic_ethtool.c        |   8 +-
 .../net/ethernet/qlogic/qede/qede_ethtool.c   |   8 +-
 .../ethernet/qlogic/qlcnic/qlcnic_ethtool.c   |   8 +-
 .../net/ethernet/qualcomm/emac/emac-ethtool.c |   8 +-
 drivers/net/ethernet/qualcomm/qca_debug.c     |   8 +-
 drivers/net/ethernet/realtek/8139cp.c         |   4 +-
 drivers/net/ethernet/realtek/r8169_main.c     |   4 +-
 drivers/net/ethernet/renesas/ravb_main.c      |   8 +-
 drivers/net/ethernet/renesas/sh_eth.c         |   8 +-
 drivers/net/ethernet/sfc/ef100_ethtool.c      |   4 +-
 drivers/net/ethernet/sfc/ethtool.c            |   8 +-
 drivers/net/ethernet/sfc/falcon/ethtool.c     |   8 +-
 .../ethernet/stmicro/stmmac/stmmac_ethtool.c  |   8 +-
 drivers/net/ethernet/tehuti/tehuti.c          |  10 +-
 drivers/net/ethernet/ti/am65-cpsw-ethtool.c   |   4 +-
 drivers/net/ethernet/ti/cpmac.c               |   8 +-
 drivers/net/ethernet/ti/cpsw_ethtool.c        |   8 +-
 drivers/net/ethernet/ti/cpsw_priv.h           |   8 +-
 .../net/ethernet/toshiba/spider_net_ethtool.c |   4 +-
 drivers/net/ethernet/xilinx/ll_temac_main.c   |  14 ++-
 .../net/ethernet/xilinx/xilinx_axienet_main.c |  14 ++-
 drivers/net/hyperv/netvsc_drv.c               |   8 +-
 drivers/net/netdevsim/ethtool.c               |   8 +-
 drivers/net/usb/r8152.c                       |   8 +-
 drivers/net/virtio_net.c                      |   4 +-
 drivers/net/vmxnet3/vmxnet3_ethtool.c         |   8 +-
 drivers/s390/net/qeth_ethtool.c               |   4 +-
 include/linux/ethtool.h                       |  18 ++-
 include/uapi/linux/ethtool.h                  |   9 ++
 include/uapi/linux/ethtool_netlink.h          |   1 +
 net/ethtool/common.c                          |   1 +
 net/ethtool/ioctl.c                           |  10 +-
 net/ethtool/netlink.h                         |   2 +-
 net/ethtool/rings.c                           |  32 ++++-
 net/mac80211/ethtool.c                        |   8 +-
 106 files changed, 738 insertions(+), 205 deletions(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH V2 net-next 1/6] ethtool: add support to set/get tx copybreak buf size via ethtool
  2021-09-24 14:29 [PATCH V2 net-next 0/6] ethtool: add support to set/get tx copybreak buf size and rx buf len Guangbin Huang
@ 2021-09-24 14:29 ` Guangbin Huang
  2021-09-24 23:05   ` Michal Kubecek
  2021-09-24 14:29 ` [PATCH V2 net-next 2/6] net: hns3: add support to set/get tx copybreak buf size via ethtool for hns3 driver Guangbin Huang
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Guangbin Huang @ 2021-09-24 14:29 UTC (permalink / raw)
  To: davem, kuba, mkubecek, andrew, amitc, idosch, danieller,
	jesse.brandeburg, anthony.l.nguyen, jdike, richard, anton.ivanov,
	netanel, akiyano, gtzalik, saeedb, chris.snook, ulli.kroll,
	linus.walleij, jeroendb, csully, awogbemila, jdmason,
	rain.1986.08.12, zyjzyj2000, kys, haiyangz, mst, jasowang,
	doshir, pv-drivers, jwi, kgraul, hca, gor, johannes
  Cc: netdev, lipeng321, chenhao288, huangguangbin2, linux-s390

From: Hao Chen <chenhao288@hisilicon.com>

Add support for ethtool to set/get tx copybreak buf size.

Signed-off-by: Hao Chen <chenhao288@hisilicon.com>
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
---
 Documentation/networking/ethtool-netlink.rst | 24 ++++++++++++++++++++
 include/uapi/linux/ethtool.h                 |  1 +
 net/ethtool/common.c                         |  1 +
 net/ethtool/ioctl.c                          |  1 +
 4 files changed, 27 insertions(+)

diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst
index d9b55b7a1a4d..a47b0255aaf9 100644
--- a/Documentation/networking/ethtool-netlink.rst
+++ b/Documentation/networking/ethtool-netlink.rst
@@ -1521,6 +1521,30 @@ Kernel response contents:
   ``ETHTOOL_A_PHC_VCLOCKS_INDEX``       s32     PHC index array
   ====================================  ======  ==========================
 
+TUNABLE_SET
+===========
+
+Request contents:
+
+  =====================================  ======  ==========================
+  ``ETHTOOL_TX_COPYBREAK_BUF_SIZE``      u32     buf size for tx copybreak
+  =====================================  ======  ==========================
+
+Tx copybreak buf size is used for tx copybreak feature, the feature is used
+for small size packet or frag. It adds a queue based tx shared bounce buffer
+to memcpy the small packet when the len of xmitted skb is below tx_copybreak
+(value to distinguish small size and normal size), and reduce the overhead
+of dma map and unmap when IOMMU is on.
+
+TUNABLE_GET
+===========
+
+Kernel response contents:
+
+  ====================================  ======  ==========================
+  ``ETHTOOL_TX_COPYBREAK_BUF_SIZE``     u32     buf size for tx copybreak
+  ====================================  ======  ==========================
+
 Request translation
 ===================
 
diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
index b6db6590baf0..266e95e4fb33 100644
--- a/include/uapi/linux/ethtool.h
+++ b/include/uapi/linux/ethtool.h
@@ -231,6 +231,7 @@ enum tunable_id {
 	ETHTOOL_RX_COPYBREAK,
 	ETHTOOL_TX_COPYBREAK,
 	ETHTOOL_PFC_PREVENTION_TOUT, /* timeout in msecs */
+	ETHTOOL_TX_COPYBREAK_BUF_SIZE,
 	/*
 	 * Add your fresh new tunable attribute above and remember to update
 	 * tunable_strings[] in net/ethtool/common.c
diff --git a/net/ethtool/common.c b/net/ethtool/common.c
index c63e0739dc6a..0c5210015911 100644
--- a/net/ethtool/common.c
+++ b/net/ethtool/common.c
@@ -89,6 +89,7 @@ tunable_strings[__ETHTOOL_TUNABLE_COUNT][ETH_GSTRING_LEN] = {
 	[ETHTOOL_RX_COPYBREAK]	= "rx-copybreak",
 	[ETHTOOL_TX_COPYBREAK]	= "tx-copybreak",
 	[ETHTOOL_PFC_PREVENTION_TOUT] = "pfc-prevention-tout",
+	[ETHTOOL_TX_COPYBREAK_BUF_SIZE] = "tx-copybreak-buf-size",
 };
 
 const char
diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
index 999e2a6bed13..a6600e361c34 100644
--- a/net/ethtool/ioctl.c
+++ b/net/ethtool/ioctl.c
@@ -2381,6 +2381,7 @@ static int ethtool_tunable_valid(const struct ethtool_tunable *tuna)
 	switch (tuna->id) {
 	case ETHTOOL_RX_COPYBREAK:
 	case ETHTOOL_TX_COPYBREAK:
+	case ETHTOOL_TX_COPYBREAK_BUF_SIZE:
 		if (tuna->len != sizeof(u32) ||
 		    tuna->type_id != ETHTOOL_TUNABLE_U32)
 			return -EINVAL;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH V2 net-next 2/6] net: hns3: add support to set/get tx copybreak buf size via ethtool for hns3 driver
  2021-09-24 14:29 [PATCH V2 net-next 0/6] ethtool: add support to set/get tx copybreak buf size and rx buf len Guangbin Huang
  2021-09-24 14:29 ` [PATCH V2 net-next 1/6] ethtool: add support to set/get tx copybreak buf size via ethtool Guangbin Huang
@ 2021-09-24 14:29 ` Guangbin Huang
  2021-09-24 14:29 ` [PATCH V2 net-next 3/6] ethtool: add support to set/get rx buf len via ethtool Guangbin Huang
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Guangbin Huang @ 2021-09-24 14:29 UTC (permalink / raw)
  To: davem, kuba, mkubecek, andrew, amitc, idosch, danieller,
	jesse.brandeburg, anthony.l.nguyen, jdike, richard, anton.ivanov,
	netanel, akiyano, gtzalik, saeedb, chris.snook, ulli.kroll,
	linus.walleij, jeroendb, csully, awogbemila, jdmason,
	rain.1986.08.12, zyjzyj2000, kys, haiyangz, mst, jasowang,
	doshir, pv-drivers, jwi, kgraul, hca, gor, johannes
  Cc: netdev, lipeng321, chenhao288, huangguangbin2, linux-s390

From: Hao Chen <chenhao288@hisilicon.com>

Tx copybreak buf size is used for tx copybreak feature, the feature is
used for small size packet or frag. It adds a queue based tx shared
bounce buffer to memcpy the small packet when the len of xmitted skb is
below tx_copybreak(value to distinguish small size and normal size),
and reduce the overhead of dma map and unmap when IOMMU is on.

Support setting it via ethtool --set-tunable parameter and getting
it via ethtool --get-tunable parameter.

Signed-off-by: Hao Chen <chenhao288@hisilicon.com>
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
---
 .../net/ethernet/hisilicon/hns3/hns3_enet.c   |  4 +-
 .../net/ethernet/hisilicon/hns3/hns3_enet.h   |  2 +
 .../ethernet/hisilicon/hns3/hns3_ethtool.c    | 56 +++++++++++++++++++
 3 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index adc54a726661..345dddb2d691 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -5519,8 +5519,8 @@ static int hns3_reset_notify_uninit_enet(struct hnae3_handle *handle)
 	return 0;
 }
 
-static int hns3_reset_notify(struct hnae3_handle *handle,
-			     enum hnae3_reset_notify_type type)
+int hns3_reset_notify(struct hnae3_handle *handle,
+		      enum hnae3_reset_notify_type type)
 {
 	int ret = 0;
 
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h
index 6162d9f88e37..eefdcef341d2 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h
@@ -705,6 +705,8 @@ void hns3_set_vector_coalesce_tx_ql(struct hns3_enet_tqp_vector *tqp_vector,
 				    u32 ql_value);
 
 void hns3_request_update_promisc_mode(struct hnae3_handle *handle);
+int hns3_reset_notify(struct hnae3_handle *handle,
+		      enum hnae3_reset_notify_type type);
 
 #ifdef CONFIG_HNS3_DCB
 void hns3_dcbnl_setup(struct hnae3_handle *handle);
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
index 7ea511d59e91..c757e067f31f 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
@@ -1691,6 +1691,7 @@ static int hns3_get_tunable(struct net_device *netdev,
 			    void *data)
 {
 	struct hns3_nic_priv *priv = netdev_priv(netdev);
+	struct hnae3_handle *h = priv->ae_handle;
 	int ret = 0;
 
 	switch (tuna->id) {
@@ -1701,6 +1702,9 @@ static int hns3_get_tunable(struct net_device *netdev,
 	case ETHTOOL_RX_COPYBREAK:
 		*(u32 *)data = priv->rx_copybreak;
 		break;
+	case ETHTOOL_TX_COPYBREAK_BUF_SIZE:
+		*(u32 *)data = h->kinfo.tx_spare_buf_size;
+		break;
 	default:
 		ret = -EOPNOTSUPP;
 		break;
@@ -1709,11 +1713,43 @@ static int hns3_get_tunable(struct net_device *netdev,
 	return ret;
 }
 
+static int hns3_set_tx_spare_buf_size(struct net_device *netdev,
+				      u32 data)
+{
+	struct hns3_nic_priv *priv = netdev_priv(netdev);
+	struct hnae3_handle *h = priv->ae_handle;
+	int ret;
+
+	if (hns3_nic_resetting(netdev))
+		return -EBUSY;
+
+	h->kinfo.tx_spare_buf_size = data;
+
+	ret = hns3_reset_notify(h, HNAE3_DOWN_CLIENT);
+	if (ret)
+		return ret;
+
+	ret = hns3_reset_notify(h, HNAE3_UNINIT_CLIENT);
+	if (ret)
+		return ret;
+
+	ret = hns3_reset_notify(h, HNAE3_INIT_CLIENT);
+	if (ret)
+		return ret;
+
+	ret = hns3_reset_notify(h, HNAE3_UP_CLIENT);
+	if (ret)
+		hns3_reset_notify(h, HNAE3_UNINIT_CLIENT);
+
+	return ret;
+}
+
 static int hns3_set_tunable(struct net_device *netdev,
 			    const struct ethtool_tunable *tuna,
 			    const void *data)
 {
 	struct hns3_nic_priv *priv = netdev_priv(netdev);
+	u32 old_tx_spare_buf_size, new_tx_spare_buf_size;
 	struct hnae3_handle *h = priv->ae_handle;
 	int i, ret = 0;
 
@@ -1731,6 +1767,26 @@ static int hns3_set_tunable(struct net_device *netdev,
 		for (i = h->kinfo.num_tqps; i < h->kinfo.num_tqps * 2; i++)
 			priv->ring[i].rx_copybreak = priv->rx_copybreak;
 
+		break;
+	case ETHTOOL_TX_COPYBREAK_BUF_SIZE:
+		old_tx_spare_buf_size = h->kinfo.tx_spare_buf_size;
+		new_tx_spare_buf_size = *(u32 *)data;
+		ret = hns3_set_tx_spare_buf_size(netdev, new_tx_spare_buf_size);
+		if (ret) {
+			int ret1;
+
+			netdev_warn(netdev,
+				    "change tx spare buf size fail, revert to old value\n");
+			ret1 = hns3_set_tx_spare_buf_size(netdev,
+							  old_tx_spare_buf_size);
+			if (ret1) {
+				netdev_err(netdev,
+					   "revert to old tx spare buf size fail\n");
+				return ret1;
+			}
+
+			return ret;
+		}
 		break;
 	default:
 		ret = -EOPNOTSUPP;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH V2 net-next 3/6] ethtool: add support to set/get rx buf len via ethtool
  2021-09-24 14:29 [PATCH V2 net-next 0/6] ethtool: add support to set/get tx copybreak buf size and rx buf len Guangbin Huang
  2021-09-24 14:29 ` [PATCH V2 net-next 1/6] ethtool: add support to set/get tx copybreak buf size via ethtool Guangbin Huang
  2021-09-24 14:29 ` [PATCH V2 net-next 2/6] net: hns3: add support to set/get tx copybreak buf size via ethtool for hns3 driver Guangbin Huang
@ 2021-09-24 14:29 ` Guangbin Huang
  2021-09-24 17:47   ` Jakub Kicinski
  2021-09-24 23:14   ` Michal Kubecek
  2021-09-24 14:29 ` [PATCH V2 net-next 5/6] net: hns3: add support to set/get rx buf len via ethtool for hns3 driver Guangbin Huang
  2021-09-24 14:29 ` [PATCH V2 net-next 6/6] net: hns3: remove the way to set tx spare buf via module parameter Guangbin Huang
  4 siblings, 2 replies; 12+ messages in thread
From: Guangbin Huang @ 2021-09-24 14:29 UTC (permalink / raw)
  To: davem, kuba, mkubecek, andrew, amitc, idosch, danieller,
	jesse.brandeburg, anthony.l.nguyen, jdike, richard, anton.ivanov,
	netanel, akiyano, gtzalik, saeedb, chris.snook, ulli.kroll,
	linus.walleij, jeroendb, csully, awogbemila, jdmason,
	rain.1986.08.12, zyjzyj2000, kys, haiyangz, mst, jasowang,
	doshir, pv-drivers, jwi, kgraul, hca, gor, johannes
  Cc: netdev, lipeng321, chenhao288, huangguangbin2, linux-s390

From: Hao Chen <chenhao288@hisilicon.com>

Add support to set rx buf len via ethtool -G parameter and get
rx buf len via ethtool -g parameter.

Signed-off-by: Hao Chen <chenhao288@hisilicon.com>
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
---
 Documentation/networking/ethtool-netlink.rst |  2 ++
 include/linux/ethtool.h                      | 18 ++++++++++++++++--
 include/uapi/linux/ethtool.h                 |  8 ++++++++
 include/uapi/linux/ethtool_netlink.h         |  1 +
 net/ethtool/netlink.h                        |  2 +-
 net/ethtool/rings.c                          | 17 ++++++++++++++++-
 6 files changed, 44 insertions(+), 4 deletions(-)

diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst
index a47b0255aaf9..9734b7c1e05d 100644
--- a/Documentation/networking/ethtool-netlink.rst
+++ b/Documentation/networking/ethtool-netlink.rst
@@ -841,6 +841,7 @@ Kernel response contents:
   ``ETHTOOL_A_RINGS_RX_MINI``           u32     size of RX mini ring
   ``ETHTOOL_A_RINGS_RX_JUMBO``          u32     size of RX jumbo ring
   ``ETHTOOL_A_RINGS_TX``                u32     size of TX ring
+  ``ETHTOOL_A_RINGS_RX_BUF_LEN``        u32     size of buffers on the ring
   ====================================  ======  ==========================
 
 
@@ -857,6 +858,7 @@ Request contents:
   ``ETHTOOL_A_RINGS_RX_MINI``           u32     size of RX mini ring
   ``ETHTOOL_A_RINGS_RX_JUMBO``          u32     size of RX jumbo ring
   ``ETHTOOL_A_RINGS_TX``                u32     size of TX ring
+  ``ETHTOOL_A_RINGS_RX_BUF_LEN``        u32     size of buffers on the ring
   ====================================  ======  ==========================
 
 Kernel checks that requested ring sizes do not exceed limits reported by
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index 849524b55d89..61e42a0b60d3 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -67,6 +67,14 @@ enum {
 	ETH_RSS_HASH_FUNCS_COUNT
 };
 
+/**
+ * enum ethtool_supported_ring_param - indicator caps for setting ring params
+ * @ETHTOOL_RING_USE_RX_BUF_LEN: capture for setting rx_buf_len
+ */
+enum ethtool_supported_ring_param {
+	ETHTOOL_RING_USE_RX_BUF_LEN = BIT(0),
+};
+
 #define __ETH_RSS_HASH_BIT(bit)	((u32)1 << (bit))
 #define __ETH_RSS_HASH(name)	__ETH_RSS_HASH_BIT(ETH_RSS_HASH_##name##_BIT)
 
@@ -420,6 +428,7 @@ struct ethtool_module_eeprom {
  * @cap_link_lanes_supported: indicates if the driver supports lanes
  *	parameter.
  * @supported_coalesce_params: supported types of interrupt coalescing.
+ * @supported_ring_params: supported ring params.
  * @get_drvinfo: Report driver/device information.  Should only set the
  *	@driver, @version, @fw_version and @bus_info fields.  If not
  *	implemented, the @driver and @bus_info fields will be filled in
@@ -596,6 +605,7 @@ struct ethtool_module_eeprom {
 struct ethtool_ops {
 	u32     cap_link_lanes_supported:1;
 	u32	supported_coalesce_params;
+	u32	supported_ring_params;
 	void	(*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
 	int	(*get_regs_len)(struct net_device *);
 	void	(*get_regs)(struct net_device *, struct ethtool_regs *, void *);
@@ -621,9 +631,13 @@ struct ethtool_ops {
 				struct kernel_ethtool_coalesce *,
 				struct netlink_ext_ack *);
 	void	(*get_ringparam)(struct net_device *,
-				 struct ethtool_ringparam *);
+				 struct ethtool_ringparam *,
+				 struct ethtool_ringparam_ext *,
+				 struct netlink_ext_ack *);
 	int	(*set_ringparam)(struct net_device *,
-				 struct ethtool_ringparam *);
+				 struct ethtool_ringparam *,
+				 struct ethtool_ringparam_ext *,
+				 struct netlink_ext_ack *);
 	void	(*get_pause_stats)(struct net_device *dev,
 				   struct ethtool_pause_stats *pause_stats);
 	void	(*get_pauseparam)(struct net_device *,
diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
index 266e95e4fb33..83544186cbb5 100644
--- a/include/uapi/linux/ethtool.h
+++ b/include/uapi/linux/ethtool.h
@@ -535,6 +535,14 @@ struct ethtool_ringparam {
 	__u32	tx_pending;
 };
 
+/**
+ * struct ethtool_ringparam_ext - RX/TX ring configuration
+ * @rx_buf_len: Current length of buffers on the rx ring.
+ */
+struct ethtool_ringparam_ext {
+	__u32	rx_buf_len;
+};
+
 /**
  * struct ethtool_channels - configuring number of network channel
  * @cmd: ETHTOOL_{G,S}CHANNELS
diff --git a/include/uapi/linux/ethtool_netlink.h b/include/uapi/linux/ethtool_netlink.h
index 5545f1ca9237..3883fa4168e9 100644
--- a/include/uapi/linux/ethtool_netlink.h
+++ b/include/uapi/linux/ethtool_netlink.h
@@ -325,6 +325,7 @@ enum {
 	ETHTOOL_A_RINGS_RX_MINI,			/* u32 */
 	ETHTOOL_A_RINGS_RX_JUMBO,			/* u32 */
 	ETHTOOL_A_RINGS_TX,				/* u32 */
+	ETHTOOL_A_RINGS_RX_BUF_LEN,                     /* u32 */
 
 	/* add new constants above here */
 	__ETHTOOL_A_RINGS_CNT,
diff --git a/net/ethtool/netlink.h b/net/ethtool/netlink.h
index e8987e28036f..3183f1fc6990 100644
--- a/net/ethtool/netlink.h
+++ b/net/ethtool/netlink.h
@@ -355,7 +355,7 @@ extern const struct nla_policy ethnl_features_set_policy[ETHTOOL_A_FEATURES_WANT
 extern const struct nla_policy ethnl_privflags_get_policy[ETHTOOL_A_PRIVFLAGS_HEADER + 1];
 extern const struct nla_policy ethnl_privflags_set_policy[ETHTOOL_A_PRIVFLAGS_FLAGS + 1];
 extern const struct nla_policy ethnl_rings_get_policy[ETHTOOL_A_RINGS_HEADER + 1];
-extern const struct nla_policy ethnl_rings_set_policy[ETHTOOL_A_RINGS_TX + 1];
+extern const struct nla_policy ethnl_rings_set_policy[ETHTOOL_A_RINGS_RX_BUF_LEN + 1];
 extern const struct nla_policy ethnl_channels_get_policy[ETHTOOL_A_CHANNELS_HEADER + 1];
 extern const struct nla_policy ethnl_channels_set_policy[ETHTOOL_A_CHANNELS_COMBINED_COUNT + 1];
 extern const struct nla_policy ethnl_coalesce_get_policy[ETHTOOL_A_COALESCE_HEADER + 1];
diff --git a/net/ethtool/rings.c b/net/ethtool/rings.c
index 4e097812a967..dd645d1334be 100644
--- a/net/ethtool/rings.c
+++ b/net/ethtool/rings.c
@@ -10,6 +10,7 @@ struct rings_req_info {
 struct rings_reply_data {
 	struct ethnl_reply_data		base;
 	struct ethtool_ringparam	ringparam;
+	struct ethtool_ringparam_ext	ringparam_ext;
 };
 
 #define RINGS_REPDATA(__reply_base) \
@@ -49,7 +50,8 @@ static int rings_reply_size(const struct ethnl_req_info *req_base,
 	       nla_total_size(sizeof(u32)) +	/* _RINGS_RX */
 	       nla_total_size(sizeof(u32)) +	/* _RINGS_RX_MINI */
 	       nla_total_size(sizeof(u32)) +	/* _RINGS_RX_JUMBO */
-	       nla_total_size(sizeof(u32));	/* _RINGS_TX */
+	       nla_total_size(sizeof(u32)) +	/* _RINGS_TX */
+	       nla_total_size(sizeof(u32));     /* _RINGS_RX_BUF_LEN */
 }
 
 static int rings_fill_reply(struct sk_buff *skb,
@@ -105,10 +107,12 @@ const struct nla_policy ethnl_rings_set_policy[] = {
 	[ETHTOOL_A_RINGS_RX_MINI]		= { .type = NLA_U32 },
 	[ETHTOOL_A_RINGS_RX_JUMBO]		= { .type = NLA_U32 },
 	[ETHTOOL_A_RINGS_TX]			= { .type = NLA_U32 },
+	[ETHTOOL_A_RINGS_RX_BUF_LEN]            = NLA_POLICY_MIN(NLA_U32, 1),
 };
 
 int ethnl_set_rings(struct sk_buff *skb, struct genl_info *info)
 {
+	struct ethtool_ringparam_ext ringparam_ext = {};
 	struct ethtool_ringparam ringparam = {};
 	struct ethnl_req_info req_info = {};
 	struct nlattr **tb = info->attrs;
@@ -142,6 +146,8 @@ int ethnl_set_rings(struct sk_buff *skb, struct genl_info *info)
 	ethnl_update_u32(&ringparam.rx_jumbo_pending,
 			 tb[ETHTOOL_A_RINGS_RX_JUMBO], &mod);
 	ethnl_update_u32(&ringparam.tx_pending, tb[ETHTOOL_A_RINGS_TX], &mod);
+	ethnl_update_u32(&ringparam_ext.rx_buf_len,
+			 tb[ETHTOOL_A_RINGS_RX_BUF_LEN], &mod);
 	ret = 0;
 	if (!mod)
 		goto out_ops;
@@ -164,6 +170,15 @@ int ethnl_set_rings(struct sk_buff *skb, struct genl_info *info)
 		goto out_ops;
 	}
 
+	if (ringparam_ext.rx_buf_len != 0 &&
+	    !(ops->supported_ring_params & ETHTOOL_RING_USE_RX_BUF_LEN)) {
+		ret = -EOPNOTSUPP;
+		NL_SET_ERR_MSG_ATTR(info->extack,
+				    tb[ETHTOOL_A_RINGS_RX_BUF_LEN],
+				    "not supported setting rx buf len");
+		goto out_ops;
+	}
+
 	ret = dev->ethtool_ops->set_ringparam(dev, &ringparam);
 	if (ret < 0)
 		goto out_ops;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH V2 net-next 5/6] net: hns3: add support to set/get rx buf len via ethtool for hns3 driver
  2021-09-24 14:29 [PATCH V2 net-next 0/6] ethtool: add support to set/get tx copybreak buf size and rx buf len Guangbin Huang
                   ` (2 preceding siblings ...)
  2021-09-24 14:29 ` [PATCH V2 net-next 3/6] ethtool: add support to set/get rx buf len via ethtool Guangbin Huang
@ 2021-09-24 14:29 ` Guangbin Huang
  2021-09-24 14:29 ` [PATCH V2 net-next 6/6] net: hns3: remove the way to set tx spare buf via module parameter Guangbin Huang
  4 siblings, 0 replies; 12+ messages in thread
From: Guangbin Huang @ 2021-09-24 14:29 UTC (permalink / raw)
  To: davem, kuba, mkubecek, andrew, amitc, idosch, danieller,
	jesse.brandeburg, anthony.l.nguyen, jdike, richard, anton.ivanov,
	netanel, akiyano, gtzalik, saeedb, chris.snook, ulli.kroll,
	linus.walleij, jeroendb, csully, awogbemila, jdmason,
	rain.1986.08.12, zyjzyj2000, kys, haiyangz, mst, jasowang,
	doshir, pv-drivers, jwi, kgraul, hca, gor, johannes
  Cc: netdev, lipeng321, chenhao288, huangguangbin2, linux-s390

From: Hao Chen <chenhao288@hisilicon.com>

Rx buf len is for rx BD buffer size, support setting it via ethtool -G
parameter and getting it via ethtool -g parameter.

Signed-off-by: Hao Chen <chenhao288@hisilicon.com>
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
---
 .../ethernet/hisilicon/hns3/hns3_ethtool.c    | 52 ++++++++++++++++---
 1 file changed, 44 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
index ed50b3b7b9e8..68512432d4b3 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
@@ -645,7 +645,7 @@ static void hns3_get_ringparam(struct net_device *netdev,
 {
 	struct hns3_nic_priv *priv = netdev_priv(netdev);
 	struct hnae3_handle *h = priv->ae_handle;
-	int queue_num = h->kinfo.num_tqps;
+	int rx_queue_index = h->kinfo.num_tqps;
 
 	if (hns3_nic_resetting(netdev)) {
 		netdev_err(netdev, "dev resetting!");
@@ -656,7 +656,8 @@ static void hns3_get_ringparam(struct net_device *netdev,
 	param->rx_max_pending = HNS3_RING_MAX_PENDING;
 
 	param->tx_pending = priv->ring[0].desc_num;
-	param->rx_pending = priv->ring[queue_num].desc_num;
+	param->rx_pending = priv->ring[rx_queue_index].desc_num;
+	param_ext->rx_buf_len = priv->ring[rx_queue_index].buf_size;
 }
 
 static void hns3_get_pauseparam(struct net_device *netdev,
@@ -1058,14 +1059,23 @@ static struct hns3_enet_ring *hns3_backup_ringparam(struct hns3_nic_priv *priv)
 }
 
 static int hns3_check_ringparam(struct net_device *ndev,
-				struct ethtool_ringparam *param)
+				struct ethtool_ringparam *param,
+				struct ethtool_ringparam_ext *param_ext)
 {
+#define RX_BUF_LEN_2K 2048
+#define RX_BUF_LEN_4K 4096
 	if (hns3_nic_resetting(ndev))
 		return -EBUSY;
 
 	if (param->rx_mini_pending || param->rx_jumbo_pending)
 		return -EINVAL;
 
+	if (param_ext->rx_buf_len != RX_BUF_LEN_2K &&
+	    param_ext->rx_buf_len != RX_BUF_LEN_4K) {
+		netdev_err(ndev, "Rx buf len only support 2048 and 4096\n");
+		return -EINVAL;
+	}
+
 	if (param->tx_pending > HNS3_RING_MAX_PENDING ||
 	    param->tx_pending < HNS3_RING_MIN_PENDING ||
 	    param->rx_pending > HNS3_RING_MAX_PENDING ||
@@ -1078,6 +1088,22 @@ static int hns3_check_ringparam(struct net_device *ndev,
 	return 0;
 }
 
+static int hns3_change_rx_buf_len(struct net_device *ndev, u32 rx_buf_len)
+{
+	struct hns3_nic_priv *priv = netdev_priv(ndev);
+	struct hnae3_handle *h = priv->ae_handle;
+	int i;
+
+	h->kinfo.rx_buf_len = rx_buf_len;
+
+	for (i = 0; i < h->kinfo.num_tqps; i++) {
+		h->kinfo.tqp[i]->buf_size = rx_buf_len;
+		priv->ring[i + h->kinfo.num_tqps].buf_size = rx_buf_len;
+	}
+
+	return 0;
+}
+
 static int hns3_set_ringparam(struct net_device *ndev,
 			      struct ethtool_ringparam *param,
 			      struct ethtool_ringparam_ext *param_ext,
@@ -1090,9 +1116,10 @@ static int hns3_set_ringparam(struct net_device *ndev,
 	u32 old_tx_desc_num, new_tx_desc_num;
 	u32 old_rx_desc_num, new_rx_desc_num;
 	u16 queue_num = h->kinfo.num_tqps;
+	u32 old_rx_buf_len;
 	int ret, i;
 
-	ret = hns3_check_ringparam(ndev, param);
+	ret = hns3_check_ringparam(ndev, param, param_ext);
 	if (ret)
 		return ret;
 
@@ -1101,8 +1128,10 @@ static int hns3_set_ringparam(struct net_device *ndev,
 	new_rx_desc_num = ALIGN(param->rx_pending, HNS3_RING_BD_MULTIPLE);
 	old_tx_desc_num = priv->ring[0].desc_num;
 	old_rx_desc_num = priv->ring[queue_num].desc_num;
+	old_rx_buf_len = priv->ring[queue_num].buf_size;
 	if (old_tx_desc_num == new_tx_desc_num &&
-	    old_rx_desc_num == new_rx_desc_num)
+	    old_rx_desc_num == new_rx_desc_num &&
+	    param_ext->rx_buf_len == old_rx_buf_len)
 		return 0;
 
 	tmp_rings = hns3_backup_ringparam(priv);
@@ -1113,19 +1142,22 @@ static int hns3_set_ringparam(struct net_device *ndev,
 	}
 
 	netdev_info(ndev,
-		    "Changing Tx/Rx ring depth from %u/%u to %u/%u\n",
+		    "Changing Tx/Rx ring depth from %u/%u to %u/%u, Changing rx buffer len from %d to %d\n",
 		    old_tx_desc_num, old_rx_desc_num,
-		    new_tx_desc_num, new_rx_desc_num);
+		    new_tx_desc_num, new_rx_desc_num,
+		    old_rx_buf_len, param_ext->rx_buf_len);
 
 	if (if_running)
 		ndev->netdev_ops->ndo_stop(ndev);
 
 	hns3_change_all_ring_bd_num(priv, new_tx_desc_num, new_rx_desc_num);
+	hns3_change_rx_buf_len(ndev, param_ext->rx_buf_len);
 	ret = hns3_init_all_ring(priv);
 	if (ret) {
-		netdev_err(ndev, "Change bd num fail, revert to old value(%d)\n",
+		netdev_err(ndev, "set ringparam fail, revert to old value(%d)\n",
 			   ret);
 
+		hns3_change_rx_buf_len(ndev, old_rx_buf_len);
 		hns3_change_all_ring_bd_num(priv, old_tx_desc_num,
 					    old_rx_desc_num);
 		for (i = 0; i < h->kinfo.num_tqps * 2; i++)
@@ -1807,6 +1839,8 @@ static int hns3_set_tunable(struct net_device *netdev,
 				 ETHTOOL_COALESCE_MAX_FRAMES |		\
 				 ETHTOOL_COALESCE_USE_CQE)
 
+#define HNS3_ETHTOOL_RING	ETHTOOL_RING_USE_RX_BUF_LEN
+
 static int hns3_get_ts_info(struct net_device *netdev,
 			    struct ethtool_ts_info *info)
 {
@@ -1885,6 +1919,7 @@ static int hns3_get_link_ext_state(struct net_device *netdev,
 
 static const struct ethtool_ops hns3vf_ethtool_ops = {
 	.supported_coalesce_params = HNS3_ETHTOOL_COALESCE,
+	.supported_ring_params = HNS3_ETHTOOL_RING,
 	.get_drvinfo = hns3_get_drvinfo,
 	.get_ringparam = hns3_get_ringparam,
 	.set_ringparam = hns3_set_ringparam,
@@ -1916,6 +1951,7 @@ static const struct ethtool_ops hns3vf_ethtool_ops = {
 
 static const struct ethtool_ops hns3_ethtool_ops = {
 	.supported_coalesce_params = HNS3_ETHTOOL_COALESCE,
+	.supported_ring_params = HNS3_ETHTOOL_RING,
 	.self_test = hns3_self_test,
 	.get_drvinfo = hns3_get_drvinfo,
 	.get_link = hns3_get_link,
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH V2 net-next 6/6] net: hns3: remove the way to set tx spare buf via module parameter
  2021-09-24 14:29 [PATCH V2 net-next 0/6] ethtool: add support to set/get tx copybreak buf size and rx buf len Guangbin Huang
                   ` (3 preceding siblings ...)
  2021-09-24 14:29 ` [PATCH V2 net-next 5/6] net: hns3: add support to set/get rx buf len via ethtool for hns3 driver Guangbin Huang
@ 2021-09-24 14:29 ` Guangbin Huang
  4 siblings, 0 replies; 12+ messages in thread
From: Guangbin Huang @ 2021-09-24 14:29 UTC (permalink / raw)
  To: davem, kuba, mkubecek, andrew, amitc, idosch, danieller,
	jesse.brandeburg, anthony.l.nguyen, jdike, richard, anton.ivanov,
	netanel, akiyano, gtzalik, saeedb, chris.snook, ulli.kroll,
	linus.walleij, jeroendb, csully, awogbemila, jdmason,
	rain.1986.08.12, zyjzyj2000, kys, haiyangz, mst, jasowang,
	doshir, pv-drivers, jwi, kgraul, hca, gor, johannes
  Cc: netdev, lipeng321, chenhao288, huangguangbin2, linux-s390

From: Hao Chen <chenhao288@hisilicon.com>

The way to set tx spare buf via module parameter is not such
convenient as the way to set it via ethtool.

So,remove the way to set tx spare buf via module parameter.

Signed-off-by: Hao Chen <chenhao288@hisilicon.com>
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index 345dddb2d691..f8edf1d45f01 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -53,10 +53,6 @@ static int debug = -1;
 module_param(debug, int, 0);
 MODULE_PARM_DESC(debug, " Network interface message level setting");
 
-static unsigned int tx_spare_buf_size;
-module_param(tx_spare_buf_size, uint, 0400);
-MODULE_PARM_DESC(tx_spare_buf_size, "Size used to allocate tx spare buffer");
-
 static unsigned int tx_sgl = 1;
 module_param(tx_sgl, uint, 0600);
 MODULE_PARM_DESC(tx_sgl, "Minimum number of frags when using dma_map_sg() to optimize the IOMMU mapping");
@@ -1040,8 +1036,7 @@ static void hns3_init_tx_spare_buffer(struct hns3_enet_ring *ring)
 	dma_addr_t dma;
 	int order;
 
-	alloc_size = tx_spare_buf_size ? tx_spare_buf_size :
-		     ring->tqp->handle->kinfo.tx_spare_buf_size;
+	alloc_size = ring->tqp->handle->kinfo.tx_spare_buf_size;
 	if (!alloc_size)
 		return;
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH V2 net-next 3/6] ethtool: add support to set/get rx buf len via ethtool
  2021-09-24 14:29 ` [PATCH V2 net-next 3/6] ethtool: add support to set/get rx buf len via ethtool Guangbin Huang
@ 2021-09-24 17:47   ` Jakub Kicinski
  2021-09-29  2:21     ` huangguangbin (A)
  2021-09-24 23:14   ` Michal Kubecek
  1 sibling, 1 reply; 12+ messages in thread
From: Jakub Kicinski @ 2021-09-24 17:47 UTC (permalink / raw)
  To: Guangbin Huang
  Cc: davem, mkubecek, andrew, amitc, idosch, danieller,
	jesse.brandeburg, anthony.l.nguyen, jdike, richard, anton.ivanov,
	netanel, akiyano, gtzalik, saeedb, chris.snook, ulli.kroll,
	linus.walleij, jeroendb, csully, awogbemila, jdmason,
	rain.1986.08.12, zyjzyj2000, kys, haiyangz, mst, jasowang,
	doshir, pv-drivers, jwi, kgraul, hca, gor, johannes, netdev,
	lipeng321, chenhao288, linux-s390

On Fri, 24 Sep 2021 22:29:56 +0800 Guangbin Huang wrote:
> @@ -621,9 +631,13 @@ struct ethtool_ops {
>  				struct kernel_ethtool_coalesce *,
>  				struct netlink_ext_ack *);
>  	void	(*get_ringparam)(struct net_device *,
> -				 struct ethtool_ringparam *);
> +				 struct ethtool_ringparam *,
> +				 struct ethtool_ringparam_ext *,
> +				 struct netlink_ext_ack *);
>  	int	(*set_ringparam)(struct net_device *,
> -				 struct ethtool_ringparam *);
> +				 struct ethtool_ringparam *,
> +				 struct ethtool_ringparam_ext *,
> +				 struct netlink_ext_ack *);

You need to make the driver changes together with this chunk.
Otherwise the build will be broken between the two during bisection.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH V2 net-next 1/6] ethtool: add support to set/get tx copybreak buf size via ethtool
  2021-09-24 14:29 ` [PATCH V2 net-next 1/6] ethtool: add support to set/get tx copybreak buf size via ethtool Guangbin Huang
@ 2021-09-24 23:05   ` Michal Kubecek
  2021-09-29  2:19     ` huangguangbin (A)
  0 siblings, 1 reply; 12+ messages in thread
From: Michal Kubecek @ 2021-09-24 23:05 UTC (permalink / raw)
  To: Guangbin Huang
  Cc: davem, kuba, andrew, amitc, idosch, danieller, jesse.brandeburg,
	anthony.l.nguyen, jdike, richard, anton.ivanov, netanel, akiyano,
	gtzalik, saeedb, chris.snook, ulli.kroll, linus.walleij,
	jeroendb, csully, awogbemila, jdmason, rain.1986.08.12,
	zyjzyj2000, kys, haiyangz, mst, jasowang, doshir, pv-drivers,
	jwi, kgraul, hca, gor, johannes, netdev, lipeng321, chenhao288,
	linux-s390

[-- Attachment #1: Type: text/plain, Size: 4094 bytes --]

On Fri, Sep 24, 2021 at 10:29:54PM +0800, Guangbin Huang wrote:
> From: Hao Chen <chenhao288@hisilicon.com>
> 
> Add support for ethtool to set/get tx copybreak buf size.
> 
> Signed-off-by: Hao Chen <chenhao288@hisilicon.com>
> Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
> ---
>  Documentation/networking/ethtool-netlink.rst | 24 ++++++++++++++++++++
>  include/uapi/linux/ethtool.h                 |  1 +
>  net/ethtool/common.c                         |  1 +
>  net/ethtool/ioctl.c                          |  1 +
>  4 files changed, 27 insertions(+)
> 
> diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst
> index d9b55b7a1a4d..a47b0255aaf9 100644
> --- a/Documentation/networking/ethtool-netlink.rst
> +++ b/Documentation/networking/ethtool-netlink.rst
> @@ -1521,6 +1521,30 @@ Kernel response contents:
>    ``ETHTOOL_A_PHC_VCLOCKS_INDEX``       s32     PHC index array
>    ====================================  ======  ==========================
>  
> +TUNABLE_SET
> +===========
> +
> +Request contents:
> +
> +  =====================================  ======  ==========================
> +  ``ETHTOOL_TX_COPYBREAK_BUF_SIZE``      u32     buf size for tx copybreak
> +  =====================================  ======  ==========================
> +
> +Tx copybreak buf size is used for tx copybreak feature, the feature is used
> +for small size packet or frag. It adds a queue based tx shared bounce buffer
> +to memcpy the small packet when the len of xmitted skb is below tx_copybreak
> +(value to distinguish small size and normal size), and reduce the overhead
> +of dma map and unmap when IOMMU is on.
> +
> +TUNABLE_GET
> +===========
> +
> +Kernel response contents:
> +
> +  ====================================  ======  ==========================
> +  ``ETHTOOL_TX_COPYBREAK_BUF_SIZE``     u32     buf size for tx copybreak
> +  ====================================  ======  ==========================

I have to repeat my concerns expressed in

  https://lore.kernel.org/netdev/20210826072618.2lu6spapkzdcuhyv@lion.mk-sys.cz

and earlier in more details in

  https://lore.kernel.org/netdev/20200325164958.GZ31519@unicorn.suse.cz

That being said, I don't understand why this patch adds description of
two new message types to the documentation of ethtool netlink API but it
does not actually add them to the API. Instead, it adds the new tunable
to ioctl API.

Michal

> +
>  Request translation
>  ===================
>  
> diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
> index b6db6590baf0..266e95e4fb33 100644
> --- a/include/uapi/linux/ethtool.h
> +++ b/include/uapi/linux/ethtool.h
> @@ -231,6 +231,7 @@ enum tunable_id {
>  	ETHTOOL_RX_COPYBREAK,
>  	ETHTOOL_TX_COPYBREAK,
>  	ETHTOOL_PFC_PREVENTION_TOUT, /* timeout in msecs */
> +	ETHTOOL_TX_COPYBREAK_BUF_SIZE,
>  	/*
>  	 * Add your fresh new tunable attribute above and remember to update
>  	 * tunable_strings[] in net/ethtool/common.c
> diff --git a/net/ethtool/common.c b/net/ethtool/common.c
> index c63e0739dc6a..0c5210015911 100644
> --- a/net/ethtool/common.c
> +++ b/net/ethtool/common.c
> @@ -89,6 +89,7 @@ tunable_strings[__ETHTOOL_TUNABLE_COUNT][ETH_GSTRING_LEN] = {
>  	[ETHTOOL_RX_COPYBREAK]	= "rx-copybreak",
>  	[ETHTOOL_TX_COPYBREAK]	= "tx-copybreak",
>  	[ETHTOOL_PFC_PREVENTION_TOUT] = "pfc-prevention-tout",
> +	[ETHTOOL_TX_COPYBREAK_BUF_SIZE] = "tx-copybreak-buf-size",
>  };
>  
>  const char
> diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
> index 999e2a6bed13..a6600e361c34 100644
> --- a/net/ethtool/ioctl.c
> +++ b/net/ethtool/ioctl.c
> @@ -2381,6 +2381,7 @@ static int ethtool_tunable_valid(const struct ethtool_tunable *tuna)
>  	switch (tuna->id) {
>  	case ETHTOOL_RX_COPYBREAK:
>  	case ETHTOOL_TX_COPYBREAK:
> +	case ETHTOOL_TX_COPYBREAK_BUF_SIZE:
>  		if (tuna->len != sizeof(u32) ||
>  		    tuna->type_id != ETHTOOL_TUNABLE_U32)
>  			return -EINVAL;
> -- 
> 2.33.0
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH V2 net-next 3/6] ethtool: add support to set/get rx buf len via ethtool
  2021-09-24 14:29 ` [PATCH V2 net-next 3/6] ethtool: add support to set/get rx buf len via ethtool Guangbin Huang
  2021-09-24 17:47   ` Jakub Kicinski
@ 2021-09-24 23:14   ` Michal Kubecek
  2021-09-29  2:33     ` huangguangbin (A)
  1 sibling, 1 reply; 12+ messages in thread
From: Michal Kubecek @ 2021-09-24 23:14 UTC (permalink / raw)
  To: Guangbin Huang
  Cc: davem, kuba, andrew, amitc, idosch, danieller, jesse.brandeburg,
	anthony.l.nguyen, jdike, richard, anton.ivanov, netanel, akiyano,
	saeedb, chris.snook, ulli.kroll, linus.walleij, jeroendb, csully,
	awogbemila, jdmason, rain.1986.08.12, zyjzyj2000, kys, haiyangz,
	mst, jasowang, doshir, pv-drivers, jwi, kgraul, hca, gor,
	johannes, netdev, lipeng321, chenhao288, linux-s390

[-- Attachment #1: Type: text/plain, Size: 2111 bytes --]

On Fri, Sep 24, 2021 at 10:29:56PM +0800, Guangbin Huang wrote:
> From: Hao Chen <chenhao288@hisilicon.com>
> 
> Add support to set rx buf len via ethtool -G parameter and get
> rx buf len via ethtool -g parameter.
> 
> Signed-off-by: Hao Chen <chenhao288@hisilicon.com>
> Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
> ---
>  Documentation/networking/ethtool-netlink.rst |  2 ++
>  include/linux/ethtool.h                      | 18 ++++++++++++++++--
>  include/uapi/linux/ethtool.h                 |  8 ++++++++
>  include/uapi/linux/ethtool_netlink.h         |  1 +
>  net/ethtool/netlink.h                        |  2 +-
>  net/ethtool/rings.c                          | 17 ++++++++++++++++-
>  6 files changed, 44 insertions(+), 4 deletions(-)
> 
> diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst
> index a47b0255aaf9..9734b7c1e05d 100644
> --- a/Documentation/networking/ethtool-netlink.rst
> +++ b/Documentation/networking/ethtool-netlink.rst
> @@ -841,6 +841,7 @@ Kernel response contents:
>    ``ETHTOOL_A_RINGS_RX_MINI``           u32     size of RX mini ring
>    ``ETHTOOL_A_RINGS_RX_JUMBO``          u32     size of RX jumbo ring
>    ``ETHTOOL_A_RINGS_TX``                u32     size of TX ring
> +  ``ETHTOOL_A_RINGS_RX_BUF_LEN``        u32     size of buffers on the ring
>    ====================================  ======  ==========================
>  
>  
> @@ -857,6 +858,7 @@ Request contents:
>    ``ETHTOOL_A_RINGS_RX_MINI``           u32     size of RX mini ring
>    ``ETHTOOL_A_RINGS_RX_JUMBO``          u32     size of RX jumbo ring
>    ``ETHTOOL_A_RINGS_TX``                u32     size of TX ring
> +  ``ETHTOOL_A_RINGS_RX_BUF_LEN``        u32     size of buffers on the ring
>    ====================================  ======  ==========================
>  
>  Kernel checks that requested ring sizes do not exceed limits reported by

Would it make sense to let driver report also maximum supported value
like it does for existing ring parameters (ring sizes)?

Michal

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH V2 net-next 1/6] ethtool: add support to set/get tx copybreak buf size via ethtool
  2021-09-24 23:05   ` Michal Kubecek
@ 2021-09-29  2:19     ` huangguangbin (A)
  0 siblings, 0 replies; 12+ messages in thread
From: huangguangbin (A) @ 2021-09-29  2:19 UTC (permalink / raw)
  To: Michal Kubecek
  Cc: davem, kuba, andrew, amitc, idosch, danieller, jesse.brandeburg,
	anthony.l.nguyen, jdike, richard, anton.ivanov, netanel, akiyano,
	gtzalik, saeedb, chris.snook, ulli.kroll, linus.walleij,
	jeroendb, csully, awogbemila, jdmason, rain.1986.08.12,
	zyjzyj2000, kys, haiyangz, mst, jasowang, doshir, pv-drivers,
	jwi, kgraul, hca, gor, johannes, netdev, lipeng321, chenhao288,
	linux-s390



On 2021/9/25 7:05, Michal Kubecek wrote:
> On Fri, Sep 24, 2021 at 10:29:54PM +0800, Guangbin Huang wrote:
>> From: Hao Chen <chenhao288@hisilicon.com>
>>
>> Add support for ethtool to set/get tx copybreak buf size.
>>
>> Signed-off-by: Hao Chen <chenhao288@hisilicon.com>
>> Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
>> ---
>>   Documentation/networking/ethtool-netlink.rst | 24 ++++++++++++++++++++
>>   include/uapi/linux/ethtool.h                 |  1 +
>>   net/ethtool/common.c                         |  1 +
>>   net/ethtool/ioctl.c                          |  1 +
>>   4 files changed, 27 insertions(+)
>>
>> diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst
>> index d9b55b7a1a4d..a47b0255aaf9 100644
>> --- a/Documentation/networking/ethtool-netlink.rst
>> +++ b/Documentation/networking/ethtool-netlink.rst
>> @@ -1521,6 +1521,30 @@ Kernel response contents:
>>     ``ETHTOOL_A_PHC_VCLOCKS_INDEX``       s32     PHC index array
>>     ====================================  ======  ==========================
>>   
>> +TUNABLE_SET
>> +===========
>> +
>> +Request contents:
>> +
>> +  =====================================  ======  ==========================
>> +  ``ETHTOOL_TX_COPYBREAK_BUF_SIZE``      u32     buf size for tx copybreak
>> +  =====================================  ======  ==========================
>> +
>> +Tx copybreak buf size is used for tx copybreak feature, the feature is used
>> +for small size packet or frag. It adds a queue based tx shared bounce buffer
>> +to memcpy the small packet when the len of xmitted skb is below tx_copybreak
>> +(value to distinguish small size and normal size), and reduce the overhead
>> +of dma map and unmap when IOMMU is on.
>> +
>> +TUNABLE_GET
>> +===========
>> +
>> +Kernel response contents:
>> +
>> +  ====================================  ======  ==========================
>> +  ``ETHTOOL_TX_COPYBREAK_BUF_SIZE``     u32     buf size for tx copybreak
>> +  ====================================  ======  ==========================
> 
> I have to repeat my concerns expressed in
> 
>    https://lore.kernel.org/netdev/20210826072618.2lu6spapkzdcuhyv@lion.mk-sys.cz
> 
> and earlier in more details in
> 
>    https://lore.kernel.org/netdev/20200325164958.GZ31519@unicorn.suse.cz
> 
> That being said, I don't understand why this patch adds description of
> two new message types to the documentation of ethtool netlink API but it
> does not actually add them to the API. Instead, it adds the new tunable
> to ioctl API.
> 
> Michal
> 

Hi Michal, thanks for your opinion.
Is there any documentation for ioctl API? We didn't find it.
Or we add a new documentation of ioctl API for the new tunable?

Guangbin

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH V2 net-next 3/6] ethtool: add support to set/get rx buf len via ethtool
  2021-09-24 17:47   ` Jakub Kicinski
@ 2021-09-29  2:21     ` huangguangbin (A)
  0 siblings, 0 replies; 12+ messages in thread
From: huangguangbin (A) @ 2021-09-29  2:21 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: davem, mkubecek, andrew, amitc, idosch, danieller,
	jesse.brandeburg, anthony.l.nguyen, jdike, richard, anton.ivanov,
	netanel, akiyano, gtzalik, saeedb, chris.snook, ulli.kroll,
	linus.walleij, jeroendb, csully, awogbemila, jdmason,
	rain.1986.08.12, zyjzyj2000, kys, haiyangz, mst, jasowang,
	doshir, pv-drivers, jwi, kgraul, hca, gor, johannes, netdev,
	lipeng321, chenhao288, linux-s390



On 2021/9/25 1:47, Jakub Kicinski wrote:
> On Fri, 24 Sep 2021 22:29:56 +0800 Guangbin Huang wrote:
>> @@ -621,9 +631,13 @@ struct ethtool_ops {
>>   				struct kernel_ethtool_coalesce *,
>>   				struct netlink_ext_ack *);
>>   	void	(*get_ringparam)(struct net_device *,
>> -				 struct ethtool_ringparam *);
>> +				 struct ethtool_ringparam *,
>> +				 struct ethtool_ringparam_ext *,
>> +				 struct netlink_ext_ack *);
>>   	int	(*set_ringparam)(struct net_device *,
>> -				 struct ethtool_ringparam *);
>> +				 struct ethtool_ringparam *,
>> +				 struct ethtool_ringparam_ext *,
>> +				 struct netlink_ext_ack *);
> 
> You need to make the driver changes together with this chunk.
> Otherwise the build will be broken between the two during bisection.
> .
> 
Ok, thanks.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH V2 net-next 3/6] ethtool: add support to set/get rx buf len via ethtool
  2021-09-24 23:14   ` Michal Kubecek
@ 2021-09-29  2:33     ` huangguangbin (A)
  0 siblings, 0 replies; 12+ messages in thread
From: huangguangbin (A) @ 2021-09-29  2:33 UTC (permalink / raw)
  To: Michal Kubecek
  Cc: davem, kuba, andrew, amitc, idosch, danieller, jesse.brandeburg,
	anthony.l.nguyen, jdike, richard, anton.ivanov, netanel, akiyano,
	saeedb, chris.snook, ulli.kroll, linus.walleij, jeroendb, csully,
	awogbemila, jdmason, rain.1986.08.12, zyjzyj2000, kys, haiyangz,
	mst, jasowang, doshir, pv-drivers, jwi, kgraul, hca, gor,
	johannes, netdev, lipeng321, chenhao288, linux-s390



On 2021/9/25 7:14, Michal Kubecek wrote:
> On Fri, Sep 24, 2021 at 10:29:56PM +0800, Guangbin Huang wrote:
>> From: Hao Chen <chenhao288@hisilicon.com>
>>
>> Add support to set rx buf len via ethtool -G parameter and get
>> rx buf len via ethtool -g parameter.
>>
>> Signed-off-by: Hao Chen <chenhao288@hisilicon.com>
>> Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
>> ---
>>   Documentation/networking/ethtool-netlink.rst |  2 ++
>>   include/linux/ethtool.h                      | 18 ++++++++++++++++--
>>   include/uapi/linux/ethtool.h                 |  8 ++++++++
>>   include/uapi/linux/ethtool_netlink.h         |  1 +
>>   net/ethtool/netlink.h                        |  2 +-
>>   net/ethtool/rings.c                          | 17 ++++++++++++++++-
>>   6 files changed, 44 insertions(+), 4 deletions(-)
>>
>> diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst
>> index a47b0255aaf9..9734b7c1e05d 100644
>> --- a/Documentation/networking/ethtool-netlink.rst
>> +++ b/Documentation/networking/ethtool-netlink.rst
>> @@ -841,6 +841,7 @@ Kernel response contents:
>>     ``ETHTOOL_A_RINGS_RX_MINI``           u32     size of RX mini ring
>>     ``ETHTOOL_A_RINGS_RX_JUMBO``          u32     size of RX jumbo ring
>>     ``ETHTOOL_A_RINGS_TX``                u32     size of TX ring
>> +  ``ETHTOOL_A_RINGS_RX_BUF_LEN``        u32     size of buffers on the ring
>>     ====================================  ======  ==========================
>>   
>>   
>> @@ -857,6 +858,7 @@ Request contents:
>>     ``ETHTOOL_A_RINGS_RX_MINI``           u32     size of RX mini ring
>>     ``ETHTOOL_A_RINGS_RX_JUMBO``          u32     size of RX jumbo ring
>>     ``ETHTOOL_A_RINGS_TX``                u32     size of TX ring
>> +  ``ETHTOOL_A_RINGS_RX_BUF_LEN``        u32     size of buffers on the ring
>>     ====================================  ======  ==========================
>>   
>>   Kernel checks that requested ring sizes do not exceed limits reported by
> 
> Would it make sense to let driver report also maximum supported value
> like it does for existing ring parameters (ring sizes)?
> 
> Michal
> 
We think it have no sense to report maximum supported value.
Rx buf len of hns3 driver only supports 2048 and 4096 at present, they are
discrete value and checked by driver.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-09-29  2:33 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-24 14:29 [PATCH V2 net-next 0/6] ethtool: add support to set/get tx copybreak buf size and rx buf len Guangbin Huang
2021-09-24 14:29 ` [PATCH V2 net-next 1/6] ethtool: add support to set/get tx copybreak buf size via ethtool Guangbin Huang
2021-09-24 23:05   ` Michal Kubecek
2021-09-29  2:19     ` huangguangbin (A)
2021-09-24 14:29 ` [PATCH V2 net-next 2/6] net: hns3: add support to set/get tx copybreak buf size via ethtool for hns3 driver Guangbin Huang
2021-09-24 14:29 ` [PATCH V2 net-next 3/6] ethtool: add support to set/get rx buf len via ethtool Guangbin Huang
2021-09-24 17:47   ` Jakub Kicinski
2021-09-29  2:21     ` huangguangbin (A)
2021-09-24 23:14   ` Michal Kubecek
2021-09-29  2:33     ` huangguangbin (A)
2021-09-24 14:29 ` [PATCH V2 net-next 5/6] net: hns3: add support to set/get rx buf len via ethtool for hns3 driver Guangbin Huang
2021-09-24 14:29 ` [PATCH V2 net-next 6/6] net: hns3: remove the way to set tx spare buf via module parameter Guangbin Huang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).