* [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.