All of lore.kernel.org
 help / color / mirror / Atom feed
* [jkirsher-net-queue:master 2/4] drivers/net/ethernet/ti/icssg/icssg_prueth.c:55:13: error: static declaration of 'prueth_cleanup_rx_chns' follows non-static declaration
@ 2025-07-09  1:14 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-07-09  1:14 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: oe-kbuild-all, Jeff Kirsher, Roger Quadros, MD Danish Anwar,
	Jakub Kicinski

[-- Attachment #1: Type: text/plain, Size: 26628 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-queue.git master
head:   db494b13c593e578fed58a6e41f4c9df619180d8
commit: f758f47f8a1fbf1908c6dcbd6ec1fe8dfd8f5261 [2/4] net: ti: icssg-prueth: Fix signedness bug in prueth_init_rx_chns()
:::::: branch date: 13 hours ago
:::::: commit date: 13 hours ago
config: arm64-defconfig (attached as .config)
compiler: aarch64-linux-gcc (GCC) 15.1.0
reproduce (this is a W=1 build): (attached as 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/202507090230.YPj6gQq3-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:55:13: error: static declaration of 'prueth_cleanup_rx_chns' follows non-static declaration
      55 | static void prueth_cleanup_rx_chns(struct prueth_emac *emac,
         |             ^~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/net/ethernet/ti/icssg/icssg_prueth.c:34:
   drivers/net/ethernet/ti/icssg/icssg_prueth.h:447:6: note: previous declaration of 'prueth_cleanup_rx_chns' with type 'void(struct prueth_emac *, struct prueth_rx_chn *, int)'
     447 | void prueth_cleanup_rx_chns(struct prueth_emac *emac,
         |      ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:66:13: error: static declaration of 'prueth_cleanup_tx_chns' follows non-static declaration
      66 | static void prueth_cleanup_tx_chns(struct prueth_emac *emac)
         |             ^~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/ti/icssg/icssg_prueth.h:450:6: note: previous declaration of 'prueth_cleanup_tx_chns' with type 'void(struct prueth_emac *)'
     450 | void prueth_cleanup_tx_chns(struct prueth_emac *emac);
         |      ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:86:13: error: static declaration of 'prueth_ndev_del_tx_napi' follows non-static declaration
      86 | static void prueth_ndev_del_tx_napi(struct prueth_emac *emac, int num)
         |             ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/ti/icssg/icssg_prueth.h:451:6: note: previous declaration of 'prueth_ndev_del_tx_napi' with type 'void(struct prueth_emac *, int)'
     451 | void prueth_ndev_del_tx_napi(struct prueth_emac *emac, int num);
         |      ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:99:13: error: static declaration of 'prueth_xmit_free' follows non-static declaration
      99 | static void prueth_xmit_free(struct prueth_tx_chn *tx_chn,
         |             ^~~~~~~~~~~~~~~~
   drivers/net/ethernet/ti/icssg/icssg_prueth.h:452:6: note: previous declaration of 'prueth_xmit_free' with type 'void(struct prueth_tx_chn *, struct cppi5_host_desc_t *)'
     452 | void prueth_xmit_free(struct prueth_tx_chn *tx_chn,
         |      ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:135:12: error: conflicting types for 'emac_tx_complete_packets'; have 'int(struct prueth_emac *, int,  int)'
     135 | static int emac_tx_complete_packets(struct prueth_emac *emac, int chn,
         |            ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/ti/icssg/icssg_prueth.h:454:5: note: previous declaration of 'emac_tx_complete_packets' with type 'int(struct prueth_emac *, int,  int,  bool *)' {aka 'int(struct prueth_emac *, int,  int,  _Bool *)'}
     454 | int emac_tx_complete_packets(struct prueth_emac *emac, int chn,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:225:12: error: static declaration of 'prueth_ndev_add_tx_napi' follows non-static declaration
     225 | static int prueth_ndev_add_tx_napi(struct prueth_emac *emac)
         |            ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/ti/icssg/icssg_prueth.h:456:5: note: previous declaration of 'prueth_ndev_add_tx_napi' with type 'int(struct prueth_emac *)'
     456 | int prueth_ndev_add_tx_napi(struct prueth_emac *emac);
         |     ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:251:12: error: static declaration of 'prueth_init_tx_chns' follows non-static declaration
     251 | static int prueth_init_tx_chns(struct prueth_emac *emac)
         |            ^~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/ti/icssg/icssg_prueth.h:457:5: note: previous declaration of 'prueth_init_tx_chns' with type 'int(struct prueth_emac *)'
     457 | int prueth_init_tx_chns(struct prueth_emac *emac);
         |     ^~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:331:12: error: static declaration of 'prueth_init_rx_chns' follows non-static declaration
     331 | static int prueth_init_rx_chns(struct prueth_emac *emac,
         |            ^~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/ti/icssg/icssg_prueth.h:458:5: note: previous declaration of 'prueth_init_rx_chns' with type 'int(struct prueth_emac *, struct prueth_rx_chn *, char *, u32,  u32)' {aka 'int(struct prueth_emac *, struct prueth_rx_chn *, char *, unsigned int,  unsigned int)'}
     458 | int prueth_init_rx_chns(struct prueth_emac *emac,
         |     ^~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:472:12: error: static declaration of 'icssg_ts_to_ns' follows non-static declaration
     472 | static u64 icssg_ts_to_ns(u32 hi_sw, u32 hi, u32 lo, u32 cycle_time_ns)
         |            ^~~~~~~~~~~~~~
   drivers/net/ethernet/ti/icssg/icssg_prueth.h:493:5: note: previous declaration of 'icssg_ts_to_ns' with type 'u64(u32,  u32,  u32,  u32)' {aka 'long long unsigned int(unsigned int,  unsigned int,  unsigned int,  unsigned int)'}
     493 | u64 icssg_ts_to_ns(u32 hi_sw, u32 hi, u32 lo, u32 cycle_time_ns);
         |     ^~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:487:13: error: static declaration of 'emac_rx_timestamp' follows non-static declaration
     487 | static void emac_rx_timestamp(struct prueth_emac *emac,
         |             ^~~~~~~~~~~~~~~~~
   drivers/net/ethernet/ti/icssg/icssg_prueth.h:466:6: note: previous declaration of 'emac_rx_timestamp' with type 'void(struct prueth_emac *, struct sk_buff *, u32 *)' {aka 'void(struct prueth_emac *, struct sk_buff *, unsigned int *)'}
     466 | void emac_rx_timestamp(struct prueth_emac *emac,
         |      ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:573:13: warning: 'prueth_rx_cleanup' defined but not used [-Wunused-function]
     573 | static void prueth_rx_cleanup(void *data, dma_addr_t desc_dma)
         |             ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/ti/icssg/icssg_prueth.c:503:12: warning: 'emac_rx_packet' defined but not used [-Wunused-function]
     503 | static int emac_rx_packet(struct prueth_emac *emac, u32 flow_id)
         |            ^~~~~~~~~~~~~~


vim +/prueth_cleanup_rx_chns +55 drivers/net/ethernet/ti/icssg/icssg_prueth.c

f758f47f8a1fbf Dan Carpenter 2024-04-23   54  
f758f47f8a1fbf Dan Carpenter 2024-04-23  @55  static void prueth_cleanup_rx_chns(struct prueth_emac *emac,
f758f47f8a1fbf Dan Carpenter 2024-04-23   56  				   struct prueth_rx_chn *rx_chn,
f758f47f8a1fbf Dan Carpenter 2024-04-23   57  				   int max_rflows)
f758f47f8a1fbf Dan Carpenter 2024-04-23   58  {
f758f47f8a1fbf Dan Carpenter 2024-04-23   59  	if (rx_chn->desc_pool)
f758f47f8a1fbf Dan Carpenter 2024-04-23   60  		k3_cppi_desc_pool_destroy(rx_chn->desc_pool);
f758f47f8a1fbf Dan Carpenter 2024-04-23   61  
f758f47f8a1fbf Dan Carpenter 2024-04-23   62  	if (rx_chn->rx_chn)
f758f47f8a1fbf Dan Carpenter 2024-04-23   63  		k3_udma_glue_release_rx_chn(rx_chn->rx_chn);
f758f47f8a1fbf Dan Carpenter 2024-04-23   64  }
f758f47f8a1fbf Dan Carpenter 2024-04-23   65  
f758f47f8a1fbf Dan Carpenter 2024-04-23  @66  static void prueth_cleanup_tx_chns(struct prueth_emac *emac)
f758f47f8a1fbf Dan Carpenter 2024-04-23   67  {
f758f47f8a1fbf Dan Carpenter 2024-04-23   68  	int i;
f758f47f8a1fbf Dan Carpenter 2024-04-23   69  
f758f47f8a1fbf Dan Carpenter 2024-04-23   70  	for (i = 0; i < emac->tx_ch_num; i++) {
f758f47f8a1fbf Dan Carpenter 2024-04-23   71  		struct prueth_tx_chn *tx_chn = &emac->tx_chns[i];
f758f47f8a1fbf Dan Carpenter 2024-04-23   72  
f758f47f8a1fbf Dan Carpenter 2024-04-23   73  		if (tx_chn->desc_pool)
f758f47f8a1fbf Dan Carpenter 2024-04-23   74  			k3_cppi_desc_pool_destroy(tx_chn->desc_pool);
f758f47f8a1fbf Dan Carpenter 2024-04-23   75  
f758f47f8a1fbf Dan Carpenter 2024-04-23   76  		if (tx_chn->tx_chn)
f758f47f8a1fbf Dan Carpenter 2024-04-23   77  			k3_udma_glue_release_tx_chn(tx_chn->tx_chn);
f758f47f8a1fbf Dan Carpenter 2024-04-23   78  
f758f47f8a1fbf Dan Carpenter 2024-04-23   79  		/* Assume prueth_cleanup_tx_chns() is called at the
f758f47f8a1fbf Dan Carpenter 2024-04-23   80  		 * end after all channel resources are freed
f758f47f8a1fbf Dan Carpenter 2024-04-23   81  		 */
f758f47f8a1fbf Dan Carpenter 2024-04-23   82  		memset(tx_chn, 0, sizeof(*tx_chn));
f758f47f8a1fbf Dan Carpenter 2024-04-23   83  	}
f758f47f8a1fbf Dan Carpenter 2024-04-23   84  }
f758f47f8a1fbf Dan Carpenter 2024-04-23   85  
f758f47f8a1fbf Dan Carpenter 2024-04-23  @86  static void prueth_ndev_del_tx_napi(struct prueth_emac *emac, int num)
f758f47f8a1fbf Dan Carpenter 2024-04-23   87  {
f758f47f8a1fbf Dan Carpenter 2024-04-23   88  	int i;
f758f47f8a1fbf Dan Carpenter 2024-04-23   89  
f758f47f8a1fbf Dan Carpenter 2024-04-23   90  	for (i = 0; i < num; i++) {
f758f47f8a1fbf Dan Carpenter 2024-04-23   91  		struct prueth_tx_chn *tx_chn = &emac->tx_chns[i];
f758f47f8a1fbf Dan Carpenter 2024-04-23   92  
f758f47f8a1fbf Dan Carpenter 2024-04-23   93  		if (tx_chn->irq)
f758f47f8a1fbf Dan Carpenter 2024-04-23   94  			free_irq(tx_chn->irq, tx_chn);
f758f47f8a1fbf Dan Carpenter 2024-04-23   95  		netif_napi_del(&tx_chn->napi_tx);
f758f47f8a1fbf Dan Carpenter 2024-04-23   96  	}
f758f47f8a1fbf Dan Carpenter 2024-04-23   97  }
f758f47f8a1fbf Dan Carpenter 2024-04-23   98  
f758f47f8a1fbf Dan Carpenter 2024-04-23  @99  static void prueth_xmit_free(struct prueth_tx_chn *tx_chn,
f758f47f8a1fbf Dan Carpenter 2024-04-23  100  			     struct cppi5_host_desc_t *desc)
f758f47f8a1fbf Dan Carpenter 2024-04-23  101  {
f758f47f8a1fbf Dan Carpenter 2024-04-23  102  	struct cppi5_host_desc_t *first_desc, *next_desc;
f758f47f8a1fbf Dan Carpenter 2024-04-23  103  	dma_addr_t buf_dma, next_desc_dma;
f758f47f8a1fbf Dan Carpenter 2024-04-23  104  	u32 buf_dma_len;
f758f47f8a1fbf Dan Carpenter 2024-04-23  105  
f758f47f8a1fbf Dan Carpenter 2024-04-23  106  	first_desc = desc;
f758f47f8a1fbf Dan Carpenter 2024-04-23  107  	next_desc = first_desc;
f758f47f8a1fbf Dan Carpenter 2024-04-23  108  
f758f47f8a1fbf Dan Carpenter 2024-04-23  109  	cppi5_hdesc_get_obuf(first_desc, &buf_dma, &buf_dma_len);
f758f47f8a1fbf Dan Carpenter 2024-04-23  110  	k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &buf_dma);
f758f47f8a1fbf Dan Carpenter 2024-04-23  111  
f758f47f8a1fbf Dan Carpenter 2024-04-23  112  	dma_unmap_single(tx_chn->dma_dev, buf_dma, buf_dma_len,
f758f47f8a1fbf Dan Carpenter 2024-04-23  113  			 DMA_TO_DEVICE);
f758f47f8a1fbf Dan Carpenter 2024-04-23  114  
f758f47f8a1fbf Dan Carpenter 2024-04-23  115  	next_desc_dma = cppi5_hdesc_get_next_hbdesc(first_desc);
f758f47f8a1fbf Dan Carpenter 2024-04-23  116  	k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &next_desc_dma);
f758f47f8a1fbf Dan Carpenter 2024-04-23  117  	while (next_desc_dma) {
f758f47f8a1fbf Dan Carpenter 2024-04-23  118  		next_desc = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool,
f758f47f8a1fbf Dan Carpenter 2024-04-23  119  						       next_desc_dma);
f758f47f8a1fbf Dan Carpenter 2024-04-23  120  		cppi5_hdesc_get_obuf(next_desc, &buf_dma, &buf_dma_len);
f758f47f8a1fbf Dan Carpenter 2024-04-23  121  		k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &buf_dma);
f758f47f8a1fbf Dan Carpenter 2024-04-23  122  
f758f47f8a1fbf Dan Carpenter 2024-04-23  123  		dma_unmap_page(tx_chn->dma_dev, buf_dma, buf_dma_len,
f758f47f8a1fbf Dan Carpenter 2024-04-23  124  			       DMA_TO_DEVICE);
f758f47f8a1fbf Dan Carpenter 2024-04-23  125  
f758f47f8a1fbf Dan Carpenter 2024-04-23  126  		next_desc_dma = cppi5_hdesc_get_next_hbdesc(next_desc);
f758f47f8a1fbf Dan Carpenter 2024-04-23  127  		k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &next_desc_dma);
f758f47f8a1fbf Dan Carpenter 2024-04-23  128  
f758f47f8a1fbf Dan Carpenter 2024-04-23  129  		k3_cppi_desc_pool_free(tx_chn->desc_pool, next_desc);
f758f47f8a1fbf Dan Carpenter 2024-04-23  130  	}
f758f47f8a1fbf Dan Carpenter 2024-04-23  131  
f758f47f8a1fbf Dan Carpenter 2024-04-23  132  	k3_cppi_desc_pool_free(tx_chn->desc_pool, first_desc);
f758f47f8a1fbf Dan Carpenter 2024-04-23  133  }
f758f47f8a1fbf Dan Carpenter 2024-04-23  134  
f758f47f8a1fbf Dan Carpenter 2024-04-23 @135  static int emac_tx_complete_packets(struct prueth_emac *emac, int chn,
f758f47f8a1fbf Dan Carpenter 2024-04-23  136  				    int budget)
f758f47f8a1fbf Dan Carpenter 2024-04-23  137  {
f758f47f8a1fbf Dan Carpenter 2024-04-23  138  	struct net_device *ndev = emac->ndev;
f758f47f8a1fbf Dan Carpenter 2024-04-23  139  	struct cppi5_host_desc_t *desc_tx;
f758f47f8a1fbf Dan Carpenter 2024-04-23  140  	struct netdev_queue *netif_txq;
f758f47f8a1fbf Dan Carpenter 2024-04-23  141  	struct prueth_tx_chn *tx_chn;
f758f47f8a1fbf Dan Carpenter 2024-04-23  142  	unsigned int total_bytes = 0;
f758f47f8a1fbf Dan Carpenter 2024-04-23  143  	struct sk_buff *skb;
f758f47f8a1fbf Dan Carpenter 2024-04-23  144  	dma_addr_t desc_dma;
f758f47f8a1fbf Dan Carpenter 2024-04-23  145  	int res, num_tx = 0;
f758f47f8a1fbf Dan Carpenter 2024-04-23  146  	void **swdata;
f758f47f8a1fbf Dan Carpenter 2024-04-23  147  
f758f47f8a1fbf Dan Carpenter 2024-04-23  148  	tx_chn = &emac->tx_chns[chn];
f758f47f8a1fbf Dan Carpenter 2024-04-23  149  
f758f47f8a1fbf Dan Carpenter 2024-04-23  150  	while (true) {
f758f47f8a1fbf Dan Carpenter 2024-04-23  151  		res = k3_udma_glue_pop_tx_chn(tx_chn->tx_chn, &desc_dma);
f758f47f8a1fbf Dan Carpenter 2024-04-23  152  		if (res == -ENODATA)
f758f47f8a1fbf Dan Carpenter 2024-04-23  153  			break;
f758f47f8a1fbf Dan Carpenter 2024-04-23  154  
f758f47f8a1fbf Dan Carpenter 2024-04-23  155  		/* teardown completion */
f758f47f8a1fbf Dan Carpenter 2024-04-23  156  		if (cppi5_desc_is_tdcm(desc_dma)) {
f758f47f8a1fbf Dan Carpenter 2024-04-23  157  			if (atomic_dec_and_test(&emac->tdown_cnt))
f758f47f8a1fbf Dan Carpenter 2024-04-23  158  				complete(&emac->tdown_complete);
f758f47f8a1fbf Dan Carpenter 2024-04-23  159  			break;
f758f47f8a1fbf Dan Carpenter 2024-04-23  160  		}
f758f47f8a1fbf Dan Carpenter 2024-04-23  161  
f758f47f8a1fbf Dan Carpenter 2024-04-23  162  		desc_tx = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool,
f758f47f8a1fbf Dan Carpenter 2024-04-23  163  						     desc_dma);
f758f47f8a1fbf Dan Carpenter 2024-04-23  164  		swdata = cppi5_hdesc_get_swdata(desc_tx);
f758f47f8a1fbf Dan Carpenter 2024-04-23  165  
f758f47f8a1fbf Dan Carpenter 2024-04-23  166  		skb = *(swdata);
f758f47f8a1fbf Dan Carpenter 2024-04-23  167  		prueth_xmit_free(tx_chn, desc_tx);
f758f47f8a1fbf Dan Carpenter 2024-04-23  168  
f758f47f8a1fbf Dan Carpenter 2024-04-23  169  		ndev = skb->dev;
f758f47f8a1fbf Dan Carpenter 2024-04-23  170  		ndev->stats.tx_packets++;
f758f47f8a1fbf Dan Carpenter 2024-04-23  171  		ndev->stats.tx_bytes += skb->len;
f758f47f8a1fbf Dan Carpenter 2024-04-23  172  		total_bytes += skb->len;
f758f47f8a1fbf Dan Carpenter 2024-04-23  173  		napi_consume_skb(skb, budget);
f758f47f8a1fbf Dan Carpenter 2024-04-23  174  		num_tx++;
f758f47f8a1fbf Dan Carpenter 2024-04-23  175  	}
f758f47f8a1fbf Dan Carpenter 2024-04-23  176  
f758f47f8a1fbf Dan Carpenter 2024-04-23  177  	if (!num_tx)
f758f47f8a1fbf Dan Carpenter 2024-04-23  178  		return 0;
f758f47f8a1fbf Dan Carpenter 2024-04-23  179  
f758f47f8a1fbf Dan Carpenter 2024-04-23  180  	netif_txq = netdev_get_tx_queue(ndev, chn);
f758f47f8a1fbf Dan Carpenter 2024-04-23  181  	netdev_tx_completed_queue(netif_txq, num_tx, total_bytes);
f758f47f8a1fbf Dan Carpenter 2024-04-23  182  
f758f47f8a1fbf Dan Carpenter 2024-04-23  183  	if (netif_tx_queue_stopped(netif_txq)) {
f758f47f8a1fbf Dan Carpenter 2024-04-23  184  		/* If the TX queue was stopped, wake it now
f758f47f8a1fbf Dan Carpenter 2024-04-23  185  		 * if we have enough room.
f758f47f8a1fbf Dan Carpenter 2024-04-23  186  		 */
f758f47f8a1fbf Dan Carpenter 2024-04-23  187  		__netif_tx_lock(netif_txq, smp_processor_id());
f758f47f8a1fbf Dan Carpenter 2024-04-23  188  		if (netif_running(ndev) &&
f758f47f8a1fbf Dan Carpenter 2024-04-23  189  		    (k3_cppi_desc_pool_avail(tx_chn->desc_pool) >=
f758f47f8a1fbf Dan Carpenter 2024-04-23  190  		     MAX_SKB_FRAGS))
f758f47f8a1fbf Dan Carpenter 2024-04-23  191  			netif_tx_wake_queue(netif_txq);
f758f47f8a1fbf Dan Carpenter 2024-04-23  192  		__netif_tx_unlock(netif_txq);
f758f47f8a1fbf Dan Carpenter 2024-04-23  193  	}
f758f47f8a1fbf Dan Carpenter 2024-04-23  194  
f758f47f8a1fbf Dan Carpenter 2024-04-23  195  	return num_tx;
f758f47f8a1fbf Dan Carpenter 2024-04-23  196  }
f758f47f8a1fbf Dan Carpenter 2024-04-23  197  
f758f47f8a1fbf Dan Carpenter 2024-04-23  198  static int emac_napi_tx_poll(struct napi_struct *napi_tx, int budget)
f758f47f8a1fbf Dan Carpenter 2024-04-23  199  {
f758f47f8a1fbf Dan Carpenter 2024-04-23  200  	struct prueth_tx_chn *tx_chn = prueth_napi_to_tx_chn(napi_tx);
f758f47f8a1fbf Dan Carpenter 2024-04-23  201  	struct prueth_emac *emac = tx_chn->emac;
f758f47f8a1fbf Dan Carpenter 2024-04-23  202  	int num_tx_packets;
f758f47f8a1fbf Dan Carpenter 2024-04-23  203  
f758f47f8a1fbf Dan Carpenter 2024-04-23  204  	num_tx_packets = emac_tx_complete_packets(emac, tx_chn->id, budget);
f758f47f8a1fbf Dan Carpenter 2024-04-23  205  
f758f47f8a1fbf Dan Carpenter 2024-04-23  206  	if (num_tx_packets >= budget)
f758f47f8a1fbf Dan Carpenter 2024-04-23  207  		return budget;
f758f47f8a1fbf Dan Carpenter 2024-04-23  208  
f758f47f8a1fbf Dan Carpenter 2024-04-23  209  	if (napi_complete_done(napi_tx, num_tx_packets))
f758f47f8a1fbf Dan Carpenter 2024-04-23  210  		enable_irq(tx_chn->irq);
f758f47f8a1fbf Dan Carpenter 2024-04-23  211  
f758f47f8a1fbf Dan Carpenter 2024-04-23  212  	return num_tx_packets;
f758f47f8a1fbf Dan Carpenter 2024-04-23  213  }
f758f47f8a1fbf Dan Carpenter 2024-04-23  214  
f758f47f8a1fbf Dan Carpenter 2024-04-23  215  static irqreturn_t prueth_tx_irq(int irq, void *dev_id)
f758f47f8a1fbf Dan Carpenter 2024-04-23  216  {
f758f47f8a1fbf Dan Carpenter 2024-04-23  217  	struct prueth_tx_chn *tx_chn = dev_id;
f758f47f8a1fbf Dan Carpenter 2024-04-23  218  
f758f47f8a1fbf Dan Carpenter 2024-04-23  219  	disable_irq_nosync(irq);
f758f47f8a1fbf Dan Carpenter 2024-04-23  220  	napi_schedule(&tx_chn->napi_tx);
f758f47f8a1fbf Dan Carpenter 2024-04-23  221  
f758f47f8a1fbf Dan Carpenter 2024-04-23  222  	return IRQ_HANDLED;
f758f47f8a1fbf Dan Carpenter 2024-04-23  223  }
f758f47f8a1fbf Dan Carpenter 2024-04-23  224  
f758f47f8a1fbf Dan Carpenter 2024-04-23 @225  static int prueth_ndev_add_tx_napi(struct prueth_emac *emac)
f758f47f8a1fbf Dan Carpenter 2024-04-23  226  {
f758f47f8a1fbf Dan Carpenter 2024-04-23  227  	struct prueth *prueth = emac->prueth;
f758f47f8a1fbf Dan Carpenter 2024-04-23  228  	int i, ret;
f758f47f8a1fbf Dan Carpenter 2024-04-23  229  
f758f47f8a1fbf Dan Carpenter 2024-04-23  230  	for (i = 0; i < emac->tx_ch_num; i++) {
f758f47f8a1fbf Dan Carpenter 2024-04-23  231  		struct prueth_tx_chn *tx_chn = &emac->tx_chns[i];
f758f47f8a1fbf Dan Carpenter 2024-04-23  232  
f758f47f8a1fbf Dan Carpenter 2024-04-23  233  		netif_napi_add_tx(emac->ndev, &tx_chn->napi_tx, emac_napi_tx_poll);
f758f47f8a1fbf Dan Carpenter 2024-04-23  234  		ret = request_irq(tx_chn->irq, prueth_tx_irq,
f758f47f8a1fbf Dan Carpenter 2024-04-23  235  				  IRQF_TRIGGER_HIGH, tx_chn->name,
f758f47f8a1fbf Dan Carpenter 2024-04-23  236  				  tx_chn);
f758f47f8a1fbf Dan Carpenter 2024-04-23  237  		if (ret) {
f758f47f8a1fbf Dan Carpenter 2024-04-23  238  			netif_napi_del(&tx_chn->napi_tx);
f758f47f8a1fbf Dan Carpenter 2024-04-23  239  			dev_err(prueth->dev, "unable to request TX IRQ %d\n",
f758f47f8a1fbf Dan Carpenter 2024-04-23  240  				tx_chn->irq);
f758f47f8a1fbf Dan Carpenter 2024-04-23  241  			goto fail;
f758f47f8a1fbf Dan Carpenter 2024-04-23  242  		}
f758f47f8a1fbf Dan Carpenter 2024-04-23  243  	}
f758f47f8a1fbf Dan Carpenter 2024-04-23  244  
f758f47f8a1fbf Dan Carpenter 2024-04-23  245  	return 0;
f758f47f8a1fbf Dan Carpenter 2024-04-23  246  fail:
f758f47f8a1fbf Dan Carpenter 2024-04-23  247  	prueth_ndev_del_tx_napi(emac, i);
f758f47f8a1fbf Dan Carpenter 2024-04-23  248  	return ret;
f758f47f8a1fbf Dan Carpenter 2024-04-23  249  }
f758f47f8a1fbf Dan Carpenter 2024-04-23  250  
f758f47f8a1fbf Dan Carpenter 2024-04-23 @251  static int prueth_init_tx_chns(struct prueth_emac *emac)
f758f47f8a1fbf Dan Carpenter 2024-04-23  252  {
f758f47f8a1fbf Dan Carpenter 2024-04-23  253  	static const struct k3_ring_cfg ring_cfg = {
f758f47f8a1fbf Dan Carpenter 2024-04-23  254  		.elm_size = K3_RINGACC_RING_ELSIZE_8,
f758f47f8a1fbf Dan Carpenter 2024-04-23  255  		.mode = K3_RINGACC_RING_MODE_RING,
f758f47f8a1fbf Dan Carpenter 2024-04-23  256  		.flags = 0,
f758f47f8a1fbf Dan Carpenter 2024-04-23  257  		.size = PRUETH_MAX_TX_DESC,
f758f47f8a1fbf Dan Carpenter 2024-04-23  258  	};
f758f47f8a1fbf Dan Carpenter 2024-04-23  259  	struct k3_udma_glue_tx_channel_cfg tx_cfg;
f758f47f8a1fbf Dan Carpenter 2024-04-23  260  	struct device *dev = emac->prueth->dev;
f758f47f8a1fbf Dan Carpenter 2024-04-23  261  	struct net_device *ndev = emac->ndev;
f758f47f8a1fbf Dan Carpenter 2024-04-23  262  	int ret, slice, i;
f758f47f8a1fbf Dan Carpenter 2024-04-23  263  	u32 hdesc_size;
f758f47f8a1fbf Dan Carpenter 2024-04-23  264  
f758f47f8a1fbf Dan Carpenter 2024-04-23  265  	slice = prueth_emac_slice(emac);
f758f47f8a1fbf Dan Carpenter 2024-04-23  266  	if (slice < 0)
f758f47f8a1fbf Dan Carpenter 2024-04-23  267  		return slice;
f758f47f8a1fbf Dan Carpenter 2024-04-23  268  
f758f47f8a1fbf Dan Carpenter 2024-04-23  269  	init_completion(&emac->tdown_complete);
f758f47f8a1fbf Dan Carpenter 2024-04-23  270  
f758f47f8a1fbf Dan Carpenter 2024-04-23  271  	hdesc_size = cppi5_hdesc_calc_size(true, PRUETH_NAV_PS_DATA_SIZE,
f758f47f8a1fbf Dan Carpenter 2024-04-23  272  					   PRUETH_NAV_SW_DATA_SIZE);
f758f47f8a1fbf Dan Carpenter 2024-04-23  273  	memset(&tx_cfg, 0, sizeof(tx_cfg));
f758f47f8a1fbf Dan Carpenter 2024-04-23  274  	tx_cfg.swdata_size = PRUETH_NAV_SW_DATA_SIZE;
f758f47f8a1fbf Dan Carpenter 2024-04-23  275  	tx_cfg.tx_cfg = ring_cfg;
f758f47f8a1fbf Dan Carpenter 2024-04-23  276  	tx_cfg.txcq_cfg = ring_cfg;
f758f47f8a1fbf Dan Carpenter 2024-04-23  277  
f758f47f8a1fbf Dan Carpenter 2024-04-23  278  	for (i = 0; i < emac->tx_ch_num; i++) {
f758f47f8a1fbf Dan Carpenter 2024-04-23  279  		struct prueth_tx_chn *tx_chn = &emac->tx_chns[i];
f758f47f8a1fbf Dan Carpenter 2024-04-23  280  
f758f47f8a1fbf Dan Carpenter 2024-04-23  281  		/* To differentiate channels for SLICE0 vs SLICE1 */
f758f47f8a1fbf Dan Carpenter 2024-04-23  282  		snprintf(tx_chn->name, sizeof(tx_chn->name),
f758f47f8a1fbf Dan Carpenter 2024-04-23  283  			 "tx%d-%d", slice, i);
f758f47f8a1fbf Dan Carpenter 2024-04-23  284  
f758f47f8a1fbf Dan Carpenter 2024-04-23  285  		tx_chn->emac = emac;
f758f47f8a1fbf Dan Carpenter 2024-04-23  286  		tx_chn->id = i;
f758f47f8a1fbf Dan Carpenter 2024-04-23  287  		tx_chn->descs_num = PRUETH_MAX_TX_DESC;
f758f47f8a1fbf Dan Carpenter 2024-04-23  288  
f758f47f8a1fbf Dan Carpenter 2024-04-23  289  		tx_chn->tx_chn =
f758f47f8a1fbf Dan Carpenter 2024-04-23  290  			k3_udma_glue_request_tx_chn(dev, tx_chn->name,
f758f47f8a1fbf Dan Carpenter 2024-04-23  291  						    &tx_cfg);
f758f47f8a1fbf Dan Carpenter 2024-04-23  292  		if (IS_ERR(tx_chn->tx_chn)) {
f758f47f8a1fbf Dan Carpenter 2024-04-23  293  			ret = PTR_ERR(tx_chn->tx_chn);
f758f47f8a1fbf Dan Carpenter 2024-04-23  294  			tx_chn->tx_chn = NULL;
f758f47f8a1fbf Dan Carpenter 2024-04-23  295  			netdev_err(ndev,
f758f47f8a1fbf Dan Carpenter 2024-04-23  296  				   "Failed to request tx dma ch: %d\n", ret);
f758f47f8a1fbf Dan Carpenter 2024-04-23  297  			goto fail;
f758f47f8a1fbf Dan Carpenter 2024-04-23  298  		}
f758f47f8a1fbf Dan Carpenter 2024-04-23  299  
f758f47f8a1fbf Dan Carpenter 2024-04-23  300  		tx_chn->dma_dev = k3_udma_glue_tx_get_dma_device(tx_chn->tx_chn);
f758f47f8a1fbf Dan Carpenter 2024-04-23  301  		tx_chn->desc_pool =
f758f47f8a1fbf Dan Carpenter 2024-04-23  302  			k3_cppi_desc_pool_create_name(tx_chn->dma_dev,
f758f47f8a1fbf Dan Carpenter 2024-04-23  303  						      tx_chn->descs_num,
f758f47f8a1fbf Dan Carpenter 2024-04-23  304  						      hdesc_size,
f758f47f8a1fbf Dan Carpenter 2024-04-23  305  						      tx_chn->name);
f758f47f8a1fbf Dan Carpenter 2024-04-23  306  		if (IS_ERR(tx_chn->desc_pool)) {
f758f47f8a1fbf Dan Carpenter 2024-04-23  307  			ret = PTR_ERR(tx_chn->desc_pool);
f758f47f8a1fbf Dan Carpenter 2024-04-23  308  			tx_chn->desc_pool = NULL;
f758f47f8a1fbf Dan Carpenter 2024-04-23  309  			netdev_err(ndev, "Failed to create tx pool: %d\n", ret);
f758f47f8a1fbf Dan Carpenter 2024-04-23  310  			goto fail;
f758f47f8a1fbf Dan Carpenter 2024-04-23  311  		}
f758f47f8a1fbf Dan Carpenter 2024-04-23  312  
f758f47f8a1fbf Dan Carpenter 2024-04-23  313  		ret = k3_udma_glue_tx_get_irq(tx_chn->tx_chn);
f758f47f8a1fbf Dan Carpenter 2024-04-23  314  		if (ret < 0) {
f758f47f8a1fbf Dan Carpenter 2024-04-23  315  			netdev_err(ndev, "failed to get tx irq\n");
f758f47f8a1fbf Dan Carpenter 2024-04-23  316  			goto fail;
f758f47f8a1fbf Dan Carpenter 2024-04-23  317  		}
f758f47f8a1fbf Dan Carpenter 2024-04-23  318  		tx_chn->irq = ret;
f758f47f8a1fbf Dan Carpenter 2024-04-23  319  
f758f47f8a1fbf Dan Carpenter 2024-04-23  320  		snprintf(tx_chn->name, sizeof(tx_chn->name), "%s-tx%d",
f758f47f8a1fbf Dan Carpenter 2024-04-23  321  			 dev_name(dev), tx_chn->id);
f758f47f8a1fbf Dan Carpenter 2024-04-23  322  	}
f758f47f8a1fbf Dan Carpenter 2024-04-23  323  
f758f47f8a1fbf Dan Carpenter 2024-04-23  324  	return 0;
f758f47f8a1fbf Dan Carpenter 2024-04-23  325  
f758f47f8a1fbf Dan Carpenter 2024-04-23  326  fail:
f758f47f8a1fbf Dan Carpenter 2024-04-23  327  	prueth_cleanup_tx_chns(emac);
f758f47f8a1fbf Dan Carpenter 2024-04-23  328  	return ret;
f758f47f8a1fbf Dan Carpenter 2024-04-23  329  }
f758f47f8a1fbf Dan Carpenter 2024-04-23  330  

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

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 68260 bytes --]

[-- Attachment #3: reproduce --]
[-- Type: text/plain, Size: 840 bytes --]

reproduce (this is a W=1 build):
        git clone https://github.com/intel/lkp-tests.git ~/lkp-tests
        # https://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-queue.git/commit/?id=f758f47f8a1fbf1908c6dcbd6ec1fe8dfd8f5261
        git remote add jkirsher-net-queue https://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-queue.git
        git fetch --no-tags jkirsher-net-queue master
        git checkout f758f47f8a1fbf1908c6dcbd6ec1fe8dfd8f5261
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-15.1.0 ~/lkp-tests/kbuild/make.cross W=1 O=build_dir ARCH=arm64 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-15.1.0 ~/lkp-tests/kbuild/make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/net/ethernet/ti/

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

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

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-09  1:14 [jkirsher-net-queue:master 2/4] drivers/net/ethernet/ti/icssg/icssg_prueth.c:55:13: error: static declaration of 'prueth_cleanup_rx_chns' follows non-static declaration 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.