tree: https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git x86/vt-d head: 423d39d8518c1bba12e0889a92beeddbb1502392 commit: a8e5f04458c4e496eada2b029ce96713bb6c388d [41/59] iommu/io-pgtable: Remove non-strict quirk config: nds32-buildonly-randconfig-r001-20210820 (attached as .config) compiler: nds32le-linux-gcc (GCC) 11.2.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://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git/commit/?id=a8e5f04458c4e496eada2b029ce96713bb6c388d git remote add iommu https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git git fetch --no-tags iommu x86/vt-d git checkout a8e5f04458c4e496eada2b029ce96713bb6c388d # save the attached .config to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=nds32 SHELL=/bin/bash drivers/iommu/
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> All errors (new ones prefixed by >>): In file included from include/linux/init.h:5, from arch/nds32/include/asm/nds32.h:11, from arch/nds32/include/asm/irqflags.h:4, from include/linux/irqflags.h:16, from include/asm-generic/cmpxchg.h:15, from ./arch/nds32/include/generated/asm/cmpxchg.h:1, from include/asm-generic/atomic.h:12, from ./arch/nds32/include/generated/asm/atomic.h:1, from include/linux/atomic.h:7, from drivers/iommu/io-pgtable-arm-v7s.c:24: drivers/iommu/io-pgtable-arm-v7s.c: In function '__arm_v7s_unmap': >> drivers/iommu/io-pgtable-arm-v7s.c:703:43: error: 'struct >> iommu_iotlb_gather' has no member named 'queued' 703 | } else if (!gather->queued) { | ^~ include/linux/compiler.h:58:52: note: in definition of macro '__trace_if_var' 58 | #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond)) | ^~~~ drivers/iommu/io-pgtable-arm-v7s.c:703:32: note: in expansion of macro 'if' 703 | } else if (!gather->queued) { | ^~ >> drivers/iommu/io-pgtable-arm-v7s.c:703:43: error: 'struct >> iommu_iotlb_gather' has no member named 'queued' 703 | } else if (!gather->queued) { | ^~ include/linux/compiler.h:58:61: note: in definition of macro '__trace_if_var' 58 | #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond)) | ^~~~ drivers/iommu/io-pgtable-arm-v7s.c:703:32: note: in expansion of macro 'if' 703 | } else if (!gather->queued) { | ^~ >> drivers/iommu/io-pgtable-arm-v7s.c:703:43: error: 'struct >> iommu_iotlb_gather' has no member named 'queued' 703 | } else if (!gather->queued) { | ^~ include/linux/compiler.h:69:10: note: in definition of macro '__trace_if_value' 69 | (cond) ? \ | ^~~~ include/linux/compiler.h:56:28: note: in expansion of macro '__trace_if_var' 56 | #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) ) | ^~~~~~~~~~~~~~ drivers/iommu/io-pgtable-arm-v7s.c:703:32: note: in expansion of macro 'if' 703 | } else if (!gather->queued) { | ^~ vim +703 drivers/iommu/io-pgtable-arm-v7s.c 650 651 static size_t __arm_v7s_unmap(struct arm_v7s_io_pgtable *data, 652 struct iommu_iotlb_gather *gather, 653 unsigned long iova, size_t size, int lvl, 654 arm_v7s_iopte *ptep) 655 { 656 arm_v7s_iopte pte[ARM_V7S_CONT_PAGES]; 657 struct io_pgtable *iop = &data->iop; 658 int idx, i = 0, num_entries = size >> ARM_V7S_LVL_SHIFT(lvl); 659 660 /* Something went horribly wrong and we ran out of page table */ 661 if (WARN_ON(lvl > 2)) 662 return 0; 663 664 idx = ARM_V7S_LVL_IDX(iova, lvl, &iop->cfg); 665 ptep += idx; 666 do { 667 pte[i] = READ_ONCE(ptep[i]); 668 if (WARN_ON(!ARM_V7S_PTE_IS_VALID(pte[i]))) 669 return 0; 670 } while (++i < num_entries); 671 672 /* 673 * If we've hit a contiguous 'large page' entry at this level, it 674 * needs splitting first, unless we're unmapping the whole lot. 675 * 676 * For splitting, we can't rewrite 16 PTEs atomically, and since we 677 * can't necessarily assume TEX remap we don't have a software bit to 678 * mark live entries being split. In practice (i.e. DMA API code), we 679 * will never be splitting large pages anyway, so just wrap this edge 680 * case in a lock for the sake of correctness and be done with it. 681 */ 682 if (num_entries <= 1 && arm_v7s_pte_is_cont(pte[0], lvl)) { 683 unsigned long flags; 684 685 spin_lock_irqsave(&data->split_lock, flags); 686 pte[0] = arm_v7s_split_cont(data, iova, idx, lvl, ptep); 687 spin_unlock_irqrestore(&data->split_lock, flags); 688 } 689 690 /* If the size matches this level, we're in the right place */ 691 if (num_entries) { 692 size_t blk_size = ARM_V7S_BLOCK_SIZE(lvl); 693 694 __arm_v7s_set_pte(ptep, 0, num_entries, &iop->cfg); 695 696 for (i = 0; i < num_entries; i++) { 697 if (ARM_V7S_PTE_IS_TABLE(pte[i], lvl)) { 698 /* Also flush any partial walks */ 699 io_pgtable_tlb_flush_walk(iop, iova, blk_size, 700 ARM_V7S_BLOCK_SIZE(lvl + 1)); 701 ptep = iopte_deref(pte[i], lvl, data); 702 __arm_v7s_free_table(ptep, lvl + 1, data); > 703 } else if (!gather->queued) { 704 io_pgtable_tlb_add_page(iop, gather, iova, blk_size); 705 } 706 iova += blk_size; 707 } 708 return size; 709 } else if (lvl == 1 && !ARM_V7S_PTE_IS_TABLE(pte[0], lvl)) { 710 /* 711 * Insert a table at the next level to map the old region, 712 * minus the part we want to unmap 713 */ 714 return arm_v7s_split_blk_unmap(data, gather, iova, size, pte[0], 715 ptep); 716 } 717 718 /* Keep on walkin' */ 719 ptep = iopte_deref(pte[0], lvl, data); 720 return __arm_v7s_unmap(data, gather, iova, size, lvl + 1, ptep); 721 } 722 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org
.config.gz
Description: application/gzip
_______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu