lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 4 Jun 2024 05:27:54 +0800
From: kernel test robot <lkp@...el.com>
To: Yojana Mallik <y-mallik@...com>, schnelle@...ux.ibm.com,
	wsa+renesas@...g-engineering.com, diogo.ivo@...mens.com,
	rdunlap@...radead.org, horms@...nel.org, vigneshr@...com,
	rogerq@...com, danishanwar@...com, pabeni@...hat.com,
	kuba@...nel.org, edumazet@...gle.com, davem@...emloft.net
Cc: oe-kbuild-all@...ts.linux.dev, netdev@...r.kernel.org,
	linux-kernel@...r.kernel.org, srk@...com, rogerq@...nel.org
Subject: Re: [PATCH net-next v2 3/3] net: ethernet: ti: icve: Add support for
 multicast filtering

Hi Yojana,

kernel test robot noticed the following build warnings:

[auto build test WARNING on net-next/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Yojana-Mallik/net-ethernet-ti-RPMsg-based-shared-memory-ethernet-driver/20240531-144258
base:   net-next/main
patch link:    https://lore.kernel.org/r/20240531064006.1223417-4-y-mallik%40ti.com
patch subject: [PATCH net-next v2 3/3] net: ethernet: ti: icve: Add support for multicast filtering
config: powerpc64-randconfig-r112-20240604 (https://download.01.org/0day-ci/archive/20240604/202406040524.rKAgLczS-lkp@intel.com/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project d7d2d4f53fc79b4b58e8d8d08151b577c3699d4a)
reproduce: (https://download.01.org/0day-ci/archive/20240604/202406040524.rKAgLczS-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@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406040524.rKAgLczS-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/net/ethernet/ti/inter_core_virt_eth.c:291:32: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/net/ethernet/ti/inter_core_virt_eth.c:291:32: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const volatile [noderef] __iomem *s @@     got void * @@
   drivers/net/ethernet/ti/inter_core_virt_eth.c:291:32: sparse:     expected void const volatile [noderef] __iomem *s
   drivers/net/ethernet/ti/inter_core_virt_eth.c:291:32: sparse:     got void *
   drivers/net/ethernet/ti/inter_core_virt_eth.c:306:32: sparse: sparse: cast removes address space '__iomem' of expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:306:32: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const volatile [noderef] __iomem *s @@     got void * @@
   drivers/net/ethernet/ti/inter_core_virt_eth.c:306:32: sparse:     expected void const volatile [noderef] __iomem *s
   drivers/net/ethernet/ti/inter_core_virt_eth.c:306:32: sparse:     got void *
   drivers/net/ethernet/ti/inter_core_virt_eth.c:392:22: sparse: sparse: cast removes address space '__iomem' of expression
>> drivers/net/ethernet/ti/inter_core_virt_eth.c:393:49: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void volatile [noderef] __iomem *d @@     got void * @@
   drivers/net/ethernet/ti/inter_core_virt_eth.c:393:49: sparse:     expected void volatile [noderef] __iomem *d
   drivers/net/ethernet/ti/inter_core_virt_eth.c:393:49: sparse:     got void *
   drivers/net/ethernet/ti/inter_core_virt_eth.c:397:22: sparse: sparse: cast removes address space '__iomem' of expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:397:22: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void volatile [noderef] __iomem *d @@     got void * @@
   drivers/net/ethernet/ti/inter_core_virt_eth.c:397:22: sparse:     expected void volatile [noderef] __iomem *d
   drivers/net/ethernet/ti/inter_core_virt_eth.c:397:22: sparse:     got void *
>> drivers/net/ethernet/ti/inter_core_virt_eth.c:496:30: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct icve_shm_buf [noderef] __iomem *buf @@     got void * @@
   drivers/net/ethernet/ti/inter_core_virt_eth.c:496:30: sparse:     expected struct icve_shm_buf [noderef] __iomem *buf
   drivers/net/ethernet/ti/inter_core_virt_eth.c:496:30: sparse:     got void *
   drivers/net/ethernet/ti/inter_core_virt_eth.c:510:30: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct icve_shm_buf [noderef] __iomem *buf @@     got void * @@
   drivers/net/ethernet/ti/inter_core_virt_eth.c:510:30: sparse:     expected struct icve_shm_buf [noderef] __iomem *buf
   drivers/net/ethernet/ti/inter_core_virt_eth.c:510:30: sparse:     got void *
   drivers/net/ethernet/ti/inter_core_virt_eth.c: note: in included file (through include/linux/mmzone.h, include/linux/gfp.h, include/linux/xarray.h, ...):
   include/linux/page-flags.h:240:46: sparse: sparse: self-comparison always evaluates to false
   include/linux/page-flags.h:240:46: sparse: sparse: self-comparison always evaluates to false
>> drivers/net/ethernet/ti/inter_core_virt_eth.c:153:31: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:154:31: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:193:40: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:212:40: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:280:31: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:281:31: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:291:55: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:291:55: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:306:55: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:306:55: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:325:32: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:326:41: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:379:31: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:380:31: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:392:44: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:394:45: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:392:44: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:394:45: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:397:45: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:399:46: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:397:45: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:399:46: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:401:24: sparse: sparse: dereference of noderef expression
   drivers/net/ethernet/ti/inter_core_virt_eth.c:402:33: sparse: sparse: dereference of noderef expression

vim +/__iomem +291 drivers/net/ethernet/ti/inter_core_virt_eth.c

5655a9b008b088 Yojana Mallik    2024-05-31  145  
5655a9b008b088 Yojana Mallik    2024-05-31  146  static void icve_rx_timer(struct timer_list *timer)
5655a9b008b088 Yojana Mallik    2024-05-31  147  {
5655a9b008b088 Yojana Mallik    2024-05-31  148  	struct icve_port *port = from_timer(port, timer, rx_timer);
5655a9b008b088 Yojana Mallik    2024-05-31  149  	struct napi_struct *napi;
5655a9b008b088 Yojana Mallik    2024-05-31  150  	int num_pkts = 0;
5655a9b008b088 Yojana Mallik    2024-05-31  151  	u32 head, tail;
5655a9b008b088 Yojana Mallik    2024-05-31  152  
5655a9b008b088 Yojana Mallik    2024-05-31 @153  	head = port->rx_buffer->head->index;
5655a9b008b088 Yojana Mallik    2024-05-31  154  	tail = port->rx_buffer->tail->index;
5655a9b008b088 Yojana Mallik    2024-05-31  155  
5655a9b008b088 Yojana Mallik    2024-05-31  156  	num_pkts = tail - head;
5655a9b008b088 Yojana Mallik    2024-05-31  157  	num_pkts = num_pkts >= 0 ? num_pkts :
5655a9b008b088 Yojana Mallik    2024-05-31  158  				   (num_pkts + port->icve_rx_max_buffers);
5655a9b008b088 Yojana Mallik    2024-05-31  159  
5655a9b008b088 Yojana Mallik    2024-05-31  160  	napi = &port->rx_napi;
5655a9b008b088 Yojana Mallik    2024-05-31  161  	if (num_pkts && likely(napi_schedule_prep(napi)))
5655a9b008b088 Yojana Mallik    2024-05-31  162  		__napi_schedule(napi);
5655a9b008b088 Yojana Mallik    2024-05-31  163  	else
5655a9b008b088 Yojana Mallik    2024-05-31  164  		mod_timer(&port->rx_timer, RX_POLL_JIFFIES);
5655a9b008b088 Yojana Mallik    2024-05-31  165  }
5655a9b008b088 Yojana Mallik    2024-05-31  166  
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  167  static int icve_rpmsg_cb(struct rpmsg_device *rpdev, void *data, int len,
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  168  			 void *priv, u32 src)
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  169  {
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  170  	struct icve_common *common = dev_get_drvdata(&rpdev->dev);
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  171  	struct message *msg = (struct message *)data;
5655a9b008b088 Yojana Mallik    2024-05-31  172  	struct icve_port *port = common->port;
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  173  	u32 msg_type = msg->msg_hdr.msg_type;
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  174  	u32 rpmsg_type;
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  175  
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  176  	switch (msg_type) {
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  177  	case ICVE_REQUEST_MSG:
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  178  		rpmsg_type = msg->req_msg.type;
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  179  		dev_dbg(common->dev, "Msg type = %d; RPMsg type = %d\n",
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  180  			msg_type, rpmsg_type);
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  181  		break;
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  182  	case ICVE_RESPONSE_MSG:
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  183  		rpmsg_type = msg->resp_msg.type;
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  184  		dev_dbg(common->dev, "Msg type = %d; RPMsg type = %d\n",
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  185  			msg_type, rpmsg_type);
5655a9b008b088 Yojana Mallik    2024-05-31  186  		switch (rpmsg_type) {
5655a9b008b088 Yojana Mallik    2024-05-31  187  		case ICVE_RESP_SHM_INFO:
5655a9b008b088 Yojana Mallik    2024-05-31  188  			/* Retrieve Tx and Rx shared memory info from msg */
5655a9b008b088 Yojana Mallik    2024-05-31  189  			port->tx_buffer->head =
5655a9b008b088 Yojana Mallik    2024-05-31  190  				ioremap(msg->resp_msg.shm_info.shm_info_tx.base_addr,
5655a9b008b088 Yojana Mallik    2024-05-31  191  					sizeof(*port->tx_buffer->head));
5655a9b008b088 Yojana Mallik    2024-05-31  192  
5655a9b008b088 Yojana Mallik    2024-05-31  193  			port->tx_buffer->buf->base_addr =
5655a9b008b088 Yojana Mallik    2024-05-31  194  				ioremap((msg->resp_msg.shm_info.shm_info_tx.base_addr +
5655a9b008b088 Yojana Mallik    2024-05-31  195  					sizeof(*port->tx_buffer->head)),
5655a9b008b088 Yojana Mallik    2024-05-31  196  					(msg->resp_msg.shm_info.shm_info_tx.num_pkt_bufs *
5655a9b008b088 Yojana Mallik    2024-05-31  197  					 msg->resp_msg.shm_info.shm_info_tx.buff_slot_size));
5655a9b008b088 Yojana Mallik    2024-05-31  198  
5655a9b008b088 Yojana Mallik    2024-05-31  199  			port->tx_buffer->tail =
5655a9b008b088 Yojana Mallik    2024-05-31  200  				ioremap(msg->resp_msg.shm_info.shm_info_tx.base_addr +
5655a9b008b088 Yojana Mallik    2024-05-31  201  					sizeof(*port->tx_buffer->head) +
5655a9b008b088 Yojana Mallik    2024-05-31  202  					(msg->resp_msg.shm_info.shm_info_tx.num_pkt_bufs *
5655a9b008b088 Yojana Mallik    2024-05-31  203  					msg->resp_msg.shm_info.shm_info_tx.buff_slot_size),
5655a9b008b088 Yojana Mallik    2024-05-31  204  					sizeof(*port->tx_buffer->tail));
5655a9b008b088 Yojana Mallik    2024-05-31  205  
5655a9b008b088 Yojana Mallik    2024-05-31  206  			port->icve_tx_max_buffers = msg->resp_msg.shm_info.shm_info_tx.num_pkt_bufs;
5655a9b008b088 Yojana Mallik    2024-05-31  207  
5655a9b008b088 Yojana Mallik    2024-05-31  208  			port->rx_buffer->head =
5655a9b008b088 Yojana Mallik    2024-05-31  209  				ioremap(msg->resp_msg.shm_info.shm_info_rx.base_addr,
5655a9b008b088 Yojana Mallik    2024-05-31  210  					sizeof(*port->rx_buffer->head));
5655a9b008b088 Yojana Mallik    2024-05-31  211  
5655a9b008b088 Yojana Mallik    2024-05-31  212  			port->rx_buffer->buf->base_addr =
5655a9b008b088 Yojana Mallik    2024-05-31  213  				ioremap(msg->resp_msg.shm_info.shm_info_rx.base_addr +
5655a9b008b088 Yojana Mallik    2024-05-31  214  					sizeof(*port->rx_buffer->head),
5655a9b008b088 Yojana Mallik    2024-05-31  215  					(msg->resp_msg.shm_info.shm_info_rx.num_pkt_bufs *
5655a9b008b088 Yojana Mallik    2024-05-31  216  					 msg->resp_msg.shm_info.shm_info_rx.buff_slot_size));
5655a9b008b088 Yojana Mallik    2024-05-31  217  
5655a9b008b088 Yojana Mallik    2024-05-31  218  			port->rx_buffer->tail =
5655a9b008b088 Yojana Mallik    2024-05-31  219  				ioremap(msg->resp_msg.shm_info.shm_info_rx.base_addr +
5655a9b008b088 Yojana Mallik    2024-05-31  220  					sizeof(*port->rx_buffer->head) +
5655a9b008b088 Yojana Mallik    2024-05-31  221  					(msg->resp_msg.shm_info.shm_info_rx.num_pkt_bufs *
5655a9b008b088 Yojana Mallik    2024-05-31  222  					msg->resp_msg.shm_info.shm_info_rx.buff_slot_size),
5655a9b008b088 Yojana Mallik    2024-05-31  223  					sizeof(*port->rx_buffer->tail));
5655a9b008b088 Yojana Mallik    2024-05-31  224  
5655a9b008b088 Yojana Mallik    2024-05-31  225  			port->icve_rx_max_buffers =
5655a9b008b088 Yojana Mallik    2024-05-31  226  				msg->resp_msg.shm_info.shm_info_rx.num_pkt_bufs;
5655a9b008b088 Yojana Mallik    2024-05-31  227  
5655a9b008b088 Yojana Mallik    2024-05-31  228  			mutex_lock(&common->state_lock);
5655a9b008b088 Yojana Mallik    2024-05-31  229  			common->state = ICVE_STATE_READY;
5655a9b008b088 Yojana Mallik    2024-05-31  230  			mutex_unlock(&common->state_lock);
5655a9b008b088 Yojana Mallik    2024-05-31  231  
5655a9b008b088 Yojana Mallik    2024-05-31  232  			mod_delayed_work(system_wq,
5655a9b008b088 Yojana Mallik    2024-05-31  233  					 &common->state_work,
5655a9b008b088 Yojana Mallik    2024-05-31  234  					 STATE_MACHINE_TIME);
5655a9b008b088 Yojana Mallik    2024-05-31  235  
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  236  			break;
5655a9b008b088 Yojana Mallik    2024-05-31  237  		case ICVE_RESP_SET_MAC_ADDR:
5655a9b008b088 Yojana Mallik    2024-05-31  238  			break;
9ebbebae44242d Yojana Mallik    2024-05-31  239  		case ICVE_RESP_ADD_MC_ADDR:
9ebbebae44242d Yojana Mallik    2024-05-31  240  		case ICVE_RESP_DEL_MC_ADDR:
9ebbebae44242d Yojana Mallik    2024-05-31  241  			complete(&common->sync_msg);
9ebbebae44242d Yojana Mallik    2024-05-31  242  			break;
5655a9b008b088 Yojana Mallik    2024-05-31  243  		}
5655a9b008b088 Yojana Mallik    2024-05-31  244  
5655a9b008b088 Yojana Mallik    2024-05-31  245  		break;
5655a9b008b088 Yojana Mallik    2024-05-31  246  
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  247  	case ICVE_NOTIFY_MSG:
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  248  		rpmsg_type = msg->notify_msg.type;
5655a9b008b088 Yojana Mallik    2024-05-31  249  		switch (rpmsg_type) {
5655a9b008b088 Yojana Mallik    2024-05-31  250  		case ICVE_NOTIFY_REMOTE_READY:
5655a9b008b088 Yojana Mallik    2024-05-31  251  			mutex_lock(&common->state_lock);
5655a9b008b088 Yojana Mallik    2024-05-31  252  			common->state = ICVE_STATE_RUNNING;
5655a9b008b088 Yojana Mallik    2024-05-31  253  			mutex_unlock(&common->state_lock);
5655a9b008b088 Yojana Mallik    2024-05-31  254  
5655a9b008b088 Yojana Mallik    2024-05-31  255  			mod_delayed_work(system_wq,
5655a9b008b088 Yojana Mallik    2024-05-31  256  					 &common->state_work,
5655a9b008b088 Yojana Mallik    2024-05-31  257  					 STATE_MACHINE_TIME);
5655a9b008b088 Yojana Mallik    2024-05-31  258  			break;
5655a9b008b088 Yojana Mallik    2024-05-31  259  		case ICVE_NOTIFY_PORT_UP:
5655a9b008b088 Yojana Mallik    2024-05-31  260  		case ICVE_NOTIFY_PORT_DOWN:
5655a9b008b088 Yojana Mallik    2024-05-31  261  			break;
5655a9b008b088 Yojana Mallik    2024-05-31  262  		}
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  263  		break;
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  264  	default:
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  265  		dev_err(common->dev, "Invalid msg type\n");
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  266  		break;
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  267  	}
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  268  	return 0;
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  269  }
c7f4ad97418d24 Ravi Gunasekaran 2024-05-31  270  
5655a9b008b088 Yojana Mallik    2024-05-31  271  static int icve_rx_packets(struct napi_struct *napi, int budget)
5655a9b008b088 Yojana Mallik    2024-05-31  272  {
5655a9b008b088 Yojana Mallik    2024-05-31  273  	struct icve_port *port = container_of(napi, struct icve_port, rx_napi);
5655a9b008b088 Yojana Mallik    2024-05-31  274  	u32 count, process_pkts;
5655a9b008b088 Yojana Mallik    2024-05-31  275  	struct sk_buff *skb;
5655a9b008b088 Yojana Mallik    2024-05-31  276  	u32 head, tail;
5655a9b008b088 Yojana Mallik    2024-05-31  277  	int num_pkts;
5655a9b008b088 Yojana Mallik    2024-05-31  278  	u32 pkt_len;
5655a9b008b088 Yojana Mallik    2024-05-31  279  
5655a9b008b088 Yojana Mallik    2024-05-31  280  	head = port->rx_buffer->head->index;
5655a9b008b088 Yojana Mallik    2024-05-31  281  	tail = port->rx_buffer->tail->index;
5655a9b008b088 Yojana Mallik    2024-05-31  282  
5655a9b008b088 Yojana Mallik    2024-05-31  283  	num_pkts = head - tail;
5655a9b008b088 Yojana Mallik    2024-05-31  284  
5655a9b008b088 Yojana Mallik    2024-05-31  285  	num_pkts = num_pkts >= 0 ? num_pkts :
5655a9b008b088 Yojana Mallik    2024-05-31  286  				   (num_pkts + port->icve_rx_max_buffers);
5655a9b008b088 Yojana Mallik    2024-05-31  287  	process_pkts = min(num_pkts, budget);
5655a9b008b088 Yojana Mallik    2024-05-31  288  	count = 0;
5655a9b008b088 Yojana Mallik    2024-05-31  289  	while (count < process_pkts) {
5655a9b008b088 Yojana Mallik    2024-05-31  290  		memcpy_fromio((void *)&pkt_len,
5655a9b008b088 Yojana Mallik    2024-05-31 @291  			      (void *)(port->rx_buffer->buf->base_addr +
5655a9b008b088 Yojana Mallik    2024-05-31  292  			      MAGIC_NUM_SIZE_TYPE +
5655a9b008b088 Yojana Mallik    2024-05-31  293  			      (((tail + count) % port->icve_rx_max_buffers) *
5655a9b008b088 Yojana Mallik    2024-05-31  294  			      ICVE_BUFFER_SIZE)),
5655a9b008b088 Yojana Mallik    2024-05-31  295  			      PKT_LEN_SIZE_TYPE);
5655a9b008b088 Yojana Mallik    2024-05-31  296  		/* Start building the skb */
5655a9b008b088 Yojana Mallik    2024-05-31  297  		skb = napi_alloc_skb(napi, pkt_len);
5655a9b008b088 Yojana Mallik    2024-05-31  298  		if (!skb) {
5655a9b008b088 Yojana Mallik    2024-05-31  299  			port->ndev->stats.rx_dropped++;
5655a9b008b088 Yojana Mallik    2024-05-31  300  			goto rx_dropped;
5655a9b008b088 Yojana Mallik    2024-05-31  301  		}
5655a9b008b088 Yojana Mallik    2024-05-31  302  
5655a9b008b088 Yojana Mallik    2024-05-31  303  		skb->dev = port->ndev;
5655a9b008b088 Yojana Mallik    2024-05-31  304  		skb_put(skb, pkt_len);
5655a9b008b088 Yojana Mallik    2024-05-31  305  		memcpy_fromio((void *)skb->data,
5655a9b008b088 Yojana Mallik    2024-05-31  306  			      (void *)(port->rx_buffer->buf->base_addr +
5655a9b008b088 Yojana Mallik    2024-05-31  307  			      PKT_LEN_SIZE_TYPE + MAGIC_NUM_SIZE_TYPE +
5655a9b008b088 Yojana Mallik    2024-05-31  308  			      (((tail + count) % port->icve_rx_max_buffers) *
5655a9b008b088 Yojana Mallik    2024-05-31  309  			      ICVE_BUFFER_SIZE)),
5655a9b008b088 Yojana Mallik    2024-05-31  310  			      pkt_len);
5655a9b008b088 Yojana Mallik    2024-05-31  311  
5655a9b008b088 Yojana Mallik    2024-05-31  312  		skb->protocol = eth_type_trans(skb, port->ndev);
5655a9b008b088 Yojana Mallik    2024-05-31  313  
5655a9b008b088 Yojana Mallik    2024-05-31  314  		/* Push skb into network stack */
5655a9b008b088 Yojana Mallik    2024-05-31  315  		napi_gro_receive(napi, skb);
5655a9b008b088 Yojana Mallik    2024-05-31  316  
5655a9b008b088 Yojana Mallik    2024-05-31  317  		count++;
5655a9b008b088 Yojana Mallik    2024-05-31  318  		port->ndev->stats.rx_packets++;
5655a9b008b088 Yojana Mallik    2024-05-31  319  		port->ndev->stats.rx_bytes += skb->len;
5655a9b008b088 Yojana Mallik    2024-05-31  320  	}
5655a9b008b088 Yojana Mallik    2024-05-31  321  
5655a9b008b088 Yojana Mallik    2024-05-31  322  rx_dropped:
5655a9b008b088 Yojana Mallik    2024-05-31  323  
5655a9b008b088 Yojana Mallik    2024-05-31  324  	if (num_pkts) {
5655a9b008b088 Yojana Mallik    2024-05-31  325  		port->rx_buffer->tail->index =
5655a9b008b088 Yojana Mallik    2024-05-31  326  			(port->rx_buffer->tail->index + count) %
5655a9b008b088 Yojana Mallik    2024-05-31  327  			port->icve_rx_max_buffers;
5655a9b008b088 Yojana Mallik    2024-05-31  328  
5655a9b008b088 Yojana Mallik    2024-05-31  329  		if (num_pkts < budget && napi_complete_done(napi, count))
5655a9b008b088 Yojana Mallik    2024-05-31  330  			mod_timer(&port->rx_timer, RX_POLL_TIMEOUT);
5655a9b008b088 Yojana Mallik    2024-05-31  331  	}
5655a9b008b088 Yojana Mallik    2024-05-31  332  
5655a9b008b088 Yojana Mallik    2024-05-31  333  	return count;
5655a9b008b088 Yojana Mallik    2024-05-31  334  }
5655a9b008b088 Yojana Mallik    2024-05-31  335  
5655a9b008b088 Yojana Mallik    2024-05-31  336  static int icve_ndo_open(struct net_device *ndev)
5655a9b008b088 Yojana Mallik    2024-05-31  337  {
5655a9b008b088 Yojana Mallik    2024-05-31  338  	struct icve_common *common = icve_ndev_to_common(ndev);
5655a9b008b088 Yojana Mallik    2024-05-31  339  
5655a9b008b088 Yojana Mallik    2024-05-31  340  	mutex_lock(&common->state_lock);
5655a9b008b088 Yojana Mallik    2024-05-31  341  	common->state = ICVE_STATE_OPEN;
5655a9b008b088 Yojana Mallik    2024-05-31  342  	mutex_unlock(&common->state_lock);
5655a9b008b088 Yojana Mallik    2024-05-31  343  	mod_delayed_work(system_wq, &common->state_work, msecs_to_jiffies(100));
5655a9b008b088 Yojana Mallik    2024-05-31  344  
5655a9b008b088 Yojana Mallik    2024-05-31  345  	return 0;
5655a9b008b088 Yojana Mallik    2024-05-31  346  }
5655a9b008b088 Yojana Mallik    2024-05-31  347  
5655a9b008b088 Yojana Mallik    2024-05-31  348  static int icve_ndo_stop(struct net_device *ndev)
5655a9b008b088 Yojana Mallik    2024-05-31  349  {
5655a9b008b088 Yojana Mallik    2024-05-31  350  	struct icve_common *common = icve_ndev_to_common(ndev);
5655a9b008b088 Yojana Mallik    2024-05-31  351  	struct icve_port *port = icve_ndev_to_port(ndev);
5655a9b008b088 Yojana Mallik    2024-05-31  352  
5655a9b008b088 Yojana Mallik    2024-05-31  353  	mutex_lock(&common->state_lock);
5655a9b008b088 Yojana Mallik    2024-05-31  354  	common->state = ICVE_STATE_CLOSE;
5655a9b008b088 Yojana Mallik    2024-05-31  355  	mutex_unlock(&common->state_lock);
5655a9b008b088 Yojana Mallik    2024-05-31  356  
5655a9b008b088 Yojana Mallik    2024-05-31  357  	netif_carrier_off(port->ndev);
5655a9b008b088 Yojana Mallik    2024-05-31  358  
5655a9b008b088 Yojana Mallik    2024-05-31  359  	__dev_mc_unsync(ndev, icve_del_mc_addr);
5655a9b008b088 Yojana Mallik    2024-05-31  360  	__hw_addr_init(&common->mc_list);
5655a9b008b088 Yojana Mallik    2024-05-31  361  
5655a9b008b088 Yojana Mallik    2024-05-31  362  	cancel_delayed_work_sync(&common->state_work);
5655a9b008b088 Yojana Mallik    2024-05-31  363  	del_timer_sync(&port->rx_timer);
5655a9b008b088 Yojana Mallik    2024-05-31  364  	napi_disable(&port->rx_napi);
5655a9b008b088 Yojana Mallik    2024-05-31  365  
5655a9b008b088 Yojana Mallik    2024-05-31  366  	cancel_work_sync(&common->rx_mode_work);
5655a9b008b088 Yojana Mallik    2024-05-31  367  
5655a9b008b088 Yojana Mallik    2024-05-31  368  	return 0;
5655a9b008b088 Yojana Mallik    2024-05-31  369  }
5655a9b008b088 Yojana Mallik    2024-05-31  370  
5655a9b008b088 Yojana Mallik    2024-05-31  371  static netdev_tx_t icve_start_xmit(struct sk_buff *skb, struct net_device *ndev)
5655a9b008b088 Yojana Mallik    2024-05-31  372  {
5655a9b008b088 Yojana Mallik    2024-05-31  373  	struct icve_port *port = icve_ndev_to_port(ndev);
5655a9b008b088 Yojana Mallik    2024-05-31  374  	u32 head, tail;
5655a9b008b088 Yojana Mallik    2024-05-31  375  	int num_pkts;
5655a9b008b088 Yojana Mallik    2024-05-31  376  	u32 len;
5655a9b008b088 Yojana Mallik    2024-05-31  377  
5655a9b008b088 Yojana Mallik    2024-05-31  378  	len = skb_headlen(skb);
5655a9b008b088 Yojana Mallik    2024-05-31  379  	head = port->tx_buffer->head->index;
5655a9b008b088 Yojana Mallik    2024-05-31  380  	tail = port->tx_buffer->tail->index;
5655a9b008b088 Yojana Mallik    2024-05-31  381  
5655a9b008b088 Yojana Mallik    2024-05-31  382  	/* If the buffer queue is full, then drop packet */
5655a9b008b088 Yojana Mallik    2024-05-31  383  	num_pkts = head - tail;
5655a9b008b088 Yojana Mallik    2024-05-31  384  	num_pkts = num_pkts >= 0 ? num_pkts :
5655a9b008b088 Yojana Mallik    2024-05-31  385  				   (num_pkts + port->icve_tx_max_buffers);
5655a9b008b088 Yojana Mallik    2024-05-31  386  
5655a9b008b088 Yojana Mallik    2024-05-31  387  	if ((num_pkts + 1) == port->icve_tx_max_buffers) {
5655a9b008b088 Yojana Mallik    2024-05-31  388  		netdev_warn(ndev, "Tx buffer full %d\n", num_pkts);
5655a9b008b088 Yojana Mallik    2024-05-31  389  		goto ring_full;
5655a9b008b088 Yojana Mallik    2024-05-31  390  	}
5655a9b008b088 Yojana Mallik    2024-05-31  391  	/* Copy length */
5655a9b008b088 Yojana Mallik    2024-05-31  392  	memcpy_toio((void *)port->tx_buffer->buf->base_addr +
5655a9b008b088 Yojana Mallik    2024-05-31 @393  			    MAGIC_NUM_SIZE_TYPE +
5655a9b008b088 Yojana Mallik    2024-05-31  394  			    (port->tx_buffer->head->index * ICVE_BUFFER_SIZE),
5655a9b008b088 Yojana Mallik    2024-05-31  395  		    (void *)&len, PKT_LEN_SIZE_TYPE);
5655a9b008b088 Yojana Mallik    2024-05-31  396  	/* Copy data to shared mem */
5655a9b008b088 Yojana Mallik    2024-05-31  397  	memcpy_toio((void *)(port->tx_buffer->buf->base_addr +
5655a9b008b088 Yojana Mallik    2024-05-31  398  			     MAGIC_NUM_SIZE_TYPE + PKT_LEN_SIZE_TYPE +
5655a9b008b088 Yojana Mallik    2024-05-31  399  			     (port->tx_buffer->head->index * ICVE_BUFFER_SIZE)),
5655a9b008b088 Yojana Mallik    2024-05-31  400  		    (void *)skb->data, len);
5655a9b008b088 Yojana Mallik    2024-05-31  401  	port->tx_buffer->head->index =
5655a9b008b088 Yojana Mallik    2024-05-31  402  		(port->tx_buffer->head->index + 1) % port->icve_tx_max_buffers;
5655a9b008b088 Yojana Mallik    2024-05-31  403  
5655a9b008b088 Yojana Mallik    2024-05-31  404  	ndev->stats.tx_packets++;
5655a9b008b088 Yojana Mallik    2024-05-31  405  	ndev->stats.tx_bytes += skb->len;
5655a9b008b088 Yojana Mallik    2024-05-31  406  
5655a9b008b088 Yojana Mallik    2024-05-31  407  	dev_consume_skb_any(skb);
5655a9b008b088 Yojana Mallik    2024-05-31  408  	return NETDEV_TX_OK;
5655a9b008b088 Yojana Mallik    2024-05-31  409  
5655a9b008b088 Yojana Mallik    2024-05-31  410  ring_full:
5655a9b008b088 Yojana Mallik    2024-05-31  411  	return NETDEV_TX_BUSY;
5655a9b008b088 Yojana Mallik    2024-05-31  412  }
5655a9b008b088 Yojana Mallik    2024-05-31  413  

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