Hi Maxim,
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/Maxim-Mikityanskiy/HTB-offload/2...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
afae3cc2da100ead3cd6ef4bb1fb8bc9d4b817c5
config: x86_64-randconfig-s021-20201210 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-179-ga00755aa-dirty
#
https://github.com/0day-ci/linux/commit/2b06403da63c880ec87d0bcee80b89361...
git remote add linux-review
https://github.com/0day-ci/linux
git fetch --no-tags linux-review Maxim-Mikityanskiy/HTB-offload/20201210-000703
git checkout 2b06403da63c880ec87d0bcee80b8936116935c6
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
"sparse warnings: (new ones prefixed by >>)"
> drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:135:17: sparse:
sparse: incorrect type in assignment (different address spaces) @@ expected struct
mlx5e_txqsq **qos_sqs @@ got struct mlx5e_txqsq [noderef] __rcu ** @@
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:135:17: sparse: expected struct
mlx5e_txqsq **qos_sqs
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:135:17: sparse: got struct
mlx5e_txqsq [noderef] __rcu **
> drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:149:50: sparse:
sparse: incompatible types in comparison expression (different address spaces):
> drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:149:50: sparse: struct
mlx5e_txqsq [noderef] __rcu *
> drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:149:50: sparse: struct
mlx5e_txqsq *
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:211:50: sparse:
sparse: incompatible types in comparison expression (different address spaces):
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:211:50: sparse: struct mlx5e_txqsq
[noderef] __rcu *
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c:211:50: sparse: struct mlx5e_txqsq
*
--
> drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:174:17: sparse:
sparse: incorrect type in assignment (different address spaces) @@ expected struct
mlx5e_txqsq **qos_sqs @@ got struct mlx5e_txqsq [noderef] __rcu ** @@
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:174:17: sparse: expected struct
mlx5e_txqsq **qos_sqs
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:174:17: sparse: got struct
mlx5e_txqsq [noderef] __rcu **
> drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:175:16: sparse:
sparse: incompatible types in comparison expression (different address spaces):
> drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:175:16: sparse: struct
mlx5e_txqsq [noderef] __rcu *
> drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:175:16: sparse: struct
mlx5e_txqsq *
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:225:17: sparse:
sparse: incorrect type in assignment (different address spaces) @@ expected struct
mlx5e_txqsq **qos_sqs @@ got struct mlx5e_txqsq [noderef] __rcu ** @@
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:225:17: sparse: expected struct
mlx5e_txqsq **qos_sqs
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:225:17: sparse: got struct
mlx5e_txqsq [noderef] __rcu **
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:245:9: sparse: sparse: incompatible
types in comparison expression (different address spaces):
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:245:9: sparse: struct mlx5e_txqsq
[noderef] __rcu *
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:245:9: sparse: struct mlx5e_txqsq
*
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:301:17: sparse: sparse: incorrect type
in assignment (different address spaces) @@ expected struct mlx5e_txqsq **qos_sqs @@
got struct mlx5e_txqsq [noderef] __rcu ** @@
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: sparse: incompatible
types in comparison expression (different address spaces):
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: struct mlx5e_txqsq
[noderef] __rcu *
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: struct mlx5e_txqsq
*
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: sparse: incompatible
types in comparison expression (different address spaces):
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: struct mlx5e_txqsq
[noderef] __rcu *
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:302:14: sparse: struct mlx5e_txqsq
*
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:326:22: sparse: sparse: incompatible
types in comparison expression (different address spaces):
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:326:22: sparse: struct mlx5e_txqsq
[noderef] __rcu *
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:326:22: sparse: struct mlx5e_txqsq
*
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:423:17: sparse: sparse: incorrect type
in assignment (different address spaces) @@ expected struct mlx5e_txqsq **qos_sqs @@
got struct mlx5e_txqsq [noderef] __rcu ** @@
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:423:17: sparse: expected struct
mlx5e_txqsq **qos_sqs
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:423:17: sparse: got struct
mlx5e_txqsq [noderef] __rcu **
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:431:22: sparse: sparse: incompatible
types in comparison expression (different address spaces):
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:431:22: sparse: struct mlx5e_txqsq
[noderef] __rcu *
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:431:22: sparse: struct mlx5e_txqsq
*
vim +135 drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c
115
116 int mlx5e_napi_poll(struct napi_struct *napi, int budget)
117 {
118 struct mlx5e_channel *c = container_of(napi, struct mlx5e_channel,
119 napi);
120 struct mlx5e_ch_stats *ch_stats = c->stats;
121 struct mlx5e_xdpsq *xsksq = &c->xsksq;
122 struct mlx5e_rq *xskrq = &c->xskrq;
123 struct mlx5e_rq *rq = &c->rq;
124 struct mlx5e_txqsq **qos_sqs;
125 bool aff_change = false;
126 bool busy_xsk = false;
127 bool busy = false;
128 int work_done = 0;
129 u16 qos_sqs_size;
130 bool xsk_open;
131 int i;
132
133 rcu_read_lock();
134
135 qos_sqs = rcu_dereference(c->qos_sqs);
136
137 xsk_open = test_bit(MLX5E_CHANNEL_STATE_XSK, c->state);
138
139 ch_stats->poll++;
140
141 for (i = 0; i < c->num_tc; i++)
142 busy |= mlx5e_poll_tx_cq(&c->sq[i].cq, budget);
143
144 if (unlikely(qos_sqs)) {
145 smp_rmb(); /* Pairs with mlx5e_qos_alloc_queues. */
146 qos_sqs_size = READ_ONCE(c->qos_sqs_size);
147
148 for (i = 0; i < qos_sqs_size; i++) {
149 struct mlx5e_txqsq *sq = rcu_dereference(qos_sqs[i]);
150
151 if (sq)
152 busy |= mlx5e_poll_tx_cq(&sq->cq, budget);
153 }
154 }
155
156 busy |= mlx5e_poll_xdpsq_cq(&c->xdpsq.cq);
157
158 if (c->xdp)
159 busy |= mlx5e_poll_xdpsq_cq(&c->rq_xdpsq.cq);
160
161 if (likely(budget)) { /* budget=0 means: don't poll rx rings */
162 if (xsk_open)
163 work_done = mlx5e_poll_rx_cq(&xskrq->cq, budget);
164
165 if (likely(budget - work_done))
166 work_done += mlx5e_poll_rx_cq(&rq->cq, budget - work_done);
167
168 busy |= work_done == budget;
169 }
170
171 mlx5e_poll_ico_cq(&c->icosq.cq);
172 if (mlx5e_poll_ico_cq(&c->async_icosq.cq))
173 /* Don't clear the flag if nothing was polled to prevent
174 * queueing more WQEs and overflowing the async ICOSQ.
175 */
176 clear_bit(MLX5E_SQ_STATE_PENDING_XSK_TX, &c->async_icosq.state);
177
178 busy |= INDIRECT_CALL_2(rq->post_wqes,
179 mlx5e_post_rx_mpwqes,
180 mlx5e_post_rx_wqes,
181 rq);
182 if (xsk_open) {
183 busy |= mlx5e_poll_xdpsq_cq(&xsksq->cq);
184 busy_xsk |= mlx5e_napi_xsk_post(xsksq, xskrq);
185 }
186
187 busy |= busy_xsk;
188
189 if (busy) {
190 if (likely(mlx5e_channel_no_affinity_change(c))) {
191 work_done = budget;
192 goto out;
193 }
194 ch_stats->aff_change++;
195 aff_change = true;
196 if (budget && work_done == budget)
197 work_done--;
198 }
199
200 if (unlikely(!napi_complete_done(napi, work_done)))
201 goto out;
202
203 ch_stats->arm++;
204
205 for (i = 0; i < c->num_tc; i++) {
206 mlx5e_handle_tx_dim(&c->sq[i]);
207 mlx5e_cq_arm(&c->sq[i].cq);
208 }
209 if (unlikely(qos_sqs)) {
210 for (i = 0; i < qos_sqs_size; i++) {
211 struct mlx5e_txqsq *sq = rcu_dereference(qos_sqs[i]);
212
213 if (sq) {
214 mlx5e_handle_tx_dim(sq);
215 mlx5e_cq_arm(&sq->cq);
216 }
217 }
218 }
219
220 mlx5e_handle_rx_dim(rq);
221
222 mlx5e_cq_arm(&rq->cq);
223 mlx5e_cq_arm(&c->icosq.cq);
224 mlx5e_cq_arm(&c->async_icosq.cq);
225 mlx5e_cq_arm(&c->xdpsq.cq);
226
227 if (xsk_open) {
228 mlx5e_handle_rx_dim(xskrq);
229 mlx5e_cq_arm(&xsksq->cq);
230 mlx5e_cq_arm(&xskrq->cq);
231 }
232
233 if (unlikely(aff_change && busy_xsk)) {
234 mlx5e_trigger_irq(&c->icosq);
235 ch_stats->force_irq++;
236 }
237
238 out:
239 rcu_read_unlock();
240
241 return work_done;
242 }
243
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org