From: kernel test robot <lkp@intel.com>
To: Pranavi Somisetty <pranavi.somisetty@xilinx.com>
Cc: oe-kbuild-all@lists.linux.dev, git@amd.com,
Michal Simek <monstr@monstr.eu>,
Harini Katakam <harini.katakam@xilinx.com>,
Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
Subject: [xilinx-xlnx:lkp_test 111/504] drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c:479:43: warning: cast to pointer from integer of different size
Date: Sat, 11 Jan 2025 18:43:26 +0800 [thread overview]
Message-ID: <202501111827.NGsNvOd2-lkp@intel.com> (raw)
tree: https://github.com/Xilinx/linux-xlnx lkp_test
head: 9ac6b4acf9144465ac1408d4d799635dec0223a0
commit: 79569a88d904a3efdb6a5f054e40344b688ed82e [111/504] staging: net: xilinx: add Xilinx TSN driver
config: arc-allmodconfig (https://download.01.org/0day-ci/archive/20250111/202501111827.NGsNvOd2-lkp@intel.com/config)
compiler: arceb-elf-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250111/202501111827.NGsNvOd2-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/202501111827.NGsNvOd2-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c: In function 'axienet_start_xmit_done_tsn':
>> drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c:479:43: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
479 | dev_kfree_skb_irq((struct sk_buff *)cur_p->tx_skb);
| ^
drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c: In function 'axienet_queue_xmit_tsn':
>> drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c:602:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
602 | (((phys_addr_t)skb->data & 0x3) || num_frag > 0)) {
| ^
drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c:641:25: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
641 | cur_p->tx_skb = (phys_addr_t)skb;
| ^
drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c:642:25: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
642 | cur_p->tx_skb = (phys_addr_t)skb;
| ^
drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c: In function 'axienet_recv':
drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c:702:23: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
702 | skb = (struct sk_buff *)(cur_p->sw_id_offset);
| ^
drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c:787:39: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
787 | cur_p->sw_id_offset = (phys_addr_t)new_skb;
| ^
--
In file included from include/linux/if_ether.h:19,
from include/linux/ethtool.h:18,
from include/linux/phy.h:16,
from include/linux/of_mdio.h:12,
from drivers/staging/xilinx-tsn/xilinx_axienet_mcdma_tsn.c:17:
drivers/staging/xilinx-tsn/xilinx_axienet_mcdma_tsn.c: In function 'axienet_mcdma_rx_bd_free_tsn':
>> drivers/staging/xilinx-tsn/xilinx_axienet_mcdma_tsn.c:160:31: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
160 | dev_kfree_skb((struct sk_buff *)
| ^
include/linux/skbuff.h:1417:45: note: in definition of macro 'dev_kfree_skb'
1417 | #define dev_kfree_skb(a) consume_skb(a)
| ^
drivers/staging/xilinx-tsn/xilinx_axienet_mcdma_tsn.c: In function 'axienet_mcdma_rx_q_init_tsn':
>> drivers/staging/xilinx-tsn/xilinx_axienet_mcdma_tsn.c:294:47: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
294 | q->rxq_bd_v[i].sw_id_offset = (phys_addr_t)skb;
| ^
drivers/staging/xilinx-tsn/xilinx_axienet_mcdma_tsn.c: In function 'axienet_mcdma_err_handler_tsn':
drivers/staging/xilinx-tsn/xilinx_axienet_mcdma_tsn.c:686:43: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
686 | dev_kfree_skb_irq((struct sk_buff *)cur_p->tx_skb);
| ^
--
drivers/staging/xilinx-tsn/xilinx_tsn_tadma.c: In function 'tadma_xmit_done':
>> drivers/staging/xilinx-tsn/xilinx_tsn_tadma.c:136:43: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
136 | dev_kfree_skb_irq((struct sk_buff *)
| ^
drivers/staging/xilinx-tsn/xilinx_tsn_tadma.c: In function 'axienet_tadma_xmit':
>> drivers/staging/xilinx-tsn/xilinx_tsn_tadma.c:503:62: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
503 | lp->tx_bd[sid][lp->tx_bd_head[sid]].tx_skb = (phys_addr_t)skb;
| ^
drivers/staging/xilinx-tsn/xilinx_tsn_tadma.c:536:57: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
536 | (phys_addr_t)skb;
| ^
vim +479 drivers/staging/xilinx-tsn/xilinx_axienet_main_tsn.c
443
444 /**
445 * axienet_start_xmit_done_tsn - Invoked once a transmit is completed by the
446 * Axi DMA Tx channel.
447 * @ndev: Pointer to the net_device structure
448 * @q: Pointer to DMA queue structure
449 *
450 * This function is invoked from the Axi DMA Tx isr to notify the completion
451 * of transmit operation. It clears fields in the corresponding Tx BDs and
452 * unmaps the corresponding buffer so that CPU can regain ownership of the
453 * buffer. It finally invokes "netif_wake_queue" to restart transmission if
454 * required.
455 */
456 void axienet_start_xmit_done_tsn(struct net_device *ndev,
457 struct axienet_dma_q *q)
458 {
459 u32 size = 0;
460 u32 packets = 0;
461 struct axienet_local *lp = netdev_priv(ndev);
462 struct aximcdma_bd *cur_p;
463 unsigned int status = 0;
464
465 cur_p = &q->txq_bd_v[q->tx_bd_ci];
466 status = cur_p->sband_stats;
467 while (status & XAXIDMA_BD_STS_COMPLETE_MASK) {
468 if (cur_p->tx_desc_mapping == DESC_DMA_MAP_PAGE)
469 dma_unmap_page(ndev->dev.parent, cur_p->phys,
470 cur_p->cntrl &
471 XAXIDMA_BD_CTRL_LENGTH_MASK,
472 DMA_TO_DEVICE);
473 else
474 dma_unmap_single(ndev->dev.parent, cur_p->phys,
475 cur_p->cntrl &
476 XAXIDMA_BD_CTRL_LENGTH_MASK,
477 DMA_TO_DEVICE);
478 if (cur_p->tx_skb)
> 479 dev_kfree_skb_irq((struct sk_buff *)cur_p->tx_skb);
480 /*cur_p->phys = 0;*/
481 cur_p->app0 = 0;
482 cur_p->app1 = 0;
483 cur_p->app2 = 0;
484 cur_p->app4 = 0;
485 cur_p->status = 0;
486 cur_p->tx_skb = 0;
487 cur_p->sband_stats = 0;
488
489 size += status & XAXIDMA_BD_STS_ACTUAL_LEN_MASK;
490 packets++;
491
492 if (++q->tx_bd_ci >= lp->tx_bd_num)
493 q->tx_bd_ci = 0;
494 cur_p = &q->txq_bd_v[q->tx_bd_ci];
495 status = cur_p->sband_stats;
496 }
497
498 ndev->stats.tx_packets += packets;
499 ndev->stats.tx_bytes += size;
500 q->tx_packets += packets;
501 q->tx_bytes += size;
502
503 /* Matches barrier in axienet_start_xmit */
504 smp_mb();
505
506 /* Fixme: With the existing multiqueue implementation
507 * in the driver it is difficult to get the exact queue info.
508 * We should wake only the particular queue
509 * instead of waking all ndev queues.
510 */
511 netif_tx_wake_all_queues(ndev);
512 }
513
514 /**
515 * axienet_check_tx_bd_space - Checks if a BD/group of BDs are currently busy
516 * @q: Pointer to DMA queue structure
517 * @num_frag: The number of BDs to check for
518 *
519 * Return: 0, on success
520 * NETDEV_TX_BUSY, if any of the descriptors are not free
521 *
522 * This function is invoked before BDs are allocated and transmission starts.
523 * This function returns 0 if a BD or group of BDs can be allocated for
524 * transmission. If the BD or any of the BDs are not free the function
525 * returns a busy status. This is invoked from axienet_start_xmit.
526 */
527 static inline int axienet_check_tx_bd_space(struct axienet_dma_q *q,
528 int num_frag)
529 {
530 struct axienet_local *lp = q->lp;
531 struct aximcdma_bd *cur_p;
532
533 if (CIRC_SPACE(q->tx_bd_tail, q->tx_bd_ci, lp->tx_bd_num) < (num_frag + 1))
534 return NETDEV_TX_BUSY;
535
536 cur_p = &q->txq_bd_v[(q->tx_bd_tail + num_frag) % lp->tx_bd_num];
537 if (cur_p->sband_stats & XMCDMA_BD_STS_ALL_MASK)
538 return NETDEV_TX_BUSY;
539 return 0;
540 }
541
542 int axienet_queue_xmit_tsn(struct sk_buff *skb,
543 struct net_device *ndev, u16 map)
544 {
545 u32 ii;
546 u32 num_frag;
547 u32 csum_start_off;
548 u32 csum_index_off;
549 dma_addr_t tail_p;
550 struct axienet_local *lp = netdev_priv(ndev);
551 struct aximcdma_bd *cur_p;
552 unsigned long flags;
553 struct axienet_dma_q *q;
554
555 num_frag = skb_shinfo(skb)->nr_frags;
556
557 q = lp->dq[map];
558
559 cur_p = &q->txq_bd_v[q->tx_bd_tail];
560 spin_lock_irqsave(&q->tx_lock, flags);
561 if (axienet_check_tx_bd_space(q, num_frag)) {
562 if (netif_queue_stopped(ndev)) {
563 spin_unlock_irqrestore(&q->tx_lock, flags);
564 return NETDEV_TX_BUSY;
565 }
566
567 netif_stop_queue(ndev);
568
569 /* Matches barrier in axienet_start_xmit_done_tsn */
570 smp_mb();
571
572 /* Space might have just been freed - check again */
573 if (axienet_check_tx_bd_space(q, num_frag)) {
574 spin_unlock_irqrestore(&q->tx_lock, flags);
575 return NETDEV_TX_BUSY;
576 }
577
578 netif_wake_queue(ndev);
579 }
580
581 if (skb->ip_summed == CHECKSUM_PARTIAL && !lp->eth_hasnobuf &&
582 lp->axienet_config->mactype == XAXIENET_1G) {
583 if (lp->features & XAE_FEATURE_FULL_TX_CSUM) {
584 /* Tx Full Checksum Offload Enabled */
585 cur_p->app0 |= 2;
586 } else if (lp->features & XAE_FEATURE_PARTIAL_RX_CSUM) {
587 csum_start_off = skb_transport_offset(skb);
588 csum_index_off = csum_start_off + skb->csum_offset;
589 /* Tx Partial Checksum Offload Enabled */
590 cur_p->app0 |= 1;
591 cur_p->app1 = (csum_start_off << 16) | csum_index_off;
592 }
593 } else if (skb->ip_summed == CHECKSUM_UNNECESSARY &&
594 !lp->eth_hasnobuf &&
595 (lp->axienet_config->mactype == XAXIENET_1G)) {
596 cur_p->app0 |= 2; /* Tx Full Checksum Offload Enabled */
597 }
598
599 cur_p->cntrl = (skb_headlen(skb) | XMCDMA_BD_CTRL_TXSOF_MASK);
600
601 if (!q->eth_hasdre &&
> 602 (((phys_addr_t)skb->data & 0x3) || num_frag > 0)) {
603 skb_copy_and_csum_dev(skb, q->tx_buf[q->tx_bd_tail]);
604
605 cur_p->phys = q->tx_bufs_dma +
606 (q->tx_buf[q->tx_bd_tail] - q->tx_bufs);
607
608 cur_p->cntrl = skb_pagelen(skb) | XMCDMA_BD_CTRL_TXSOF_MASK;
609 goto out;
610 } else {
611 cur_p->phys = dma_map_single(ndev->dev.parent, skb->data,
612 skb_headlen(skb), DMA_TO_DEVICE);
613 if (unlikely(dma_mapping_error(ndev->dev.parent, cur_p->phys))) {
614 cur_p->phys = 0;
615 spin_unlock_irqrestore(&q->tx_lock, flags);
616 dev_err(&ndev->dev, "TX buffer map failed\n");
617 return NETDEV_TX_BUSY;
618 }
619 }
620 cur_p->tx_desc_mapping = DESC_DMA_MAP_SINGLE;
621
622 for (ii = 0; ii < num_frag; ii++) {
623 u32 len;
624 skb_frag_t *frag;
625
626 if (++q->tx_bd_tail >= lp->tx_bd_num)
627 q->tx_bd_tail = 0;
628
629 cur_p = &q->txq_bd_v[q->tx_bd_tail];
630 frag = &skb_shinfo(skb)->frags[ii];
631 len = skb_frag_size(frag);
632 cur_p->phys = skb_frag_dma_map(ndev->dev.parent, frag, 0, len,
633 DMA_TO_DEVICE);
634 cur_p->cntrl = len;
635 cur_p->tx_desc_mapping = DESC_DMA_MAP_PAGE;
636 }
637
638 out:
639 cur_p->cntrl |= XMCDMA_BD_CTRL_TXEOF_MASK;
640 tail_p = q->tx_bd_p + sizeof(*q->txq_bd_v) * q->tx_bd_tail;
641 cur_p->tx_skb = (phys_addr_t)skb;
642 cur_p->tx_skb = (phys_addr_t)skb;
643
644 tail_p = q->tx_bd_p + sizeof(*q->tx_bd_v) * q->tx_bd_tail;
645 /* Ensure BD write before starting transfer */
646 wmb();
647
648 /* Start the transfer */
649 axienet_dma_bdout(q, XMCDMA_CHAN_TAILDESC_OFFSET(q->chan_id),
650 tail_p);
651 if (++q->tx_bd_tail >= lp->tx_bd_num)
652 q->tx_bd_tail = 0;
653
654 spin_unlock_irqrestore(&q->tx_lock, flags);
655
656 return NETDEV_TX_OK;
657 }
658
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2025-01-11 10:43 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202501111827.NGsNvOd2-lkp@intel.com \
--to=lkp@intel.com \
--cc=git@amd.com \
--cc=harini.katakam@xilinx.com \
--cc=monstr@monstr.eu \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=pranavi.somisetty@xilinx.com \
--cc=radhey.shyam.pandey@xilinx.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.