Commit 0d43bf45 authored by Huazhong Tan's avatar Huazhong Tan Committed by David S. Miller

net: hns3: Modify hns3_get_max_available_channels

The current hns3_get_max_available_channels returns the total number
of queues for the device, which makes ethtool -L set the number of queues
per channel queues incorrectly, so hns3_get_max_available_channels should
return the maximum available number of queues per channel, depending on
the total number of queues allocated and the hardware configurations.
Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: default avatarYunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: default avatarPeng Li <lipeng321@huawei.com>
Signed-off-by: default avatarSalil Mehta <salil.mehta@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fe5eb043
...@@ -403,7 +403,7 @@ struct hnae3_ae_ops { ...@@ -403,7 +403,7 @@ struct hnae3_ae_ops {
void (*get_channels)(struct hnae3_handle *handle, void (*get_channels)(struct hnae3_handle *handle,
struct ethtool_channels *ch); struct ethtool_channels *ch);
void (*get_tqps_and_rss_info)(struct hnae3_handle *h, void (*get_tqps_and_rss_info)(struct hnae3_handle *h,
u16 *free_tqps, u16 *max_rss_size); u16 *alloc_tqps, u16 *max_rss_size);
int (*set_channels)(struct hnae3_handle *handle, u32 new_tqps_num); int (*set_channels)(struct hnae3_handle *handle, u32 new_tqps_num);
void (*get_flowctrl_adv)(struct hnae3_handle *handle, void (*get_flowctrl_adv)(struct hnae3_handle *handle,
u32 *flowctrl_adv); u32 *flowctrl_adv);
......
...@@ -307,12 +307,12 @@ static int hns3_nic_set_real_num_queue(struct net_device *netdev) ...@@ -307,12 +307,12 @@ static int hns3_nic_set_real_num_queue(struct net_device *netdev)
static u16 hns3_get_max_available_channels(struct hnae3_handle *h) static u16 hns3_get_max_available_channels(struct hnae3_handle *h)
{ {
u16 free_tqps, max_rss_size, max_tqps; u16 alloc_tqps, max_rss_size, rss_size;
h->ae_algo->ops->get_tqps_and_rss_info(h, &free_tqps, &max_rss_size); h->ae_algo->ops->get_tqps_and_rss_info(h, &alloc_tqps, &max_rss_size);
max_tqps = h->kinfo.num_tc * max_rss_size; rss_size = alloc_tqps / h->kinfo.num_tc;
return min_t(u16, max_tqps, (free_tqps + h->kinfo.num_tqps)); return min_t(u16, rss_size, max_rss_size);
} }
static int hns3_nic_net_up(struct net_device *netdev) static int hns3_nic_net_up(struct net_device *netdev)
...@@ -3164,12 +3164,14 @@ static void hns3_nic_set_priv_ops(struct net_device *netdev) ...@@ -3164,12 +3164,14 @@ static void hns3_nic_set_priv_ops(struct net_device *netdev)
static int hns3_client_init(struct hnae3_handle *handle) static int hns3_client_init(struct hnae3_handle *handle)
{ {
struct pci_dev *pdev = handle->pdev; struct pci_dev *pdev = handle->pdev;
u16 alloc_tqps, max_rss_size;
struct hns3_nic_priv *priv; struct hns3_nic_priv *priv;
struct net_device *netdev; struct net_device *netdev;
int ret; int ret;
netdev = alloc_etherdev_mq(sizeof(struct hns3_nic_priv), handle->ae_algo->ops->get_tqps_and_rss_info(handle, &alloc_tqps,
hns3_get_max_available_channels(handle)); &max_rss_size);
netdev = alloc_etherdev_mq(sizeof(struct hns3_nic_priv), alloc_tqps);
if (!netdev) if (!netdev)
return -ENOMEM; return -ENOMEM;
......
...@@ -5659,18 +5659,12 @@ static void hclge_get_channels(struct hnae3_handle *handle, ...@@ -5659,18 +5659,12 @@ static void hclge_get_channels(struct hnae3_handle *handle,
} }
static void hclge_get_tqps_and_rss_info(struct hnae3_handle *handle, static void hclge_get_tqps_and_rss_info(struct hnae3_handle *handle,
u16 *free_tqps, u16 *max_rss_size) u16 *alloc_tqps, u16 *max_rss_size)
{ {
struct hclge_vport *vport = hclge_get_vport(handle); struct hclge_vport *vport = hclge_get_vport(handle);
struct hclge_dev *hdev = vport->back; struct hclge_dev *hdev = vport->back;
u16 temp_tqps = 0;
int i;
for (i = 0; i < hdev->num_tqps; i++) { *alloc_tqps = vport->alloc_tqps;
if (!hdev->htqp[i].alloced)
temp_tqps++;
}
*free_tqps = temp_tqps;
*max_rss_size = hdev->rss_size_max; *max_rss_size = hdev->rss_size_max;
} }
......
...@@ -1975,11 +1975,11 @@ static void hclgevf_get_channels(struct hnae3_handle *handle, ...@@ -1975,11 +1975,11 @@ static void hclgevf_get_channels(struct hnae3_handle *handle,
} }
static void hclgevf_get_tqps_and_rss_info(struct hnae3_handle *handle, static void hclgevf_get_tqps_and_rss_info(struct hnae3_handle *handle,
u16 *free_tqps, u16 *max_rss_size) u16 *alloc_tqps, u16 *max_rss_size)
{ {
struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
*free_tqps = 0; *alloc_tqps = hdev->num_tqps;
*max_rss_size = hdev->rss_size_max; *max_rss_size = hdev->rss_size_max;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment