Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 678335a1 authored by Peng Li's avatar Peng Li Committed by David S. Miller
Browse files

net: hns3: set the max ring num when alloc netdev



HNS3 driver should alloc netdev with max support ring num, as
driver support change netdev count by ethtool -L.

Signed-off-by: default avatarPeng Li <lipeng321@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 814e0274
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -249,6 +249,16 @@ static int hns3_nic_set_real_num_queue(struct net_device *netdev)
	return 0;
}

static u16 hns3_get_max_available_channels(struct hnae3_handle *h)
{
	u16 free_tqps, max_rss_size, max_tqps;

	h->ae_algo->ops->get_tqps_and_rss_info(h, &free_tqps, &max_rss_size);
	max_tqps = h->kinfo.num_tc * max_rss_size;

	return min_t(u16, max_tqps, (free_tqps + h->kinfo.num_tqps));
}

static int hns3_nic_net_up(struct net_device *netdev)
{
	struct hns3_nic_priv *priv = netdev_priv(netdev);
@@ -3013,7 +3023,7 @@ static int hns3_client_init(struct hnae3_handle *handle)
	int ret;

	netdev = alloc_etherdev_mq(sizeof(struct hns3_nic_priv),
				   handle->kinfo.num_tqps);
				   hns3_get_max_available_channels(handle));
	if (!netdev)
		return -ENOMEM;

@@ -3336,17 +3346,6 @@ static int hns3_reset_notify(struct hnae3_handle *handle,
	return ret;
}

static u16 hns3_get_max_available_channels(struct net_device *netdev)
{
	struct hnae3_handle *h = hns3_get_handle(netdev);
	u16 free_tqps, max_rss_size, max_tqps;

	h->ae_algo->ops->get_tqps_and_rss_info(h, &free_tqps, &max_rss_size);
	max_tqps = h->kinfo.num_tc * max_rss_size;

	return min_t(u16, max_tqps, (free_tqps + h->kinfo.num_tqps));
}

static int hns3_modify_tqp_num(struct net_device *netdev, u16 new_tqp_num)
{
	struct hns3_nic_priv *priv = netdev_priv(netdev);
@@ -3397,12 +3396,12 @@ int hns3_set_channels(struct net_device *netdev,
	if (ch->rx_count || ch->tx_count)
		return -EINVAL;

	if (new_tqp_num > hns3_get_max_available_channels(netdev) ||
	if (new_tqp_num > hns3_get_max_available_channels(h) ||
	    new_tqp_num < kinfo->num_tc) {
		dev_err(&netdev->dev,
			"Change tqps fail, the tqp range is from %d to %d",
			kinfo->num_tc,
			hns3_get_max_available_channels(netdev));
			hns3_get_max_available_channels(h));
		return -EINVAL;
	}