public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC 0/2]: Add minimum bandwidth support in IP tool.
@ 2014-03-05  7:33 Sucheta Chakraborty
  2014-03-05  7:33 ` [RFC 1/2] net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool Sucheta Chakraborty
  2014-03-05  7:33 ` [RFC 2/2] qlcnic: " Sucheta Chakraborty
  0 siblings, 2 replies; 7+ messages in thread
From: Sucheta Chakraborty @ 2014-03-05  7:33 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept-HSGLinuxNICDev

Today IP tool allows configuring only maximum bandwidth.
Likewise minimum bandwidth can also be configured for a VF. It puts
lower limit on the VF bandwidth. VF is guaranteed to have a bandwidth
of at least this value.

With this change, user can alter minimum bandwidth rate.

This change will also require change in IP tool. I am also sending that
patch separately.

The below patch series has 2 patches:
1st patch is a kernel patch that adds required support in kernel.
2nd patch adds support in qlcnic driver.

Please comment.

Thanks,
Sucheta.

Sucheta Chakraborty (2):
  net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool.
  qlcnic: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool.


 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c   |   1 +
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h  |   1 +
 .../net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c   | 102 +++++++++++++++++++--
 include/linux/if_link.h      |  2 ++
 include/linux/netdevice.h    |  5 +++++
 include/uapi/linux/if_link.h |  9 ++++++++-
 net/core/rtnetlink.c         | 29 +++++++++++++++++++++++++++++
 7 files changed, 138 insertions(+), 11 deletions(-)

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

* [RFC 1/2] net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool.
  2014-03-05  7:33 [RFC 0/2]: Add minimum bandwidth support in IP tool Sucheta Chakraborty
@ 2014-03-05  7:33 ` Sucheta Chakraborty
  2014-03-05  9:33   ` Michal Kubecek
  2014-03-09 17:23   ` Ben Hutchings
  2014-03-05  7:33 ` [RFC 2/2] qlcnic: " Sucheta Chakraborty
  1 sibling, 2 replies; 7+ messages in thread
From: Sucheta Chakraborty @ 2014-03-05  7:33 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept-HSGLinuxNICDev

o A new handler set_vf_rate for attr IFLA_VF_RATE has been introduced
  which takes 4 arguments:
  netdev, VF number, min_tx_rate, max_tx_rate

o min_tx_rate puts lower limit on the VF bandwidth. VF is guaranteed
  to have a bandwidth of at least this value.
  max_tx_rate puts cap on the VF bandwidth. VF can have a bandwidth
  of up to this value.

o Idea is to deprecate IFLA_VF_TX_RATE and ndo_set_vf_tx_rate in future.
  And to have consistent display of rate values to user.

o Usage example: -

  ./ip link set p4p1 vf 0 rate 900
  WARN: "rate" option will be deprecated. Use "min_tx_rate" and
  "max_tx_rate" instead.

  ./ip link show p4p1
  32: p4p1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode
  DEFAULT qlen 1000
    link/ether 00:0e:1e:08:b0:f0 brd ff:ff:ff:ff:ff:ff
    vf 0 MAC 3e:a0:ca:bd:ae:5a, tx rate 900 (Mbps)
    vf 1 MAC f6:c6:7c:3f:3d:6c
    vf 2 MAC 56:32:43:98:d7:71
    vf 3 MAC d6:be:c3:b5:85:ff
    vf 4 MAC ee:a9:9a:1e:19:14
    vf 5 MAC 4a:d0:4c:07:52:18
    vf 6 MAC 3a:76:44:93:62:f9
    vf 7 MAC 82:e9:e7:e3:15:1a

  ./ip link set p4p1 vf 0 max_tx_rate 300 min_tx_rate 200

  ./ip link show p4p1
  32: p4p1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode
  DEFAULT qlen 1000
    link/ether 00:0e:1e:08:b0:f0 brd ff:ff:ff:ff:ff:ff
    vf 0 MAC 3e:a0:ca:bd:ae:5a, max tx rate 300 (Mbps), min tx rate
  200 (Mbps)
    vf 1 MAC f6:c6:7c:3f:3d:6c
    vf 2 MAC 56:32:43:98:d7:71
    vf 3 MAC d6:be:c3:b5:85:ff
    vf 4 MAC ee:a9:9a:1e:19:14
    vf 5 MAC 4a:d0:4c:07:52:18
    vf 6 MAC 3a:76:44:93:62:f9
    vf 7 MAC 82:e9:e7:e3:15:1a

Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
---
 include/linux/if_link.h      |  2 ++
 include/linux/netdevice.h    |  5 +++++
 include/uapi/linux/if_link.h |  9 ++++++++-
 net/core/rtnetlink.c         | 30 ++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/include/linux/if_link.h b/include/linux/if_link.h
