Hi Ong, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on net-next/master] url: https://github.com/0day-ci/linux/commits/Ong-Boon-Leong/stmmac-add-XDP-ZC-support/20210412-233847 base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 5b489fea977c2b23e26e2f630478da0f4bfdc879 config: m68k-randconfig-m031-20210412 (attached as .config) compiler: m68k-linux-gcc (GCC) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot New smatch warnings: drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:1587 stmmac_reinit_rx_buffers() warn: always true condition '(queue >= 0) => (0-u32max >= 0)' drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:1587 stmmac_reinit_rx_buffers() warn: always true condition '(queue >= 0) => (0-u32max >= 0)' Old smatch warnings: drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:4423 stmmac_xdp_run_prog() error: (-2147483647) too low for ERR_PTR vim +1587 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 1514 1515 /** 1516 * stmmac_reinit_rx_buffers - reinit the RX descriptor buffer. 1517 * @priv: driver private structure 1518 * Description: this function is called to re-allocate a receive buffer, perform 1519 * the DMA mapping and init the descriptor. 1520 */ 1521 static void stmmac_reinit_rx_buffers(struct stmmac_priv *priv) 1522 { 1523 u32 rx_count = priv->plat->rx_queues_to_use; 1524 u32 queue; 1525 int i; 1526 1527 for (queue = 0; queue < rx_count; queue++) { 1528 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 1529 1530 for (i = 0; i < priv->dma_rx_size; i++) { 1531 struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i]; 1532 1533 if (buf->page) { 1534 page_pool_recycle_direct(rx_q->page_pool, buf->page); 1535 buf->page = NULL; 1536 } 1537 1538 if (priv->sph && buf->sec_page) { 1539 page_pool_recycle_direct(rx_q->page_pool, buf->sec_page); 1540 buf->sec_page = NULL; 1541 } 1542 } 1543 } 1544 1545 for (queue = 0; queue < rx_count; queue++) { 1546 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 1547 1548 for (i = 0; i < priv->dma_rx_size; i++) { 1549 struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i]; 1550 struct dma_desc *p; 1551 1552 if (priv->extend_desc) 1553 p = &((rx_q->dma_erx + i)->basic); 1554 else 1555 p = rx_q->dma_rx + i; 1556 1557 if (!buf->page) { 1558 buf->page = page_pool_dev_alloc_pages(rx_q->page_pool); 1559 if (!buf->page) 1560 goto err_reinit_rx_buffers; 1561 1562 buf->addr = page_pool_get_dma_addr(buf->page) + 1563 buf->page_offset; 1564 } 1565 1566 if (priv->sph && !buf->sec_page) { 1567 buf->sec_page = page_pool_dev_alloc_pages(rx_q->page_pool); 1568 if (!buf->sec_page) 1569 goto err_reinit_rx_buffers; 1570 1571 buf->sec_addr = page_pool_get_dma_addr(buf->sec_page); 1572 } 1573 1574 stmmac_set_desc_addr(priv, p, buf->addr); 1575 if (priv->sph) 1576 stmmac_set_desc_sec_addr(priv, p, buf->sec_addr, true); 1577 else 1578 stmmac_set_desc_sec_addr(priv, p, buf->sec_addr, false); 1579 if (priv->dma_buf_sz == BUF_SIZE_16KiB) 1580 stmmac_init_desc3(priv, p); 1581 } 1582 } 1583 1584 return; 1585 1586 err_reinit_rx_buffers: > 1587 while (queue >= 0) { 1588 dma_free_rx_skbufs(priv, queue); 1589 1590 if (queue == 0) 1591 break; 1592 1593 queue--; 1594 } 1595 } 1596 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org