All of lore.kernel.org
 help / color / mirror / Atom feed
* [openeuler:OLK-6.6 2909/2909] net/oenetcls/oenetcls_flow.c:140:43: error: no member named 'rx_cpu_rmap' in 'struct net_device'
@ 2025-09-23  1:47 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-09-23  1:47 UTC (permalink / raw)
  To: kernel, Wang Liang; +Cc: oe-kbuild-all

Hi Wang,

First bad commit (maybe != root cause):

tree:   https://gitee.com/openeuler/kernel.git OLK-6.6
head:   a159deb279dfe156316d8c3957dc7f253686ff83
commit: 22d4075bf5ef29ba4b329f954ac28a7de1d69a65 [2909/2909] net/oenetcls: remove oenetcls trace hook
config: x86_64-randconfig-r123-20250923 (https://download.01.org/0day-ci/archive/20250923/202509230929.GGNlyoj3-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250923/202509230929.GGNlyoj3-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202509230929.GGNlyoj3-lkp@intel.com/

All errors (new ones prefixed by >>):

   net/oenetcls/oenetcls_flow.c:18:6: warning: no previous prototype for function 'is_oecls_config_netdev' [-Wmissing-prototypes]
      18 | bool is_oecls_config_netdev(const char *name)
         |      ^
   net/oenetcls/oenetcls_flow.c:18:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
      18 | bool is_oecls_config_netdev(const char *name)
         | ^
         | static 
>> net/oenetcls/oenetcls_flow.c:140:43: error: no member named 'rx_cpu_rmap' in 'struct net_device'
     140 |         if (!skb_rx_queue_recorded(skb) || !dev->rx_cpu_rmap ||
         |                                             ~~~  ^
>> net/oenetcls/oenetcls_flow.c:161:24: error: no member named 'ndo_rx_flow_steer' in 'struct net_device_ops'
     161 |         rc = dev->netdev_ops->ndo_rx_flow_steer(dev, skb, rxq_index, flow_id);
         |              ~~~~~~~~~~~~~~~  ^
   1 warning and 2 errors generated.


vim +140 net/oenetcls/oenetcls_flow.c

4bed6ba0e88f50 Wang Liang 2025-08-26   17  
4bed6ba0e88f50 Wang Liang 2025-08-26  @18  bool is_oecls_config_netdev(const char *name)
4bed6ba0e88f50 Wang Liang 2025-08-26   19  {
4bed6ba0e88f50 Wang Liang 2025-08-26   20  	struct oecls_netdev_info *netdev_info;
4bed6ba0e88f50 Wang Liang 2025-08-26   21  	int netdev_loop;
4bed6ba0e88f50 Wang Liang 2025-08-26   22  
4bed6ba0e88f50 Wang Liang 2025-08-26   23  	for_each_oecls_netdev(netdev_loop, netdev_info)
4bed6ba0e88f50 Wang Liang 2025-08-26   24  		if (strcmp(netdev_info->dev_name, name) == 0)
4bed6ba0e88f50 Wang Liang 2025-08-26   25  			return true;
4bed6ba0e88f50 Wang Liang 2025-08-26   26  
4bed6ba0e88f50 Wang Liang 2025-08-26   27  	return false;
4bed6ba0e88f50 Wang Liang 2025-08-26   28  }
4bed6ba0e88f50 Wang Liang 2025-08-26   29  
22d4075bf5ef29 Wang Liang 2025-09-12   30  static bool _oecls_timeout(struct net_device *dev, u16 rxq_index,
22d4075bf5ef29 Wang Liang 2025-09-12   31  			   u32 flow_id, u16 filter_id)
4bed6ba0e88f50 Wang Liang 2025-08-26   32  {
4bed6ba0e88f50 Wang Liang 2025-08-26   33  	struct netdev_rx_queue *rxqueue = dev->_rx + rxq_index;
4bed6ba0e88f50 Wang Liang 2025-08-26   34  	struct oecls_dev_flow_table *flow_table;
4bed6ba0e88f50 Wang Liang 2025-08-26   35  	struct oecls_dev_flow *rflow;
4bed6ba0e88f50 Wang Liang 2025-08-26   36  	bool expire = true;
4bed6ba0e88f50 Wang Liang 2025-08-26   37  	unsigned int cpu;
4bed6ba0e88f50 Wang Liang 2025-08-26   38  
4bed6ba0e88f50 Wang Liang 2025-08-26   39  	rcu_read_lock();
4bed6ba0e88f50 Wang Liang 2025-08-26   40  	flow_table = rcu_dereference(rxqueue->oecls_ftb);
4bed6ba0e88f50 Wang Liang 2025-08-26   41  	if (flow_table && flow_id <= flow_table->mask) {
4bed6ba0e88f50 Wang Liang 2025-08-26   42  		rflow = &flow_table->flows[flow_id];
4bed6ba0e88f50 Wang Liang 2025-08-26   43  		cpu = READ_ONCE(rflow->cpu);
4bed6ba0e88f50 Wang Liang 2025-08-26   44  		oecls_debug("dev:%s, rxq:%d, flow_id:%u, filter_id:%d/%d, cpu:%d\n", dev->name,
4bed6ba0e88f50 Wang Liang 2025-08-26   45  			    rxq_index, flow_id, filter_id, rflow->filter, cpu);
4bed6ba0e88f50 Wang Liang 2025-08-26   46  
4bed6ba0e88f50 Wang Liang 2025-08-26   47  		if (rflow->filter == filter_id && cpu < nr_cpu_ids) {
4bed6ba0e88f50 Wang Liang 2025-08-26   48  			if (time_before(jiffies, rflow->timeout + OECLS_TIMEOUT)) {
4bed6ba0e88f50 Wang Liang 2025-08-26   49  				expire = false;
4bed6ba0e88f50 Wang Liang 2025-08-26   50  			} else {
4bed6ba0e88f50 Wang Liang 2025-08-26   51  				rflow->isvalid = 0;
4bed6ba0e88f50 Wang Liang 2025-08-26   52  				WRITE_ONCE(rflow->cpu, OECLS_NO_CPU);
4bed6ba0e88f50 Wang Liang 2025-08-26   53  			}
4bed6ba0e88f50 Wang Liang 2025-08-26   54  		}
4bed6ba0e88f50 Wang Liang 2025-08-26   55  	}
4bed6ba0e88f50 Wang Liang 2025-08-26   56  	rcu_read_unlock();
4bed6ba0e88f50 Wang Liang 2025-08-26   57  	oecls_debug("%s, dev:%s, rxq:%d, flow_id:%u, filter_id:%d, expire:%d\n", __func__,
4bed6ba0e88f50 Wang Liang 2025-08-26   58  		    dev->name, rxq_index, flow_id, filter_id, expire);
22d4075bf5ef29 Wang Liang 2025-09-12   59  	return expire;
4bed6ba0e88f50 Wang Liang 2025-08-26   60  }
4bed6ba0e88f50 Wang Liang 2025-08-26   61  
22d4075bf5ef29 Wang Liang 2025-09-12   62  static void _oecls_flow_update(struct sock *sk)
4bed6ba0e88f50 Wang Liang 2025-08-26   63  {
4bed6ba0e88f50 Wang Liang 2025-08-26   64  	struct oecls_sock_flow_table *tb;
4bed6ba0e88f50 Wang Liang 2025-08-26   65  	unsigned int hash, index;
4bed6ba0e88f50 Wang Liang 2025-08-26   66  	u32 val;
4bed6ba0e88f50 Wang Liang 2025-08-26   67  	u32 cpu = raw_smp_processor_id();
4bed6ba0e88f50 Wang Liang 2025-08-26   68  
4bed6ba0e88f50 Wang Liang 2025-08-26   69  	if (sk->sk_state != TCP_ESTABLISHED)
4bed6ba0e88f50 Wang Liang 2025-08-26   70  		return;
4bed6ba0e88f50 Wang Liang 2025-08-26   71  
4bed6ba0e88f50 Wang Liang 2025-08-26   72  	if (check_appname(current->comm))
4bed6ba0e88f50 Wang Liang 2025-08-26   73  		return;
4bed6ba0e88f50 Wang Liang 2025-08-26   74  
4bed6ba0e88f50 Wang Liang 2025-08-26   75  	rcu_read_lock();
4bed6ba0e88f50 Wang Liang 2025-08-26   76  	tb = rcu_dereference(oecls_sock_flow_table);
4bed6ba0e88f50 Wang Liang 2025-08-26   77  	hash = READ_ONCE(sk->sk_rxhash);
4bed6ba0e88f50 Wang Liang 2025-08-26   78  	if (tb && hash) {
4bed6ba0e88f50 Wang Liang 2025-08-26   79  		index = hash & tb->mask;
4bed6ba0e88f50 Wang Liang 2025-08-26   80  		val = hash & ~oecls_cpu_mask;
4bed6ba0e88f50 Wang Liang 2025-08-26   81  		val |= cpu;
4bed6ba0e88f50 Wang Liang 2025-08-26   82  
4bed6ba0e88f50 Wang Liang 2025-08-26   83  		if (READ_ONCE(tb->ents[index]) != val) {
4bed6ba0e88f50 Wang Liang 2025-08-26   84  			WRITE_ONCE(tb->ents[index], val);
4bed6ba0e88f50 Wang Liang 2025-08-26   85  
4bed6ba0e88f50 Wang Liang 2025-08-26   86  			oecls_debug("[%s] sk:%p, hash:0x%x, index:0x%x, val:0x%x, cpu:%d\n",
4bed6ba0e88f50 Wang Liang 2025-08-26   87  				    current->comm, sk, hash, index, val, cpu);
4bed6ba0e88f50 Wang Liang 2025-08-26   88  		}
4bed6ba0e88f50 Wang Liang 2025-08-26   89  	}
4bed6ba0e88f50 Wang Liang 2025-08-26   90  	rcu_read_unlock();
4bed6ba0e88f50 Wang Liang 2025-08-26   91  }
4bed6ba0e88f50 Wang Liang 2025-08-26   92  
4bed6ba0e88f50 Wang Liang 2025-08-26   93  static int flow_get_queue_idx(struct net_device *dev, int nid, struct sk_buff *skb)
4bed6ba0e88f50 Wang Liang 2025-08-26   94  {
4bed6ba0e88f50 Wang Liang 2025-08-26   95  	struct oecls_netdev_info *netdev_info;
4bed6ba0e88f50 Wang Liang 2025-08-26   96  	int netdev_loop;
4bed6ba0e88f50 Wang Liang 2025-08-26   97  	u32 hash, index;
4bed6ba0e88f50 Wang Liang 2025-08-26   98  	struct oecls_numa_info *numa_info;
4bed6ba0e88f50 Wang Liang 2025-08-26   99  	struct oecls_numa_bound_dev_info *bound_dev = NULL;
4bed6ba0e88f50 Wang Liang 2025-08-26  100  	int rxq_id, rxq_num, i;
4bed6ba0e88f50 Wang Liang 2025-08-26  101  
4bed6ba0e88f50 Wang Liang 2025-08-26  102  	numa_info = get_oecls_numa_info(nid);
4bed6ba0e88f50 Wang Liang 2025-08-26  103  	if (!numa_info)
4bed6ba0e88f50 Wang Liang 2025-08-26  104  		return -1;
4bed6ba0e88f50 Wang Liang 2025-08-26  105  
4bed6ba0e88f50 Wang Liang 2025-08-26  106  	for_each_oecls_netdev(netdev_loop, netdev_info) {
4bed6ba0e88f50 Wang Liang 2025-08-26  107  		if (strcmp(netdev_info->dev_name, dev->name) == 0) {
4bed6ba0e88f50 Wang Liang 2025-08-26  108  			bound_dev = &numa_info->bound_dev[netdev_loop];
4bed6ba0e88f50 Wang Liang 2025-08-26  109  			break;
4bed6ba0e88f50 Wang Liang 2025-08-26  110  		}
4bed6ba0e88f50 Wang Liang 2025-08-26  111  	}
4bed6ba0e88f50 Wang Liang 2025-08-26  112  
4bed6ba0e88f50 Wang Liang 2025-08-26  113  	if (!bound_dev)
4bed6ba0e88f50 Wang Liang 2025-08-26  114  		return -1;
4bed6ba0e88f50 Wang Liang 2025-08-26  115  	rxq_num = bitmap_weight(bound_dev->bitmap_rxq, OECLS_MAX_RXQ_NUM_PER_DEV);
4bed6ba0e88f50 Wang Liang 2025-08-26  116  	if (rxq_num == 0)
4bed6ba0e88f50 Wang Liang 2025-08-26  117  		return -1;
4bed6ba0e88f50 Wang Liang 2025-08-26  118  
4bed6ba0e88f50 Wang Liang 2025-08-26  119  	hash = skb_get_hash(skb);
4bed6ba0e88f50 Wang Liang 2025-08-26  120  	index = hash % rxq_num;
4bed6ba0e88f50 Wang Liang 2025-08-26  121  
4bed6ba0e88f50 Wang Liang 2025-08-26  122  	i = 0;
4bed6ba0e88f50 Wang Liang 2025-08-26  123  	for_each_set_bit(rxq_id, bound_dev->bitmap_rxq, OECLS_MAX_RXQ_NUM_PER_DEV)
4bed6ba0e88f50 Wang Liang 2025-08-26  124  		if (index == i++)
4bed6ba0e88f50 Wang Liang 2025-08-26  125  			return rxq_id;
4bed6ba0e88f50 Wang Liang 2025-08-26  126  
4bed6ba0e88f50 Wang Liang 2025-08-26  127  	return -1;
4bed6ba0e88f50 Wang Liang 2025-08-26  128  }
4bed6ba0e88f50 Wang Liang 2025-08-26  129  
4bed6ba0e88f50 Wang Liang 2025-08-26  130  static void set_oecls_cpu(struct net_device *dev, struct sk_buff *skb,
4bed6ba0e88f50 Wang Liang 2025-08-26  131  			  struct oecls_dev_flow *old_rflow, int old_rxq_id, u16 next_cpu)
4bed6ba0e88f50 Wang Liang 2025-08-26  132  {
4bed6ba0e88f50 Wang Liang 2025-08-26  133  	struct netdev_rx_queue *rxqueue;
4bed6ba0e88f50 Wang Liang 2025-08-26  134  	struct oecls_dev_flow_table *dtb;
4bed6ba0e88f50 Wang Liang 2025-08-26  135  	struct oecls_dev_flow *rflow;
4bed6ba0e88f50 Wang Liang 2025-08-26  136  	u32 flow_id, hash;
4bed6ba0e88f50 Wang Liang 2025-08-26  137  	u16 rxq_index;
4bed6ba0e88f50 Wang Liang 2025-08-26  138  	int rc;
4bed6ba0e88f50 Wang Liang 2025-08-26  139  
4bed6ba0e88f50 Wang Liang 2025-08-26 @140  	if (!skb_rx_queue_recorded(skb) || !dev->rx_cpu_rmap ||
4bed6ba0e88f50 Wang Liang 2025-08-26  141  	    !(dev->features & NETIF_F_NTUPLE))
4bed6ba0e88f50 Wang Liang 2025-08-26  142  		return;
4bed6ba0e88f50 Wang Liang 2025-08-26  143  
4bed6ba0e88f50 Wang Liang 2025-08-26  144  	rxq_index = flow_get_queue_idx(dev, cpu_to_node(next_cpu), skb);
4bed6ba0e88f50 Wang Liang 2025-08-26  145  	if (rxq_index == skb_get_rx_queue(skb) || rxq_index < 0)
4bed6ba0e88f50 Wang Liang 2025-08-26  146  		return;
4bed6ba0e88f50 Wang Liang 2025-08-26  147  
4bed6ba0e88f50 Wang Liang 2025-08-26  148  	rxqueue = dev->_rx + rxq_index;
4bed6ba0e88f50 Wang Liang 2025-08-26  149  	dtb = rcu_dereference(rxqueue->oecls_ftb);
4bed6ba0e88f50 Wang Liang 2025-08-26  150  	if (!dtb)
4bed6ba0e88f50 Wang Liang 2025-08-26  151  		return;
4bed6ba0e88f50 Wang Liang 2025-08-26  152  
4bed6ba0e88f50 Wang Liang 2025-08-26  153  	hash = skb_get_hash(skb);
4bed6ba0e88f50 Wang Liang 2025-08-26  154  	flow_id = hash & dtb->mask;
4bed6ba0e88f50 Wang Liang 2025-08-26  155  	rflow = &dtb->flows[flow_id];
4bed6ba0e88f50 Wang Liang 2025-08-26  156  	if (rflow->isvalid && rflow->cpu == next_cpu) {
4bed6ba0e88f50 Wang Liang 2025-08-26  157  		rflow->timeout = jiffies;
4bed6ba0e88f50 Wang Liang 2025-08-26  158  		return;
4bed6ba0e88f50 Wang Liang 2025-08-26  159  	}
4bed6ba0e88f50 Wang Liang 2025-08-26  160  
4bed6ba0e88f50 Wang Liang 2025-08-26 @161  	rc = dev->netdev_ops->ndo_rx_flow_steer(dev, skb, rxq_index, flow_id);
4bed6ba0e88f50 Wang Liang 2025-08-26  162  	oecls_debug("skb:%p, rxq:%d, hash:0x%x, flow_id:%u, old_rxq_id:%d, next_cpu:%d, rc:%d\n",
4bed6ba0e88f50 Wang Liang 2025-08-26  163  		    skb, rxq_index, hash, flow_id, old_rxq_id, next_cpu, rc);
4bed6ba0e88f50 Wang Liang 2025-08-26  164  	if (rc < 0)
4bed6ba0e88f50 Wang Liang 2025-08-26  165  		return;
4bed6ba0e88f50 Wang Liang 2025-08-26  166  
4bed6ba0e88f50 Wang Liang 2025-08-26  167  	rflow->filter = rc;
4bed6ba0e88f50 Wang Liang 2025-08-26  168  	rflow->isvalid = 1;
4bed6ba0e88f50 Wang Liang 2025-08-26  169  	rflow->timeout = jiffies;
4bed6ba0e88f50 Wang Liang 2025-08-26  170  	if (old_rflow->filter == rflow->filter)
4bed6ba0e88f50 Wang Liang 2025-08-26  171  		old_rflow->filter = OECLS_NO_FILTER;
4bed6ba0e88f50 Wang Liang 2025-08-26  172  	rflow->cpu = next_cpu;
4bed6ba0e88f50 Wang Liang 2025-08-26  173  }
4bed6ba0e88f50 Wang Liang 2025-08-26  174  

:::::: The code at line 140 was first introduced by commit
:::::: 4bed6ba0e88f50484fd5fb06bd993727b981b718 net/oenetcls: introduce oenetcls for network optimization

:::::: TO: Wang Liang <wangliang74@huawei.com>
:::::: CC: Wang Liang <wangliang74@huawei.com>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-09-23  1:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-23  1:47 [openeuler:OLK-6.6 2909/2909] net/oenetcls/oenetcls_flow.c:140:43: error: no member named 'rx_cpu_rmap' in 'struct net_device' kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.