index a86784d..3fad5db 100644
--- a/include/linux/if_link.h
+++ b/include/linux/if_link.h
@@ -13,5 +13,7 @@ struct ifla_vf_info {
 	__u32 tx_rate;
 	__u32 spoofchk;
 	__u32 linkstate;
+	__u32 min_tx_rate;
+	__u32 max_tx_rate;
 };
 #endif /* _LINUX_IF_LINK_H */
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 1a86948..d2bbcfc 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -854,6 +854,8 @@ typedef u16 (*select_queue_fallback_t)(struct net_device *dev,
  * int (*ndo_set_vf_mac)(struct net_device *dev, int vf, u8* mac);
  * int (*ndo_set_vf_vlan)(struct net_device *dev, int vf, u16 vlan, u8 qos);
  * int (*ndo_set_vf_tx_rate)(struct net_device *dev, int vf, int rate);
+ * int (*ndo_set_vf_rate)(struct net_device *dev, int vf, int min_tx_rate,
+ *			  int max_tx_rate);
  * int (*ndo_set_vf_spoofchk)(struct net_device *dev, int vf, bool setting);
  * int (*ndo_get_vf_config)(struct net_device *dev,
  *			    int vf, struct ifla_vf_info *ivf);
@@ -1050,6 +1052,9 @@ struct net_device_ops {
 						   int queue, u16 vlan, u8 qos);
 	int			(*ndo_set_vf_tx_rate)(struct net_device *dev,
 						      int vf, int rate);
+	int			(*ndo_set_vf_rate)(struct net_device *dev,
+						   int vf, int min_tx_rate,
+						   int max_tx_rate);
 	int			(*ndo_set_vf_spoofchk)(struct net_device *dev,
 						       int vf, bool setting);
 	int			(*ndo_get_vf_config)(struct net_device *dev,
diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
index 16410b6..fce6437 100644
--- a/include/uapi/linux/if_link.h
+++ b/include/uapi/linux/if_link.h
@@ -398,7 +398,8 @@ enum {
 	IFLA_VF_UNSPEC,
 	IFLA_VF_MAC,		/* Hardware queue specific attributes */
 	IFLA_VF_VLAN,
-	IFLA_VF_TX_RATE,	/* TX Bandwidth Allocation */
+	IFLA_VF_TX_RATE,	/* Max TX Bandwidth Allocation */
+	IFLA_VF_RATE,		/* Min and Max TX Bandwidth Allocation */
 	IFLA_VF_SPOOFCHK,	/* Spoof Checking on/off switch */
 	IFLA_VF_LINK_STATE,	/* link state enable/disable/auto switch */
 	__IFLA_VF_MAX,
@@ -422,6 +423,12 @@ struct ifla_vf_tx_rate {
 	__u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
 };
 
+struct ifla_vf_rate {
+	__u32 vf;
+	__u32 min_tx_rate; /* Min Bandwidth in Mbps */
+	__u32 max_tx_rate; /* Max Bandwidth in Mbps */
+};
+
 struct ifla_vf_spoofchk {
 	__u32 vf;
 	__u32 setting;
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index fc122fd..220d9c3 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1027,6 +1027,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
 			struct ifla_vf_info ivi;
 			struct ifla_vf_mac vf_mac;
 			struct ifla_vf_vlan vf_vlan;
+			struct ifla_vf_rate vf_rate;
 			struct ifla_vf_tx_rate vf_tx_rate;
 			struct ifla_vf_spoofchk vf_spoofchk;
 			struct ifla_vf_link_state vf_linkstate;
@@ -1047,6 +1048,7 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
 				break;
 			vf_mac.vf =
 				vf_vlan.vf =
+				vf_rate.vf =
 				vf_tx_rate.vf =
 				vf_spoofchk.vf =
 				vf_linkstate.vf = ivi.vf;
@@ -1055,6 +1057,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
 			vf_vlan.vlan = ivi.vlan;
 			vf_vlan.qos = ivi.qos;
 			vf_tx_rate.rate = ivi.tx_rate;
+			vf_rate.min_tx_rate = ivi.min_tx_rate;
+			vf_rate.max_tx_rate = ivi.max_tx_rate;
 			vf_spoofchk.setting = ivi.spoofchk;
 			vf_linkstate.link_state = ivi.linkstate;
 			vf = nla_nest_start(skb, IFLA_VF_INFO);
@@ -1064,6 +1068,8 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
 			}
 			if (nla_put(skb, IFLA_VF_MAC, sizeof(vf_mac), &vf_mac) ||
 			    nla_put(skb, IFLA_VF_VLAN, sizeof(vf_vlan), &vf_vlan) ||
+			    nla_put(skb, IFLA_VF_RATE, sizeof(vf_rate),
+				    &vf_rate) ||
 			    nla_put(skb, IFLA_VF_TX_RATE, sizeof(vf_tx_rate),
 				    &vf_tx_rate) ||
 			    nla_put(skb, IFLA_VF_SPOOFCHK, sizeof(vf_spoofchk),
@@ -1328,6 +1334,30 @@ static int do_setvfinfo(struct net_device *dev, struct nlattr *attr)
 							      ivt->rate);
 			break;
 		}
+		case IFLA_VF_RATE: {
+			struct ifla_vf_rate *ivt;
+			struct ifla_vf_info ivf;
+			ivt = nla_data(vf);
+			err = -EOPNOTSUPP;
+			if ((!ivt->min_tx_rate || !ivt->max_tx_rate) &&
+			    ops->ndo_get_vf_config)
+				err = ops->ndo_get_vf_config(dev, ivt->vf,
+							     &ivf);
+			else
+				err = 0;
+			if (err)
+				break;
+			if (!ivt->min_tx_rate)
+				ivt->min_tx_rate = ivf.min_tx_rate;
+			if (!ivt->max_tx_rate)
+				ivt->max_tx_rate = ivf.max_tx_rate;
+			err = -EOPNOTSUPP;
+			if (ops->ndo_set_vf_rate)
+				err = ops->ndo_set_vf_rate(dev, ivt->vf,
+							   ivt->min_tx_rate,
+							   ivt->max_tx_rate);
+			break;
+		}
 		case IFLA_VF_SPOOFCHK: {
 			struct ifla_vf_spoofchk *ivs;
 			ivs = nla_data(vf);
-- 
1.8.1.4

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

* [RFC 2/2] qlcnic: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool.
  2014-03-05  7:33 [RFC 0/2]: Add minimum bandwidth support in IP tool Sucheta Chakraborty
  2014-03-05  7:33 ` [RFC 1/2] net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool Sucheta Chakraborty
@ 2014-03-05  7:33 ` Sucheta Chakraborty
  1 sibling, 0 replies; 7+ messages in thread
From: Sucheta Chakraborty @ 2014-03-05  7:33 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept-HSGLinuxNICDev

o ip command can be used to configure minimum and maximum Tx rate.

o "min_tx_rate" option has been added for minimum Tx rate. Hence, for
  consistent naming, "max_tx_rate" option has been introduced for maximum
  Tx rate. And plan is to deprecate "rate" option of ip tool.

Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c   |   1 +
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h  |   1 +
 .../net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c   | 102 +++++++++++++++++++--
 3 files changed, 94 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index a335472..58cc49f 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -485,6 +485,7 @@ static const struct net_device_ops qlcnic_netdev_ops = {
 #ifdef CONFIG_QLCNIC_SRIOV
 	.ndo_set_vf_mac		= qlcnic_sriov_set_vf_mac,
 	.ndo_set_vf_tx_rate	= qlcnic_sriov_set_vf_tx_rate,
+	.ndo_set_vf_rate	= qlcnic_sriov_set_vf_rate,
 	.ndo_get_vf_config	= qlcnic_sriov_get_vf_config,
 	.ndo_set_vf_vlan	= qlcnic_sriov_set_vf_vlan,
 	.ndo_set_vf_spoofchk	= qlcnic_sriov_set_vf_spoofchk,
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
index 396bd1f..7d53caa 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
@@ -232,6 +232,7 @@ void qlcnic_sriov_pf_reset(struct qlcnic_adapter *);
 int qlcnic_sriov_pf_reinit(struct qlcnic_adapter *);
 int qlcnic_sriov_set_vf_mac(struct net_device *, int, u8 *);
 int qlcnic_sriov_set_vf_tx_rate(struct net_device *, int, int);
+int qlcnic_sriov_set_vf_rate(struct net_device *, int, int, int);
 int qlcnic_sriov_get_vf_config(struct net_device *, int ,
 			       struct ifla_vf_info *);
 int qlcnic_sriov_set_vf_vlan(struct net_device *, int, u16, u8);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
index a28460c..69bf0b2 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
@@ -1821,28 +1821,32 @@ int qlcnic_sriov_set_vf_tx_rate(struct net_device *netdev, int vf, int tx_rate)
 	struct qlcnic_vf_info *vf_info;
 	struct qlcnic_info nic_info;
 	struct qlcnic_vport *vp;
-	u16 vpid;
+	u16 vpid, min_tx_rate;
 
-	if (!qlcnic_sriov_pf_check(adapter))
+	if (!qlcnic_sriov_pf_check(adapter) || qlcnic_84xx_check(adapter))
 		return -EOPNOTSUPP;
 
 	if (vf >= sriov->num_vfs)
 		return -EINVAL;
 
-	if (tx_rate >= 10000 || tx_rate < 100) {
+	vf_info = &sriov->vf_info[vf];
+	vp = vf_info->vp;
+	vpid = vp->handle;
+
+	min_tx_rate = vp->min_tx_bw * 100;
+	if (!min_tx_rate)
+		min_tx_rate = QLC_VF_MIN_TX_RATE;
+
+	if (tx_rate >= 10000 || tx_rate < min_tx_rate) {
 		netdev_err(netdev,
 			   "Invalid Tx rate, allowed range is [%d - %d]",
-			   QLC_VF_MIN_TX_RATE, QLC_VF_MAX_TX_RATE);
+			   min_tx_rate, QLC_VF_MAX_TX_RATE);
 		return -EINVAL;
 	}
 
 	if (tx_rate == 0)
 		tx_rate = 10000;
 
-	vf_info = &sriov->vf_info[vf];
-	vp = vf_info->vp;
-	vpid = vp->handle;
-
 	if (test_bit(QLC_BC_VF_STATE, &vf_info->state)) {
 		if (qlcnic_sriov_get_vf_vport_info(adapter, &nic_info, vpid))
 			return -EIO;
@@ -1952,13 +1956,24 @@ int qlcnic_sriov_get_vf_config(struct net_device *netdev,
 
 	vp = sriov->vf_info[vf].vp;
 	memcpy(&ivi->mac, vp->mac, ETH_ALEN);
+	ivi->tx_rate = 0;
 	ivi->vlan = qlcnic_sriov_get_vf_vlan(adapter, vp, vf);
 	ivi->qos = vp->qos;
 	ivi->spoofchk = vp->spoofchk;
 	if (vp->max_tx_bw == MAX_BW)
-		ivi->tx_rate = 0;
+		ivi->max_tx_rate = 0;
 	else
-		ivi->tx_rate = vp->max_tx_bw * 100;
+		ivi->max_tx_rate = vp->max_tx_bw * 100;
+
+	if (vp->min_tx_bw * 100 == QLC_VF_MIN_TX_RATE)
+		ivi->min_tx_rate = 0;
+	else
+		ivi->min_tx_rate = vp->min_tx_bw * 100;
+
+	if (!qlcnic_84xx_check(adapter) && !ivi->min_tx_rate) {
+		ivi->tx_rate = ivi->max_tx_rate;
+		ivi->max_tx_rate = 0;
+	}
 
 	ivi->vf = vf;
 	return 0;
@@ -1989,3 +2004,70 @@ int qlcnic_sriov_set_vf_spoofchk(struct net_device *netdev, int vf, bool chk)
 	vp->spoofchk = chk;
 	return 0;
 }
+
+int qlcnic_sriov_set_vf_rate(struct net_device *netdev, int vf,
+			     int min_tx_rate, int max_tx_rate)
+{
+	struct qlcnic_adapter *adapter = netdev_priv(netdev);
+	struct qlcnic_sriov *sriov = adapter->ahw->sriov;
+	struct qlcnic_vf_info *vf_info;
+	struct qlcnic_info nic_info;
+	struct qlcnic_vport *vp;
+	u16 vpid;
+
+	if (!qlcnic_sriov_pf_check(adapter))
+		return -EOPNOTSUPP;
+
+	if (vf >= sriov->num_vfs)
+		return -EINVAL;
+
+	vf_info = &sriov->vf_info[vf];
+	vp = vf_info->vp;
+	vpid = vp->handle;
+
+	if (!min_tx_rate)
+		min_tx_rate = QLC_VF_MIN_TX_RATE;
+
+	if (max_tx_rate &&
+	    (max_tx_rate >= 10000 || max_tx_rate < min_tx_rate)) {
+		netdev_err(netdev,
+			   "Invalid max Tx rate, allowed range is [%d - %d]",
+			   min_tx_rate, QLC_VF_MAX_TX_RATE);
+		return -EINVAL;
+	}
+
+	if (!max_tx_rate)
+		max_tx_rate = 10000;
+
+	if (min_tx_rate &&
+	    (min_tx_rate > max_tx_rate || min_tx_rate < QLC_VF_MIN_TX_RATE)) {
+		netdev_err(netdev,
+			   "Invalid min Tx rate, allowed range is [%d - %d]",
+			   QLC_VF_MIN_TX_RATE, max_tx_rate);
+		return -EINVAL;
+	}
+
+	if (test_bit(QLC_BC_VF_STATE, &vf_info->state)) {
+		if (qlcnic_sriov_get_vf_vport_info(adapter, &nic_info, vpid))
+			return -EIO;
+
+		nic_info.max_tx_bw = max_tx_rate / 100;
+		nic_info.min_tx_bw = min_tx_rate / 100;
+		nic_info.bit_offsets = BIT_0;
+
+		if (qlcnic_sriov_pf_set_vport_info(adapter, &nic_info, vpid))
+			return -EIO;
+	}
+
+	vp->max_tx_bw = max_tx_rate / 100;
+	netdev_info(netdev,
+		    "Setting Max Tx rate %d (Mbps), %d %% of PF bandwidth, for VF %d\n",
+		    max_tx_rate, vp->max_tx_bw, vf);
+
+	vp->min_tx_bw = min_tx_rate / 100;
+	netdev_info(netdev,
+		    "%s: Setting Min Tx rate %d (Mbps), %d %% of PF bandwidth, for VF %d\n",
+		    __func__, min_tx_rate, vp->min_tx_bw, vf);
+
+	return 0;
+}
-- 
1.8.1.4

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

* Re: [RFC 1/2] net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool.
  2014-03-05  7:33 ` [RFC 1/2] net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool Sucheta Chakraborty
@ 2014-03-05  9:33   ` Michal Kubecek
  2014-03-05  9:36     ` Sucheta Chakraborty
  2014-03-09 17:23   ` Ben Hutchings
  1 sibling, 1 reply; 7+ messages in thread
From: Michal Kubecek @ 2014-03-05  9:33 UTC (permalink / raw)
  To: Sucheta Chakraborty; +Cc: davem, netdev, Dept-HSGLinuxNICDev

On Wed, Mar 05, 2014 at 02:33:35AM -0500, Sucheta Chakraborty wrote:
> diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
> index 16410b6..fce6437 100644
> --- a/include/uapi/linux/if_link.h
> +++ b/include/uapi/linux/if_link.h
> @@ -398,7 +398,8 @@ enum {
>  	IFLA_VF_UNSPEC,
>  	IFLA_VF_MAC,		/* Hardware queue specific attributes */
>  	IFLA_VF_VLAN,
> -	IFLA_VF_TX_RATE,	/* TX Bandwidth Allocation */
> +	IFLA_VF_TX_RATE,	/* Max TX Bandwidth Allocation */
> +	IFLA_VF_RATE,		/* Min and Max TX Bandwidth Allocation */
>  	IFLA_VF_SPOOFCHK,	/* Spoof Checking on/off switch */
>  	IFLA_VF_LINK_STATE,	/* link state enable/disable/auto switch */
>  	__IFLA_VF_MAX,

This would change the values of IFLA_VF_SPOOFCHK and IFLA_VF_LINK_STATE,
making "old" (including current) iproute2 incompatible with future
kernels and vice versa.

                                                         Michal Kubecek

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

* RE: [RFC 1/2] net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool.
  2014-03-05  9:33   ` Michal Kubecek
@ 2014-03-05  9:36     ` Sucheta Chakraborty
  0 siblings, 0 replies; 7+ messages in thread
From: Sucheta Chakraborty @ 2014-03-05  9:36 UTC (permalink / raw)
  To: Michal Kubecek; +Cc: David Miller, netdev, Dept-HSG Linux NIC Dev

> -----Original Message-----
> From: Michal Kubecek [mailto:mkubecek@suse.cz]
> Sent: Wednesday, March 05, 2014 3:03 PM
> To: Sucheta Chakraborty
> Cc: David Miller; netdev; Dept-HSG Linux NIC Dev
> Subject: Re: [RFC 1/2] net: Add support to configure SR-IOV VF minimum
> and maximum Tx rate through ip tool.
> 
> On Wed, Mar 05, 2014 at 02:33:35AM -0500, Sucheta Chakraborty wrote:
> > diff --git a/include/uapi/linux/if_link.h
> > b/include/uapi/linux/if_link.h index 16410b6..fce6437 100644
> > --- a/include/uapi/linux/if_link.h
> > +++ b/include/uapi/linux/if_link.h
> > @@ -398,7 +398,8 @@ enum {
> >  	IFLA_VF_UNSPEC,
> >  	IFLA_VF_MAC,		/* Hardware queue specific attributes */
> >  	IFLA_VF_VLAN,
> > -	IFLA_VF_TX_RATE,	/* TX Bandwidth Allocation */
> > +	IFLA_VF_TX_RATE,	/* Max TX Bandwidth Allocation */
> > +	IFLA_VF_RATE,		/* Min and Max TX Bandwidth Allocation */
> >  	IFLA_VF_SPOOFCHK,	/* Spoof Checking on/off switch */
> >  	IFLA_VF_LINK_STATE,	/* link state enable/disable/auto switch
> */
> >  	__IFLA_VF_MAX,
> 
> This would change the values of IFLA_VF_SPOOFCHK and
> IFLA_VF_LINK_STATE, making "old" (including current) iproute2
> incompatible with future kernels and vice versa.
> 
>                                                          Michal Kubecek

Thanks Michal for pointing this out. I will move the new enum "IFLA_VF_RATE" to the end of the list.

- Sucheta.

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

* Re: [RFC 1/2] net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool.
  2014-03-05  7:33 ` [RFC 1/2] net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool Sucheta Chakraborty
  2014-03-05  9:33   ` Michal Kubecek
@ 2014-03-09 17:23   ` Ben Hutchings
  2014-03-11  6:08     ` Sucheta Chakraborty
  1 sibling, 1 reply; 7+ messages in thread
From: Ben Hutchings @ 2014-03-09 17:23 UTC (permalink / raw)
  To: Sucheta Chakraborty; +Cc: davem, netdev, Dept-HSGLinuxNICDev

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

On Wed, 2014-03-05 at 02:33 -0500, Sucheta Chakraborty wrote:
> o A new handler set_vf_rate for attr IFLA_VF_RATE has been introduced
>   which takes 4 arguments:
>   netdev, VF number, min_tx_rate, max_tx_rate
> 
> o min_tx_rate puts lower limit on the VF bandwidth. VF is guaranteed
>   to have a bandwidth of at least this value.
>   max_tx_rate puts cap on the VF bandwidth. VF can have a bandwidth
>   of up to this value.

Supposing I only want to set a minimum, how would I specify that there
is no maximum?

> o Idea is to deprecate IFLA_VF_TX_RATE and ndo_set_vf_tx_rate in future.
>   And to have consistent display of rate values to user.
[...]

You can't deprecate the userland interface, but the driver operation
should be replaced at the same time.

- The rtnetlink core should combine userland settings from
  IFLA_VF_TX_RATE and IFLA_VF_RATE.  If both are specified, I think
  IFLA_VF_RATE should override.
- If only IFLA_VF_TX_RATE is specified, the core should get the current
  minimum before calling ndo_set_vf_rate.
- Drivers that currently implement ndo_set_vf_tx_rate should be
  converted to implement ndo_set_vf_rate and reject attempts to set a
  minimum bandwidth greater than 0.

Ben.

-- 
Ben Hutchings
I say we take off; nuke the site from orbit.  It's the only way to be sure.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 811 bytes --]

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

* RE: [RFC 1/2] net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool.
  2014-03-09 17:23   ` Ben Hutchings
@ 2014-03-11  6:08     ` Sucheta Chakraborty
  0 siblings, 0 replies; 7+ messages in thread
From: Sucheta Chakraborty @ 2014-03-11  6:08 UTC (permalink / raw)
  To: Ben Hutchings; +Cc: David Miller, netdev, Dept-HSG Linux NIC Dev

> -----Original Message-----
> From: netdev-owner@vger.kernel.org [mailto:netdev-
> owner@vger.kernel.org] On Behalf Of Ben Hutchings
> Sent: Sunday, March 09, 2014 10:53 PM
> To: Sucheta Chakraborty
> Cc: David Miller; netdev; Dept-HSG Linux NIC Dev
> Subject: Re: [RFC 1/2] net: Add support to configure SR-IOV VF minimum
> and maximum Tx rate through ip tool.
> 
> On Wed, 2014-03-05 at 02:33 -0500, Sucheta Chakraborty wrote:
> > o A new handler set_vf_rate for attr IFLA_VF_RATE has been introduced
> >   which takes 4 arguments:
> >   netdev, VF number, min_tx_rate, max_tx_rate
> >
> > o min_tx_rate puts lower limit on the VF bandwidth. VF is guaranteed
> >   to have a bandwidth of at least this value.
> >   max_tx_rate puts cap on the VF bandwidth. VF can have a bandwidth
> >   of up to this value.
> 
> Supposing I only want to set a minimum, how would I specify that there
> is no maximum?
> 

Sucheta> The current implementation allows user to send only
min_tx_rate as well. In that case, max_tx_rate is read back from driver
and passed as it is. If user has not done any setting with respect to
max_tx_rate till now, the default max returned by driver will be used.

> > o Idea is to deprecate IFLA_VF_TX_RATE and ndo_set_vf_tx_rate in
> future.
> >   And to have consistent display of rate values to user.
> [...]
> 
> You can't deprecate the userland interface, but the driver operation
> should be replaced at the same time.
> 
> - The rtnetlink core should combine userland settings from
>   IFLA_VF_TX_RATE and IFLA_VF_RATE.  If both are specified, I think
>   IFLA_VF_RATE should override.
> - If only IFLA_VF_TX_RATE is specified, the core should get the current
>   minimum before calling ndo_set_vf_rate.
> - Drivers that currently implement ndo_set_vf_tx_rate should be
>   converted to implement ndo_set_vf_rate and reject attempts to set a
>   minimum bandwidth greater than 0.
> 

Sucheta> Ok. By minimum bandwidth 0, did you mean driver specified
default for minimum BW? So, drivers that currently implement
ndo_set_vf_tx_rate should call ndo_set_vf_rate instead, with default
minimum BW set for the driver.

> Ben.
> 
> --
> Ben Hutchings
> I say we take off; nuke the site from orbit.  It's the only way to be
> sure.

Thanks for your comments.

Regards,
Sucheta.

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

end of thread, other threads:[~2014-03-11  6:08 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-05  7:33 [RFC 0/2]: Add minimum bandwidth support in IP tool Sucheta Chakraborty
2014-03-05  7:33 ` [RFC 1/2] net: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool Sucheta Chakraborty
2014-03-05  9:33   ` Michal Kubecek
2014-03-05  9:36     ` Sucheta Chakraborty
2014-03-09 17:23   ` Ben Hutchings
2014-03-11  6:08     ` Sucheta Chakraborty
2014-03-05  7:33 ` [RFC 2/2] qlcnic: " Sucheta Chakraborty

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox