On Sat, 30 Aug 2025 16:08:50 +0800 Fan Gong wrote: > +static void hinic3_fillout_indir_tbl(struct net_device *netdev, u16 *indir) > +{ > + struct hinic3_nic_dev *nic_dev = netdev_priv(netdev); > + u16 i, num_qps; > + > + num_qps = nic_dev->q_params.num_qps; > + for (i = 0; i < L2NIC_RSS_INDIR_SIZE; i++) > + indir[i] = i % num_qps; ethtool_rxfh_indir_default() > +/* Get number of CPUs on same NUMA node of device. */ > +static unsigned int dev_num_cpus(struct device *dev) > +{ > + unsigned int i, num_cpus, num_node_cpus; > + int dev_node; > + > + dev_node = dev_to_node(dev); > + num_cpus = num_online_cpus(); > + num_node_cpus = 0; > + > + for (i = 0; i < num_cpus; i++) { > + if (cpu_to_node(i) == dev_node) > + num_node_cpus++; > + } > + > + return num_node_cpus ? : num_cpus; Please use netif_get_num_default_rss_queues(). If you think its heuristic should be improved -- fix it, but don't invent driver-local logic. > +static void decide_num_qps(struct net_device *netdev) > +{ > + struct hinic3_nic_dev *nic_dev = netdev_priv(netdev); > + unsigned int dev_cpus; > + > + dev_cpus = dev_num_cpus(&nic_dev->pdev->dev); > + nic_dev->q_params.num_qps = min(dev_cpus, nic_dev->max_qps);