* [patch net 0/2] net: hns: get and set RSS indirection table by using ethtool @ 2016-03-10 2:16 Kejian Yan 2016-03-10 2:16 ` [patch net 1/2] net: hns: fix return value of the function about rss Kejian Yan 2016-03-10 2:16 ` [patch net 2/2] net: hns: fixes a bug of RSS Kejian Yan 0 siblings, 2 replies; 7+ messages in thread From: Kejian Yan @ 2016-03-10 2:16 UTC (permalink / raw) To: linux-arm-kernel When we use ethtool to retrieves or configure the receive flow hash indirection table, ethtool needs to call .get_rxnfc to get the ring number so this patchset implements the .get_rxnfc and fixes the bug that we can not get the tatal table each time. Kejian Yan (2): net: hns: fix return value of the function about rss net: hns: fixes a bug of RSS drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 8 ++++--- drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 28 +++++++++++++++++++---- 3 files changed, 30 insertions(+), 8 deletions(-) -- 1.9.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [patch net 1/2] net: hns: fix return value of the function about rss 2016-03-10 2:16 [patch net 0/2] net: hns: get and set RSS indirection table by using ethtool Kejian Yan @ 2016-03-10 2:16 ` Kejian Yan 2016-03-10 8:11 ` Andy Shevchenko 2016-03-10 2:16 ` [patch net 2/2] net: hns: fixes a bug of RSS Kejian Yan 1 sibling, 1 reply; 7+ messages in thread From: Kejian Yan @ 2016-03-10 2:16 UTC (permalink / raw) To: linux-arm-kernel Both .get_rxfh and .get_rxfh are always return 0, it should return result from hardware when getting or setting rss. And the rss function should return the correct data type. Signed-off-by: Kejian Yan <yankejian@huawei.com> --- drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c index a0070d0..3b8f301 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c @@ -791,7 +791,7 @@ static int hns_ae_set_rss(struct hnae_handle *handle, const u32 *indir, /* set the RSS Hash Key if specififed by the user */ if (key) - hns_ppe_set_rss_key(ppe_cb, (int *)key); + hns_ppe_set_rss_key(ppe_cb, (u32 *)key); /* update the shadow RSS table with user specified qids */ memcpy(ppe_cb->rss_indir_table, indir, HNS_PPEV2_RSS_IND_TBL_SIZE); diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c index f302ef9..811ef35 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c @@ -27,7 +27,7 @@ void hns_ppe_set_tso_enable(struct hns_ppe_cb *ppe_cb, u32 value) void hns_ppe_set_rss_key(struct hns_ppe_cb *ppe_cb, const u32 rss_key[HNS_PPEV2_RSS_KEY_NUM]) { - int key_item = 0; + u32 key_item = 0; for (key_item = 0; key_item < HNS_PPEV2_RSS_KEY_NUM; key_item++) dsaf_write_dev(ppe_cb, PPEV2_RSS_KEY_REG + key_item * 0x4, diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c index 3df2284..ada8e04 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c @@ -1165,7 +1165,7 @@ hns_get_rss_key_size(struct net_device *netdev) if (AE_IS_VER1(priv->enet_ver)) { netdev_err(netdev, "RSS feature is not supported on this hardware\n"); - return -EOPNOTSUPP; + return (u32)-EOPNOTSUPP; } ops = priv->ae_handle->dev->ops; @@ -1184,7 +1184,7 @@ hns_get_rss_indir_size(struct net_device *netdev) if (AE_IS_VER1(priv->enet_ver)) { netdev_err(netdev, "RSS feature is not supported on this hardware\n"); - return -EOPNOTSUPP; + return (u32)-EOPNOTSUPP; } ops = priv->ae_handle->dev->ops; @@ -1213,7 +1213,7 @@ hns_get_rss(struct net_device *netdev, u32 *indir, u8 *key, u8 *hfunc) ret = ops->get_rss(priv->ae_handle, indir, key, hfunc); - return 0; + return ret; } static int @@ -1241,7 +1241,7 @@ hns_set_rss(struct net_device *netdev, const u32 *indir, const u8 *key, ret = ops->set_rss(priv->ae_handle, indir, key, hfunc); - return 0; + return ret; } static struct ethtool_ops hns_ethtool_ops = { -- 1.9.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [patch net 1/2] net: hns: fix return value of the function about rss 2016-03-10 2:16 ` [patch net 1/2] net: hns: fix return value of the function about rss Kejian Yan @ 2016-03-10 8:11 ` Andy Shevchenko 2016-03-10 12:04 ` Yankejian (Hackim Yim) 0 siblings, 1 reply; 7+ messages in thread From: Andy Shevchenko @ 2016-03-10 8:11 UTC (permalink / raw) To: linux-arm-kernel On Thu, 2016-03-10 at 10:16 +0800, Kejian Yan wrote: > Both .get_rxfh and .get_rxfh are always return 0, it should return > result > from hardware when getting or setting rss. And the rss function > should > return the correct data type. > @@ -1213,7 +1213,7 @@ hns_get_rss(struct net_device *netdev, u32 > *indir, u8 *key, u8 *hfunc) > ? > > ? ret = ops->get_rss(priv->ae_handle, indir, key, hfunc); > ? > - return 0; > + return ret; All three can be one line. > @@ -1241,7 +1241,7 @@ hns_set_rss(struct net_device *netdev, const > u32 *indir, const u8 *key, > ? > ? ret = ops->set_rss(priv->ae_handle, indir, key, hfunc); > ? > - return 0; > + return ret; Ditto. -- Andy Shevchenko <andriy.shevchenko@linux.intel.com> Intel Finland Oy ^ permalink raw reply [flat|nested] 7+ messages in thread
* [patch net 1/2] net: hns: fix return value of the function about rss 2016-03-10 8:11 ` Andy Shevchenko @ 2016-03-10 12:04 ` Yankejian (Hackim Yim) 0 siblings, 0 replies; 7+ messages in thread From: Yankejian (Hackim Yim) @ 2016-03-10 12:04 UTC (permalink / raw) To: linux-arm-kernel On 2016/3/10 16:11, Andy Shevchenko wrote: > On Thu, 2016-03-10 at 10:16 +0800, Kejian Yan wrote: >> Both .get_rxfh and .get_rxfh are always return 0, it should return >> result >> from hardware when getting or setting rss. And the rss function >> should >> return the correct data type. >> > @@ -1213,7 +1213,7 @@ hns_get_rss(struct net_device *netdev, u32 >> *indir, u8 *key, u8 *hfunc) >> >> >> ret = ops->get_rss(priv->ae_handle, indir, key, hfunc); >> >> - return 0; >> + return ret; > All three can be one line. ok, thanks! >> @@ -1241,7 +1241,7 @@ hns_set_rss(struct net_device *netdev, const >> u32 *indir, const u8 *key, >> >> ret = ops->set_rss(priv->ae_handle, indir, key, hfunc); >> >> - return 0; >> + return ret; > Ditto. > ok, thanks! ^ permalink raw reply [flat|nested] 7+ messages in thread
* [patch net 2/2] net: hns: fixes a bug of RSS 2016-03-10 2:16 [patch net 0/2] net: hns: get and set RSS indirection table by using ethtool Kejian Yan 2016-03-10 2:16 ` [patch net 1/2] net: hns: fix return value of the function about rss Kejian Yan @ 2016-03-10 2:16 ` Kejian Yan 2016-03-10 8:24 ` Andy Shevchenko 1 sibling, 1 reply; 7+ messages in thread From: Kejian Yan @ 2016-03-10 2:16 UTC (permalink / raw) To: linux-arm-kernel If trying to get receive flow hash indirection table by ethtool, it needs to call .get_rxnfc to get ring number first. So this patch implements the .get_rxnfc of ethtool. And the data type of rss_indir_table is u32, it has to be multiply by the width of data type when using memcpy. Signed-off-by: Kejian Yan <yankejian@huawei.com> --- drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 6 ++++-- drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c index 3b8f301..c733a5a 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c @@ -779,7 +779,8 @@ static int hns_ae_get_rss(struct hnae_handle *handle, u32 *indir, u8 *key, memcpy(key, ppe_cb->rss_key, HNS_PPEV2_RSS_KEY_SIZE); /* update the current hash->queue mappings from the shadow RSS table */ - memcpy(indir, ppe_cb->rss_indir_table, HNS_PPEV2_RSS_IND_TBL_SIZE); + memcpy(indir, ppe_cb->rss_indir_table, + HNS_PPEV2_RSS_IND_TBL_SIZE * sizeof(*indir)); return 0; } @@ -794,7 +795,8 @@ static int hns_ae_set_rss(struct hnae_handle *handle, const u32 *indir, hns_ppe_set_rss_key(ppe_cb, (u32 *)key); /* update the shadow RSS table with user specified qids */ - memcpy(ppe_cb->rss_indir_table, indir, HNS_PPEV2_RSS_IND_TBL_SIZE); + memcpy(ppe_cb->rss_indir_table, indir, + HNS_PPEV2_RSS_IND_TBL_SIZE * sizeof(*indir)); /* now update the hardware */ hns_ppe_set_indir_table(ppe_cb, ppe_cb->rss_indir_table); diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c index ada8e04..a070392 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c @@ -1244,6 +1244,25 @@ hns_set_rss(struct net_device *netdev, const u32 *indir, const u8 *key, return ret; } +static int hns_get_rxnfc(struct net_device *netdev, + struct ethtool_rxnfc *cmd, + u32 *rule_locs) +{ + struct hns_nic_priv *priv = netdev_priv(netdev); + int ret = 0; + + switch (cmd->cmd) { + case ETHTOOL_GRXRINGS: + cmd->data = priv->ae_handle->q_num; + break; + default: + ret = -EOPNOTSUPP; + break; + } + + return ret; +} + static struct ethtool_ops hns_ethtool_ops = { .get_drvinfo = hns_nic_get_drvinfo, .get_link = hns_nic_get_link, @@ -1267,6 +1286,7 @@ static struct ethtool_ops hns_ethtool_ops = { .get_rxfh_indir_size = hns_get_rss_indir_size, .get_rxfh = hns_get_rss, .set_rxfh = hns_set_rss, + .get_rxnfc = hns_get_rxnfc, }; void hns_ethtool_set_ops(struct net_device *ndev) -- 1.9.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [patch net 2/2] net: hns: fixes a bug of RSS 2016-03-10 2:16 ` [patch net 2/2] net: hns: fixes a bug of RSS Kejian Yan @ 2016-03-10 8:24 ` Andy Shevchenko 2016-03-10 13:03 ` Yankejian (Hackim Yim) 0 siblings, 1 reply; 7+ messages in thread From: Andy Shevchenko @ 2016-03-10 8:24 UTC (permalink / raw) To: linux-arm-kernel On Thu, 2016-03-10 at 10:16 +0800, Kejian Yan wrote: > If trying to get receive flow hash indirection table by ethtool, it > needs > to call .get_rxnfc to get ring number first. So this patch implements > the > .get_rxnfc of ethtool. And the data type of rss_indir_table is u32, > it has > to be multiply by the width of data type when using memcpy. +static int hns_get_rxnfc(struct net_device *netdev, > + ?struct ethtool_rxnfc *cmd, > + ?u32 *rule_locs) > +{ > + struct hns_nic_priv *priv = netdev_priv(netdev); > + int ret = 0; > + > + switch (cmd->cmd) { > + case ETHTOOL_GRXRINGS: > + cmd->data = priv->ae_handle->q_num; > + break; > + default: > + ret = -EOPNOTSUPP; > + break; > + } > + > + return ret; Redundant ret variable. switch (value) { case X: ?break; default: ?return -ERRNO; } return 0; > +} -- Andy Shevchenko <andriy.shevchenko@linux.intel.com> Intel Finland Oy ^ permalink raw reply [flat|nested] 7+ messages in thread
* [patch net 2/2] net: hns: fixes a bug of RSS 2016-03-10 8:24 ` Andy Shevchenko @ 2016-03-10 13:03 ` Yankejian (Hackim Yim) 0 siblings, 0 replies; 7+ messages in thread From: Yankejian (Hackim Yim) @ 2016-03-10 13:03 UTC (permalink / raw) To: linux-arm-kernel On 2016/3/10 16:24, Andy Shevchenko wrote: > On Thu, 2016-03-10 at 10:16 +0800, Kejian Yan wrote: >> If trying to get receive flow hash indirection table by ethtool, it >> needs >> to call .get_rxnfc to get ring number first. So this patch implements >> the >> .get_rxnfc of ethtool. And the data type of rss_indir_table is u32, >> it has >> to be multiply by the width of data type when using memcpy. > +static int hns_get_rxnfc(struct net_device *netdev, >> + struct ethtool_rxnfc *cmd, >> + u32 *rule_locs) >> +{ >> + struct hns_nic_priv *priv = netdev_priv(netdev); >> + int ret = 0; >> + >> + switch (cmd->cmd) { >> + case ETHTOOL_GRXRINGS: >> + cmd->data = priv->ae_handle->q_num; >> + break; >> + default: >> + ret = -EOPNOTSUPP; >> + break; >> + } >> + >> + return ret; > Redundant ret variable. > > switch (value) { > case X: > break; > default: > return -ERRNO; > } > > return 0; ok, thanks. i will fix it in next submit. >> +} ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-03-10 13:03 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-03-10 2:16 [patch net 0/2] net: hns: get and set RSS indirection table by using ethtool Kejian Yan 2016-03-10 2:16 ` [patch net 1/2] net: hns: fix return value of the function about rss Kejian Yan 2016-03-10 8:11 ` Andy Shevchenko 2016-03-10 12:04 ` Yankejian (Hackim Yim) 2016-03-10 2:16 ` [patch net 2/2] net: hns: fixes a bug of RSS Kejian Yan 2016-03-10 8:24 ` Andy Shevchenko 2016-03-10 13:03 ` Yankejian (Hackim Yim)
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).