Re: [PATCH v2 3/3] iommu: dart: Add DART iommu driver

From: kernel test robot
Date: Sun Mar 28 2021 - 06:04:50 EST


Hi Sven,

I love your patch! Yet something to improve:

[auto build test ERROR on arm-perf/for-next/perf]
[also build test ERROR on linus/master v5.12-rc4]
[cannot apply to iommu/next next-20210326]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Sven-Peter/Apple-M1-DART-IOMMU-driver/20210328-154437
base: https://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git for-next/perf
config: sparc-allmodconfig (attached as .config)
compiler: sparc64-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
# https://github.com/0day-ci/linux/commit/ecad602f1731c2ad5ba1579d56da519e38f57b2b
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Sven-Peter/Apple-M1-DART-IOMMU-driver/20210328-154437
git checkout ecad602f1731c2ad5ba1579d56da519e38f57b2b
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sparc

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All error/warnings (new ones prefixed by >>):

drivers/iommu/apple-dart-iommu.c: In function 'apple_dart_finalize_domain':
>> drivers/iommu/apple-dart-iommu.c:427:34: error: implicit declaration of function 'DMA_BIT_MASK'; did you mean 'BIT_MASK'? [-Werror=implicit-function-declaration]
427 | domain->geometry.aperture_end = DMA_BIT_MASK(32);
| ^~~~~~~~~~~~
| BIT_MASK
drivers/iommu/apple-dart-iommu.c: In function 'apple_dart_attach_stream':
>> drivers/iommu/apple-dart-iommu.c:456:11: error: implicit declaration of function 'kzalloc'; did you mean 'kvzalloc'? [-Werror=implicit-function-declaration]
456 | stream = kzalloc(sizeof(*stream), GFP_KERNEL);
| ^~~~~~~
| kvzalloc
>> drivers/iommu/apple-dart-iommu.c:456:9: warning: assignment to 'struct apple_dart_stream *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
456 | stream = kzalloc(sizeof(*stream), GFP_KERNEL);
| ^
drivers/iommu/apple-dart-iommu.c: In function 'apple_dart_detach_stream':
>> drivers/iommu/apple-dart-iommu.c:523:5: error: implicit declaration of function 'kfree'; did you mean 'kvfree'? [-Werror=implicit-function-declaration]
523 | kfree(stream);
| ^~~~~
| kvfree
drivers/iommu/apple-dart-iommu.c: In function 'apple_dart_domain_alloc':
>> drivers/iommu/apple-dart-iommu.c:627:14: warning: assignment to 'struct apple_dart_domain *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
627 | dart_domain = kzalloc(sizeof(*dart_domain), GFP_KERNEL);
| ^
drivers/iommu/apple-dart-iommu.c: In function 'apple_dart_of_xlate':
>> drivers/iommu/apple-dart-iommu.c:659:7: warning: assignment to 'struct apple_dart_master_cfg *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
659 | cfg = kzalloc(struct_size(cfg, streams, 1), GFP_KERNEL);
| ^
>> drivers/iommu/apple-dart-iommu.c:663:13: error: implicit declaration of function 'krealloc'; did you mean 'kvcalloc'? [-Werror=implicit-function-declaration]
663 | cfg_new = krealloc(
| ^~~~~~~~
| kvcalloc
drivers/iommu/apple-dart-iommu.c:663:11: warning: assignment to 'struct apple_dart_master_cfg *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
663 | cfg_new = krealloc(
| ^
cc1: some warnings being treated as errors


vim +427 drivers/iommu/apple-dart-iommu.c

397
398 /* must be called with held dart_domain->lock */
399 static int apple_dart_finalize_domain(struct iommu_domain *domain)
400 {
401 struct apple_dart_domain *dart_domain = to_dart_domain(domain);
402 struct apple_dart *dart = dart_domain->dart;
403 struct io_pgtable_cfg pgtbl_cfg;
404
405 if (dart_domain->pgtbl_ops)
406 return 0;
407 if (dart_domain->type != IOMMU_DOMAIN_DMA &&
408 dart_domain->type != IOMMU_DOMAIN_UNMANAGED)
409 return 0;
410
411 pgtbl_cfg = (struct io_pgtable_cfg){
412 .pgsize_bitmap = SZ_16K,
413 .ias = 32,
414 .oas = 36,
415 .coherent_walk = 1,
416 .tlb = &apple_dart_tlb_ops,
417 .iommu_dev = dart->dev,
418 };
419
420 dart_domain->pgtbl_ops =
421 alloc_io_pgtable_ops(ARM_APPLE_DART, &pgtbl_cfg, domain);
422 if (!dart_domain->pgtbl_ops)
423 return -ENOMEM;
424
425 domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
426 domain->geometry.aperture_start = 0;
> 427 domain->geometry.aperture_end = DMA_BIT_MASK(32);
428 domain->geometry.force_aperture = true;
429
430 return 0;
431 }
432
433 /* must be called with held domain->lock */
434 static int apple_dart_attach_stream(struct apple_dart_domain *domain,
435 struct apple_dart *dart, u32 sid)
436 {
437 unsigned long flags;
438 struct apple_dart_stream *stream;
439 struct io_pgtable_cfg *pgtbl_cfg;
440 int ret;
441
442 list_for_each_entry(stream, &domain->streams, stream_head) {
443 if (stream->dart == dart && stream->sid == sid) {
444 stream->num_devices++;
445 return 0;
446 }
447 }
448
449 spin_lock_irqsave(&dart->lock, flags);
450
451 if (WARN_ON(dart->used_sids & BIT(sid))) {
452 ret = -EINVAL;
453 goto error;
454 }
455
> 456 stream = kzalloc(sizeof(*stream), GFP_KERNEL);
457 if (!stream) {
458 ret = -ENOMEM;
459 goto error;
460 }
461
462 stream->dart = dart;
463 stream->sid = sid;
464 stream->num_devices = 1;
465 list_add(&stream->stream_head, &domain->streams);
466
467 dart->used_sids |= BIT(sid);
468 spin_unlock_irqrestore(&dart->lock, flags);
469
470 apple_dart_hw_clear_all_ttbrs(stream->dart, stream->sid);
471
472 switch (domain->type) {
473 case IOMMU_DOMAIN_IDENTITY:
474 apple_dart_hw_enable_bypass(stream->dart, stream->sid);
475 break;
476 case IOMMU_DOMAIN_BLOCKED:
477 apple_dart_hw_enable_isolation(stream->dart, stream->sid);
478 break;
479 case IOMMU_DOMAIN_UNMANAGED:
480 case IOMMU_DOMAIN_DMA:
481 pgtbl_cfg = &io_pgtable_ops_to_pgtable(domain->pgtbl_ops)->cfg;
482 apple_dart_hw_set_ttbr(stream->dart, stream->sid, 0,
483 pgtbl_cfg->apple_dart_cfg.ttbr);
484
485 apple_dart_hw_enable_translation(stream->dart, stream->sid);
486 apple_dart_hw_invalidate_tlb_stream(stream->dart, stream->sid);
487 break;
488 }
489
490 return 0;
491
492 error:
493 spin_unlock_irqrestore(&dart->lock, flags);
494 return ret;
495 }
496
497 static void apple_dart_disable_stream(struct apple_dart *dart, u32 sid)
498 {
499 unsigned long flags;
500
501 apple_dart_hw_enable_isolation(dart, sid);
502 apple_dart_hw_clear_all_ttbrs(dart, sid);
503 apple_dart_hw_invalidate_tlb_stream(dart, sid);
504
505 spin_lock_irqsave(&dart->lock, flags);
506 dart->used_sids &= ~BIT(sid);
507 spin_unlock_irqrestore(&dart->lock, flags);
508 }
509
510 /* must be called with held domain->lock */
511 static void apple_dart_detach_stream(struct apple_dart_domain *domain,
512 struct apple_dart *dart, u32 sid)
513 {
514 struct apple_dart_stream *stream;
515
516 list_for_each_entry(stream, &domain->streams, stream_head) {
517 if (stream->dart == dart && stream->sid == sid) {
518 stream->num_devices--;
519
520 if (stream->num_devices == 0) {
521 apple_dart_disable_stream(dart, sid);
522 list_del(&stream->stream_head);
> 523 kfree(stream);
524 }
525 return;
526 }
527 }
528 }
529

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip