Hi Stanislav, I love your patch! Perhaps something to improve: [auto build test WARNING on bpf-next/master] url: https://github.com/intel-lab-lkp/linux/commits/Stanislav-Fomichev/xdp-hints-via-kfuncs/20221130-092141 base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master patch link: https://lore.kernel.org/r/20221129193452.3448944-11-sdf%40google.com patch subject: [PATCH bpf-next v3 10/11] mlx5: Support RX XDP metadata config: x86_64-allyesconfig compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce (this is a W=1 build): # https://github.com/intel-lab-lkp/linux/commit/2c58eefabc23df0888018d4ae3947270ed005c46 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Stanislav-Fomichev/xdp-hints-via-kfuncs/20221130-092141 git checkout 2c58eefabc23df0888018d4ae3947270ed005c46 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/net/ethernet/mellanox/mlx5/core/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All warnings (new ones prefixed by >>): In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: drivers/net/ethernet/mellanox/mlx5/core/en_rx.c: In function 'mlx5e_handle_rx_cqe_rep': >> drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1821:39: warning: passing argument 3 of 'mlx5e_skb_from_cqe_linear' makes pointer from integer without a cast [-Wint-conversion] 1821 | rq, wi, cqe_bcnt); | ^~~~~~~~ | | | u32 {aka unsigned int} include/linux/indirect_call_wrapper.h:23:38: note: in definition of macro 'INDIRECT_CALL_2' 23 | likely(f == f2) ? f2(__VA_ARGS__) : \ | ^~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1575:46: note: expected 'struct mlx5_cqe64 *' but argument is of type 'u32' {aka 'unsigned int'} 1575 | struct mlx5_cqe64 *cqe, u32 cqe_bcnt) | ~~~~~~~~~~~~~~~~~~~^~~ In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1819:31: error: too few arguments to function 'mlx5e_skb_from_cqe_linear' 1819 | mlx5e_skb_from_cqe_linear, | ^~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/indirect_call_wrapper.h:23:35: note: in definition of macro 'INDIRECT_CALL_2' 23 | likely(f == f2) ? f2(__VA_ARGS__) : \ | ^~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1574:1: note: declared here 1574 | mlx5e_skb_from_cqe_linear(struct mlx5e_rq *rq, struct mlx5e_wqe_frag_info *wi, | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: >> drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1821:39: warning: passing argument 3 of 'mlx5e_skb_from_cqe_nonlinear' makes pointer from integer without a cast [-Wint-conversion] 1821 | rq, wi, cqe_bcnt); | ^~~~~~~~ | | | u32 {aka unsigned int} include/linux/indirect_call_wrapper.h:19:38: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1818:15: note: in expansion of macro 'INDIRECT_CALL_2' 1818 | skb = INDIRECT_CALL_2(rq->wqe.skb_from_cqe, | ^~~~~~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1621:49: note: expected 'struct mlx5_cqe64 *' but argument is of type 'u32' {aka 'unsigned int'} 1621 | struct mlx5_cqe64 *cqe, u32 cqe_bcnt) | ~~~~~~~~~~~~~~~~~~~^~~ In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1820:31: error: too few arguments to function 'mlx5e_skb_from_cqe_nonlinear' 1820 | mlx5e_skb_from_cqe_nonlinear, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/indirect_call_wrapper.h:19:35: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1818:15: note: in expansion of macro 'INDIRECT_CALL_2' 1818 | skb = INDIRECT_CALL_2(rq->wqe.skb_from_cqe, | ^~~~~~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1620:1: note: declared here 1620 | mlx5e_skb_from_cqe_nonlinear(struct mlx5e_rq *rq, struct mlx5e_wqe_frag_info *wi, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1821:39: warning: passing argument 3 of 'rq->.wqe.skb_from_cqe' makes pointer from integer without a cast [-Wint-conversion] 1821 | rq, wi, cqe_bcnt); | ^~~~~~~~ | | | u32 {aka unsigned int} include/linux/indirect_call_wrapper.h:19:55: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1818:15: note: in expansion of macro 'INDIRECT_CALL_2' 1818 | skb = INDIRECT_CALL_2(rq->wqe.skb_from_cqe, | ^~~~~~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1821:39: note: expected 'struct mlx5_cqe64 *' but argument is of type 'u32' {aka 'unsigned int'} 1821 | rq, wi, cqe_bcnt); | ^~~~~~~~ include/linux/indirect_call_wrapper.h:19:55: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1818:15: note: in expansion of macro 'INDIRECT_CALL_2' 1818 | skb = INDIRECT_CALL_2(rq->wqe.skb_from_cqe, | ^~~~~~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1818:31: error: too few arguments to function 'rq->.wqe.skb_from_cqe' 1818 | skb = INDIRECT_CALL_2(rq->wqe.skb_from_cqe, | ^~ include/linux/indirect_call_wrapper.h:19:53: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1818:15: note: in expansion of macro 'INDIRECT_CALL_2' 1818 | skb = INDIRECT_CALL_2(rq->wqe.skb_from_cqe, | ^~~~~~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c: In function 'mlx5e_handle_rx_cqe_mpwrq_rep': >> drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1880:39: warning: passing argument 3 of 'mlx5e_skb_from_cqe_mpwrq_linear' makes pointer from integer without a cast [-Wint-conversion] 1880 | rq, wi, cqe_bcnt, head_offset, page_idx); | ^~~~~~~~ | | | u16 {aka short unsigned int} include/linux/indirect_call_wrapper.h:23:38: note: in definition of macro 'INDIRECT_CALL_2' 23 | likely(f == f2) ? f2(__VA_ARGS__) : \ | ^~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:65:52: note: expected 'struct mlx5_cqe64 *' but argument is of type 'u16' {aka 'short unsigned int'} 65 | struct mlx5_cqe64 *cqe, u16 cqe_bcnt, u32 head_offset, | ~~~~~~~~~~~~~~~~~~~^~~ In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1878:31: error: too few arguments to function 'mlx5e_skb_from_cqe_mpwrq_linear' 1878 | mlx5e_skb_from_cqe_mpwrq_linear, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/indirect_call_wrapper.h:23:35: note: in definition of macro 'INDIRECT_CALL_2' 23 | likely(f == f2) ? f2(__VA_ARGS__) : \ | ^~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:64:1: note: declared here 64 | mlx5e_skb_from_cqe_mpwrq_linear(struct mlx5e_rq *rq, struct mlx5e_mpw_info *wi, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: >> drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1880:39: warning: passing argument 3 of 'mlx5e_skb_from_cqe_mpwrq_nonlinear' makes pointer from integer without a cast [-Wint-conversion] 1880 | rq, wi, cqe_bcnt, head_offset, page_idx); | ^~~~~~~~ | | | u16 {aka short unsigned int} include/linux/indirect_call_wrapper.h:19:38: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1877:15: note: in expansion of macro 'INDIRECT_CALL_2' 1877 | skb = INDIRECT_CALL_2(rq->mpwqe.skb_from_cqe_mpwrq, | ^~~~~~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:69:55: note: expected 'struct mlx5_cqe64 *' but argument is of type 'u16' {aka 'short unsigned int'} 69 | struct mlx5_cqe64 *cqe, u16 cqe_bcnt, u32 head_offset, | ~~~~~~~~~~~~~~~~~~~^~~ In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1879:31: error: too few arguments to function 'mlx5e_skb_from_cqe_mpwrq_nonlinear' 1879 | mlx5e_skb_from_cqe_mpwrq_nonlinear, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/indirect_call_wrapper.h:19:35: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1877:15: note: in expansion of macro 'INDIRECT_CALL_2' 1877 | skb = INDIRECT_CALL_2(rq->mpwqe.skb_from_cqe_mpwrq, | ^~~~~~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:68:1: note: declared here 68 | mlx5e_skb_from_cqe_mpwrq_nonlinear(struct mlx5e_rq *rq, struct mlx5e_mpw_info *wi, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1880:39: warning: passing argument 3 of 'rq->.mpwqe.skb_from_cqe_mpwrq' makes pointer from integer without a cast [-Wint-conversion] 1880 | rq, wi, cqe_bcnt, head_offset, page_idx); | ^~~~~~~~ | | | u16 {aka short unsigned int} include/linux/indirect_call_wrapper.h:19:55: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1877:15: note: in expansion of macro 'INDIRECT_CALL_2' 1877 | skb = INDIRECT_CALL_2(rq->mpwqe.skb_from_cqe_mpwrq, | ^~~~~~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1880:39: note: expected 'struct mlx5_cqe64 *' but argument is of type 'u16' {aka 'short unsigned int'} 1880 | rq, wi, cqe_bcnt, head_offset, page_idx); | ^~~~~~~~ include/linux/indirect_call_wrapper.h:19:55: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1877:15: note: in expansion of macro 'INDIRECT_CALL_2' 1877 | skb = INDIRECT_CALL_2(rq->mpwqe.skb_from_cqe_mpwrq, | ^~~~~~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1877:31: error: too few arguments to function 'rq->.mpwqe.skb_from_cqe_mpwrq' 1877 | skb = INDIRECT_CALL_2(rq->mpwqe.skb_from_cqe_mpwrq, | ^~ include/linux/indirect_call_wrapper.h:19:53: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1877:15: note: in expansion of macro 'INDIRECT_CALL_2' 1877 | skb = INDIRECT_CALL_2(rq->mpwqe.skb_from_cqe_mpwrq, | ^~~~~~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c: In function 'mlx5i_handle_rx_cqe': drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:2488:39: warning: passing argument 3 of 'mlx5e_skb_from_cqe_linear' makes pointer from integer without a cast [-Wint-conversion] 2488 | rq, wi, cqe_bcnt); | ^~~~~~~~ | | | u32 {aka unsigned int} include/linux/indirect_call_wrapper.h:23:38: note: in definition of macro 'INDIRECT_CALL_2' 23 | likely(f == f2) ? f2(__VA_ARGS__) : \ | ^~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1575:46: note: expected 'struct mlx5_cqe64 *' but argument is of type 'u32' {aka 'unsigned int'} 1575 | struct mlx5_cqe64 *cqe, u32 cqe_bcnt) | ~~~~~~~~~~~~~~~~~~~^~~ In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:2486:31: error: too few arguments to function 'mlx5e_skb_from_cqe_linear' 2486 | mlx5e_skb_from_cqe_linear, | ^~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/indirect_call_wrapper.h:23:35: note: in definition of macro 'INDIRECT_CALL_2' 23 | likely(f == f2) ? f2(__VA_ARGS__) : \ | ^~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:1574:1: note: declared here 1574 | mlx5e_skb_from_cqe_linear(struct mlx5e_rq *rq, struct mlx5e_wqe_frag_info *wi, | ^~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/net/sock.h:62, from include/linux/tcp.h:19, from include/linux/ipv6.h:93, from drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:34: drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:2488:39: warning: passing argument 3 of 'mlx5e_skb_from_cqe_nonlinear' makes pointer from integer without a cast [-Wint-conversion] 2488 | rq, wi, cqe_bcnt); | ^~~~~~~~ | | | u32 {aka unsigned int} include/linux/indirect_call_wrapper.h:19:38: note: in definition of macro 'INDIRECT_CALL_1' 19 | likely(f == f1) ? f1(__VA_ARGS__) : f(__VA_ARGS__); \ | ^~~~~~~~~~~ drivers/net/ethernet/mellanox/mlx5/core/en_rx.c:2485:15: note: in expansion of macro 'INDIRECT_CALL_2' vim +/mlx5e_skb_from_cqe_linear +1821 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c e586b3b0baee89 Amir Vadai 2015-05-28 1795 e80541ecabd57b Saeed Mahameed 2017-06-05 1796 #ifdef CONFIG_MLX5_ESWITCH 5adf4c475aaa03 Tariq Toukan 2020-04-30 1797 static void mlx5e_handle_rx_cqe_rep(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe) f5f82476090fd2 Or Gerlitz 2016-09-22 1798 { f5f82476090fd2 Or Gerlitz 2016-09-22 1799 struct net_device *netdev = rq->netdev; f5f82476090fd2 Or Gerlitz 2016-09-22 1800 struct mlx5e_priv *priv = netdev_priv(netdev); 1d447a39142e0e Saeed Mahameed 2017-04-24 1801 struct mlx5e_rep_priv *rpriv = priv->ppriv; 1d447a39142e0e Saeed Mahameed 2017-04-24 1802 struct mlx5_eswitch_rep *rep = rpriv->rep; 99cbfa93a6122b Tariq Toukan 2018-04-02 1803 struct mlx5_wq_cyc *wq = &rq->wqe.wq; accd58833237d4 Tariq Toukan 2017-01-29 1804 struct mlx5e_wqe_frag_info *wi; f5f82476090fd2 Or Gerlitz 2016-09-22 1805 struct sk_buff *skb; f5f82476090fd2 Or Gerlitz 2016-09-22 1806 u32 cqe_bcnt; 99cbfa93a6122b Tariq Toukan 2018-04-02 1807 u16 ci; f5f82476090fd2 Or Gerlitz 2016-09-22 1808 99cbfa93a6122b Tariq Toukan 2018-04-02 1809 ci = mlx5_wq_cyc_ctr2ix(wq, be16_to_cpu(cqe->wqe_counter)); 99cbfa93a6122b Tariq Toukan 2018-04-02 1810 wi = get_frag(rq, ci); f5f82476090fd2 Or Gerlitz 2016-09-22 1811 cqe_bcnt = be32_to_cpu(cqe->byte_cnt); f5f82476090fd2 Or Gerlitz 2016-09-22 1812 0a35ab3e138296 Saeed Mahameed 2019-06-14 1813 if (unlikely(MLX5E_RX_ERR_CQE(cqe))) { 5dd29f40b25f91 Gal Pressman 2021-12-22 1814 mlx5e_handle_rx_err_cqe(rq, cqe); 0a35ab3e138296 Saeed Mahameed 2019-06-14 1815 goto free_wqe; 0a35ab3e138296 Saeed Mahameed 2019-06-14 1816 } 0a35ab3e138296 Saeed Mahameed 2019-06-14 1817 2901a5c618dd18 Tariq Toukan 2020-04-30 1818 skb = INDIRECT_CALL_2(rq->wqe.skb_from_cqe, 2901a5c618dd18 Tariq Toukan 2020-04-30 1819 mlx5e_skb_from_cqe_linear, 2901a5c618dd18 Tariq Toukan 2020-04-30 1820 mlx5e_skb_from_cqe_nonlinear, 84a137f051a571 Maxim Mikityanskiy 2022-01-20 @1821 rq, wi, cqe_bcnt); accd58833237d4 Tariq Toukan 2017-01-29 1822 if (!skb) { 069d11465a802a Tariq Toukan 2018-05-02 1823 /* probably for XDP */ 121e89275471dc Tariq Toukan 2017-12-12 1824 if (__test_and_clear_bit(MLX5E_RQ_FLAG_XDP_XMIT, rq->flags)) { 069d11465a802a Tariq Toukan 2018-05-02 1825 /* do not return page to cache, 069d11465a802a Tariq Toukan 2018-05-02 1826 * it will be returned on XDP_TX completion. 069d11465a802a Tariq Toukan 2018-05-02 1827 */ 99cbfa93a6122b Tariq Toukan 2018-04-02 1828 goto wq_cyc_pop; accd58833237d4 Tariq Toukan 2017-01-29 1829 } 069d11465a802a Tariq Toukan 2018-05-02 1830 goto free_wqe; accd58833237d4 Tariq Toukan 2017-01-29 1831 } f5f82476090fd2 Or Gerlitz 2016-09-22 1832 f5f82476090fd2 Or Gerlitz 2016-09-22 1833 mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb); f5f82476090fd2 Or Gerlitz 2016-09-22 1834 f5f82476090fd2 Or Gerlitz 2016-09-22 1835 if (rep->vlan && skb_vlan_tag_present(skb)) f5f82476090fd2 Or Gerlitz 2016-09-22 1836 skb_vlan_pop(skb); f5f82476090fd2 Or Gerlitz 2016-09-22 1837 28e7606fa8f106 Ariel Levkovich 2021-10-26 1838 mlx5e_rep_tc_receive(cqe, rq, skb); b8ce90370977db Paul Blakey 2020-02-16 1839 069d11465a802a Tariq Toukan 2018-05-02 1840 free_wqe: cb5189d173097a Tariq Toukan 2018-06-12 1841 mlx5e_free_rx_wqe(rq, wi, true); 99cbfa93a6122b Tariq Toukan 2018-04-02 1842 wq_cyc_pop: 99cbfa93a6122b Tariq Toukan 2018-04-02 1843 mlx5_wq_cyc_pop(wq); f5f82476090fd2 Or Gerlitz 2016-09-22 1844 } dfd9e7500cd4b2 Paul Blakey 2020-02-16 1845 5adf4c475aaa03 Tariq Toukan 2020-04-30 1846 static void mlx5e_handle_rx_cqe_mpwrq_rep(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe) dfd9e7500cd4b2 Paul Blakey 2020-02-16 1847 { dfd9e7500cd4b2 Paul Blakey 2020-02-16 1848 u16 cstrides = mpwrq_get_cqe_consumed_strides(cqe); dfd9e7500cd4b2 Paul Blakey 2020-02-16 1849 u16 wqe_id = be16_to_cpu(cqe->wqe_id); 258e655c00734d Maxim Mikityanskiy 2022-09-27 1850 struct mlx5e_mpw_info *wi = mlx5e_get_mpw_info(rq, wqe_id); dfd9e7500cd4b2 Paul Blakey 2020-02-16 1851 u16 stride_ix = mpwrq_get_cqe_stride_index(cqe); dfd9e7500cd4b2 Paul Blakey 2020-02-16 1852 u32 wqe_offset = stride_ix << rq->mpwqe.log_stride_sz; 997ce6affe264e Maxim Mikityanskiy 2022-09-27 1853 u32 head_offset = wqe_offset & ((1 << rq->mpwqe.page_shift) - 1); 997ce6affe264e Maxim Mikityanskiy 2022-09-27 1854 u32 page_idx = wqe_offset >> rq->mpwqe.page_shift; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1855 struct mlx5e_rx_wqe_ll *wqe; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1856 struct mlx5_wq_ll *wq; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1857 struct sk_buff *skb; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1858 u16 cqe_bcnt; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1859 dfd9e7500cd4b2 Paul Blakey 2020-02-16 1860 wi->consumed_strides += cstrides; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1861 dfd9e7500cd4b2 Paul Blakey 2020-02-16 1862 if (unlikely(MLX5E_RX_ERR_CQE(cqe))) { 5dd29f40b25f91 Gal Pressman 2021-12-22 1863 mlx5e_handle_rx_err_cqe(rq, cqe); dfd9e7500cd4b2 Paul Blakey 2020-02-16 1864 goto mpwrq_cqe_out; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1865 } dfd9e7500cd4b2 Paul Blakey 2020-02-16 1866 dfd9e7500cd4b2 Paul Blakey 2020-02-16 1867 if (unlikely(mpwrq_is_filler_cqe(cqe))) { dfd9e7500cd4b2 Paul Blakey 2020-02-16 1868 struct mlx5e_rq_stats *stats = rq->stats; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1869 dfd9e7500cd4b2 Paul Blakey 2020-02-16 1870 stats->mpwqe_filler_cqes++; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1871 stats->mpwqe_filler_strides += cstrides; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1872 goto mpwrq_cqe_out; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1873 } dfd9e7500cd4b2 Paul Blakey 2020-02-16 1874 dfd9e7500cd4b2 Paul Blakey 2020-02-16 1875 cqe_bcnt = mpwrq_get_cqe_byte_cnt(cqe); dfd9e7500cd4b2 Paul Blakey 2020-02-16 1876 dfd9e7500cd4b2 Paul Blakey 2020-02-16 1877 skb = INDIRECT_CALL_2(rq->mpwqe.skb_from_cqe_mpwrq, dfd9e7500cd4b2 Paul Blakey 2020-02-16 1878 mlx5e_skb_from_cqe_mpwrq_linear, dfd9e7500cd4b2 Paul Blakey 2020-02-16 1879 mlx5e_skb_from_cqe_mpwrq_nonlinear, dfd9e7500cd4b2 Paul Blakey 2020-02-16 @1880 rq, wi, cqe_bcnt, head_offset, page_idx); dfd9e7500cd4b2 Paul Blakey 2020-02-16 1881 if (!skb) dfd9e7500cd4b2 Paul Blakey 2020-02-16 1882 goto mpwrq_cqe_out; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1883 dfd9e7500cd4b2 Paul Blakey 2020-02-16 1884 mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb); dfd9e7500cd4b2 Paul Blakey 2020-02-16 1885 28e7606fa8f106 Ariel Levkovich 2021-10-26 1886 mlx5e_rep_tc_receive(cqe, rq, skb); b8ce90370977db Paul Blakey 2020-02-16 1887 dfd9e7500cd4b2 Paul Blakey 2020-02-16 1888 mpwrq_cqe_out: dfd9e7500cd4b2 Paul Blakey 2020-02-16 1889 if (likely(wi->consumed_strides < rq->mpwqe.num_strides)) dfd9e7500cd4b2 Paul Blakey 2020-02-16 1890 return; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1891 dfd9e7500cd4b2 Paul Blakey 2020-02-16 1892 wq = &rq->mpwqe.wq; dfd9e7500cd4b2 Paul Blakey 2020-02-16 1893 wqe = mlx5_wq_ll_get_wqe(wq, wqe_id); dfd9e7500cd4b2 Paul Blakey 2020-02-16 1894 mlx5e_free_rx_mpwqe(rq, wi, true); dfd9e7500cd4b2 Paul Blakey 2020-02-16 1895 mlx5_wq_ll_pop(wq, cqe->wqe_id, &wqe->next.next_wqe_index); dfd9e7500cd4b2 Paul Blakey 2020-02-16 1896 } 5adf4c475aaa03 Tariq Toukan 2020-04-30 1897 -- 0-DAY CI Kernel Test Service https://01.org/lkp