Hi Kishon,
FYI, the error/warning still remains.
tree:
https://github.com/omap-audio/linux-audio peter/ti-linux-5.4.y/wip
head: b4f85091e9145f08540a95ccfc77702508dc77b2
commit: e931ab2e52fa70488b568ee9e88873206e3b1118 [3077/8798] PCI: endpoint: Add EP
function driver to provide NTB functionality
config: s390-randconfig-r002-20200811 (attached as .config)
compiler: s390-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout e931ab2e52fa70488b568ee9e88873206e3b1118
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=s390
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>):
drivers/pci/endpoint/functions/pci-epf-ntb.c: In function
'epf_ntb_peer_spad_bar_set':
> drivers/pci/endpoint/functions/pci-epf-ntb.c:296:18: warning:
variable 'epc' set but not used [-Wunused-but-set-variable]
296 |
struct pci_epc *epc;
| ^~~
drivers/pci/endpoint/functions/pci-epf-ntb.c: In function
'epf_ntb_config_spad_bar_alloc_interface':
drivers/pci/endpoint/functions/pci-epf-ntb.c:403:18: warning: variable 'epc'
set but not used [-Wunused-but-set-variable]
403 | struct pci_epc *epc;
| ^~~
> drivers/pci/endpoint/functions/pci-epf-ntb.c:398:17: warning:
variable 'peer_barno' set but not used [-Wunused-but-set-variable]
398
| enum pci_barno peer_barno;
| ^~~~~~~~~~
vim +/epc +296 drivers/pci/endpoint/functions/pci-epf-ntb.c
284
285 static int
286 epf_ntb_peer_spad_bar_set(struct epf_ntb *ntb, enum pci_epc_interface_type type)
287 {
288 struct epf_ntb_epc *peer_ntb_epc;
289 struct pci_epf_bar *peer_epf_bar;
290 struct epf_ntb_epc *ntb_epc;
291 struct pci_epf_bar *epf_bar;
292 enum pci_barno peer_barno;
293 u32 peer_spad_offset;
294 enum pci_barno barno;
295 u8 vfunc_no, func_no;
296 struct pci_epc *epc;
297 struct device *dev;
298 int ret;
299
300 dev = &ntb->epf->dev;
301
302 peer_ntb_epc = ntb->epc[!type];
303 peer_barno = peer_ntb_epc->epf_ntb_bar[BAR_CONFIG];
304 peer_epf_bar = &peer_ntb_epc->epf_bar[peer_barno];
305
306 ntb_epc = ntb->epc[type];
307 barno = ntb_epc->epf_ntb_bar[BAR_PEER_SPAD];
308 epf_bar = &ntb_epc->epf_bar[barno];
309 func_no = ntb_epc->func_no;
310 vfunc_no = ntb_epc->vfunc_no;
311 epc = ntb_epc->epc;
312
313 peer_spad_offset = peer_ntb_epc->reg->spad_offset;
314 epf_bar->phys_addr = peer_epf_bar->phys_addr + peer_spad_offset;
315 epf_bar->size = peer_ntb_epc->spad_size;
316 epf_bar->barno = barno;
317 epf_bar->flags = PCI_BASE_ADDRESS_MEM_TYPE_32;
318
319 ret = pci_epc_set_bar(ntb_epc->epc, func_no, vfunc_no, epf_bar);
320 if (ret) {
321 dev_err(dev, "%s intf: peer SPAD BAR set failed\n",
322 pci_epc_interface_string(type));
323 return ret;
324 }
325
326 return 0;
327 }
328
329 static void epf_ntb_config_sspad_bar_clear(struct epf_ntb_epc *ntb_epc)
330 {
331 struct pci_epf_bar *epf_bar;
332 u8 vfunc_no, func_no;
333 enum pci_barno barno;
334 struct pci_epc *epc;
335
336 epc = ntb_epc->epc;
337 func_no = ntb_epc->func_no;
338 vfunc_no = ntb_epc->vfunc_no;
339 barno = ntb_epc->epf_ntb_bar[BAR_CONFIG];
340 epf_bar = &ntb_epc->epf_bar[barno];
341 pci_epc_clear_bar(epc, func_no, vfunc_no, epf_bar);
342 }
343
344 static int epf_ntb_config_sspad_bar_set(struct epf_ntb_epc *ntb_epc)
345 {
346 struct pci_epf_bar *epf_bar;
347 enum pci_barno barno;
348 u8 vfunc_no, func_no;
349 struct epf_ntb *ntb;
350 struct pci_epc *epc;
351 struct device *dev;
352 int ret;
353
354 ntb = ntb_epc->epf_ntb;
355 dev = &ntb->epf->dev;
356
357 epc = ntb_epc->epc;
358 func_no = ntb_epc->func_no;
359 vfunc_no = ntb_epc->vfunc_no;
360 barno = ntb_epc->epf_ntb_bar[BAR_CONFIG];
361 epf_bar = &ntb_epc->epf_bar[barno];
362
363 ret = pci_epc_set_bar(epc, func_no, vfunc_no, epf_bar);
364 if (ret) {
365 dev_err(dev, "%s inft: Config/Status/SPAD BAR set failed\n",
366 pci_epc_interface_string(ntb_epc->type));
367 return ret;
368 }
369
370 return 0;
371 }
372
373 static void epf_ntb_config_spad_bar_free(struct epf_ntb *ntb)
374 {
375 enum pci_epc_interface_type type;
376 struct epf_ntb_epc *ntb_epc;
377 enum pci_barno barno;
378 struct pci_epf *epf;
379
380 epf = ntb->epf;
381 for (type = PRIMARY_INTERFACE; type <= SECONDARY_INTERFACE; type++) {
382 ntb_epc = ntb->epc[type];
383 barno = ntb_epc->epf_ntb_bar[BAR_CONFIG];
384 if (ntb_epc->reg)
385 pci_epf_free_space(epf, ntb_epc->reg, barno, type);
386 }
387 }
388
389 static int
390 epf_ntb_config_spad_bar_alloc_interface(struct epf_ntb *ntb,
391 enum pci_epc_interface_type type)
392 {
393 const struct pci_epc_features *peer_epc_features;
394 const struct pci_epc_features *epc_features;
395 struct epf_ntb_epc *peer_ntb_epc;
396 struct epf_ntb_epc *ntb_epc;
397 struct epf_ntb_ctrl *ctrl;
398 enum pci_barno peer_barno;
399 struct device_node
*node;
400 u32 spad_size, ctrl_size;
401 enum pci_barno barno;
402 u64 size, peer_size;
403 struct pci_epc *epc;
404 struct pci_epf *epf;
405 struct device *dev;
406 u32 spad_count;
407 size_t align;
408 void *base;
409
410 epf = ntb->epf;
411 node = epf->node;
412 dev = &epf->dev;
413 ntb_epc = ntb->epc[type];
414 epc = ntb_epc->epc;
415
416 epc_features = ntb_epc->epc_features;
417 barno = ntb_epc->epf_ntb_bar[BAR_CONFIG];
418 size = epc_features->bar_fixed_size[barno];
419 align = epc_features->align;
420
421 peer_ntb_epc = ntb->epc[!type];
422 peer_epc_features = peer_ntb_epc->epc_features;
423 peer_barno = ntb_epc->epf_ntb_bar[BAR_PEER_SPAD];
424 peer_size = peer_epc_features->bar_fixed_size[barno];
425
426 /* Check if epc_features is populated incorrectly */
427 if ((!IS_ALIGNED(size, align)))
428 return -EINVAL;
429
430 spad_count = SPAD_COUNT;
431 of_property_read_u32(node, "spad-count", &spad_count);
432
433 ctrl_size = sizeof(struct epf_ntb_ctrl);
434 spad_size = spad_count * 4;
435
436 if (!align) {
437 ctrl_size = roundup_pow_of_two(ctrl_size);
438 spad_size = roundup_pow_of_two(spad_size);
439 } else {
440 ctrl_size = ALIGN(ctrl_size, align);
441 spad_size = ALIGN(spad_size, align);
442 }
443
444 if (peer_size) {
445 if (peer_size < spad_size)
446 spad_count = peer_size / 4;
447 spad_size = peer_size;
448 }
449
450 /*
451 * In order to make sure SPAD offset is aligned to its size,
452 * expand control region size to the size of SPAD if SPAD size
453 * is greater than control region size.
454 */
455 if (spad_size > ctrl_size)
456 ctrl_size = spad_size;
457
458 if (!size)
459 size = ctrl_size + spad_size;
460 else if (size < ctrl_size + spad_size)
461 return -EINVAL;
462
463 base = pci_epf_alloc_space(epf, size, barno, align, type);
464 if (!base) {
465 dev_err(dev, "%s intf: Config/Status/SPAD alloc region fail\n",
466 pci_epc_interface_string(type));
467 return -ENOMEM;
468 }
469
470 ntb_epc->reg = base;
471
472 ctrl = ntb_epc->reg;
473 ctrl->spad_offset = ctrl_size;
474 ctrl->spad_count = spad_count;
475 ctrl->num_mws = ntb->num_mws;
476 ctrl->db_entry_size = align ? align : 4;
477 ntb_epc->spad_size = spad_size;
478
479 return 0;
480 }
481
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org