Looks like Oded is fixing it by adding #include <linux/percpu.h> before
including mmu_context.h. But I still think this is a bug in the SPARC
headers. The header file that depends on percpu.h should include it.

Regards,
  Felix


On 2017-09-02 08:13 PM, kbuild test robot wrote:
> Hi Felix,
>
> FYI, the error/warning still remains.
>
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 
> master
> head:   1d53d908b79d7870d89063062584eead4cf83448
> commit: 70539bd79500245cbb4c7af00572fcce540d0105 [6345/11908] drm/amd: Update 
> MEC HQD loading code for KFD
> config: sparc64-allyesconfig (attached as .config)
> compiler: sparc64-linux-gnu-gcc (Debian 6.1.1-9) 6.1.1 20160705
> reproduce:
>         wget 
> https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
> ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         git checkout 70539bd79500245cbb4c7af00572fcce540d0105
>         # save the attached .config to linux build tree
>         make.cross ARCH=sparc64 
>
> All errors (new ones prefixed by >>):
>
>    In file included from arch/sparc/include/asm/mmu_context.h:4:0,
>                     from include/linux/mmu_context.h:4,
>                     from drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h:29,
>                     from drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c:23:
>>> arch/sparc/include/asm/mmu_context_64.h:22:37: error: unknown type name 
>>> 'per_cpu_secondary_mm'
>     DECLARE_PER_CPU(struct mm_struct *, per_cpu_secondary_mm);
>                                         ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/mmu_context_64.h: In function 'switch_mm':
>    arch/sparc/include/asm/mmu_context_64.h:79:12: error: implicit declaration 
> of function 'smp_processor_id' [-Werror=implicit-function-declaration]
>      int cpu = smp_processor_id();
>                ^~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/mmu_context_64.h:81:2: error: implicit declaration 
> of function 'per_cpu' [-Werror=implicit-function-declaration]
>      per_cpu(per_cpu_secondary_mm, cpu) = mm;
>      ^~~~~~~
>>> arch/sparc/include/asm/mmu_context_64.h:81:10: error: 
>>> 'per_cpu_secondary_mm' undeclared (first use in this function)
>      per_cpu(per_cpu_secondary_mm, cpu) = mm;
>              ^~~~~~~~~~~~~~~~~~~~
>    arch/sparc/include/asm/mmu_context_64.h:81:10: note: each undeclared 
> identifier is reported only once for each function it appears in
>    cc1: some warnings being treated as errors
>
> vim +/per_cpu_secondary_mm +22 arch/sparc/include/asm/mmu_context_64.h
>
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 21  
> 7a5b4bbf4 arch/sparc/include/asm/mmu_context_64.h Pavel Tatashin 2017-05-31  
> @22  DECLARE_PER_CPU(struct mm_struct *, per_cpu_secondary_mm);
> f05a68653 arch/sparc/include/asm/mmu_context_64.h Sam Ravnborg   2014-05-16   
> 23  void get_new_mmu_context(struct mm_struct *mm);
> f05a68653 arch/sparc/include/asm/mmu_context_64.h Sam Ravnborg   2014-05-16   
> 24  int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
> f05a68653 arch/sparc/include/asm/mmu_context_64.h Sam Ravnborg   2014-05-16   
> 25  void destroy_context(struct mm_struct *mm);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 26  
> f05a68653 arch/sparc/include/asm/mmu_context_64.h Sam Ravnborg   2014-05-16   
> 27  void __tsb_context_switch(unsigned long pgd_pa,
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 28                        struct tsb_config *tsb_base,
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 29                        struct tsb_config *tsb_huge,
> fc290a114 arch/sparc/include/asm/mmu_context_64.h Rob Gardner    2017-07-17   
> 30                        unsigned long tsb_descr_pa,
> fc290a114 arch/sparc/include/asm/mmu_context_64.h Rob Gardner    2017-07-17   
> 31                        unsigned long secondary_ctx);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 32  
> fc290a114 arch/sparc/include/asm/mmu_context_64.h Rob Gardner    2017-07-17   
> 33  static inline void tsb_context_switch_ctx(struct mm_struct *mm,
> fc290a114 arch/sparc/include/asm/mmu_context_64.h Rob Gardner    2017-07-17   
> 34                                        unsigned long ctx)
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 35  {
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 36      __tsb_context_switch(__pa(mm->pgd),
> 4bbc84ffd arch/sparc/include/asm/mmu_context_64.h Mike Kravetz   2016-12-19   
> 37                           &mm->context.tsb_block[MM_TSB_BASE],
> 9e695d2ec arch/sparc/include/asm/mmu_context_64.h David Miller   2012-10-08   
> 38  #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE)
> 4bbc84ffd arch/sparc/include/asm/mmu_context_64.h Mike Kravetz   2016-12-19   
> 39                           (mm->context.tsb_block[MM_TSB_HUGE].tsb ?
> 4bbc84ffd arch/sparc/include/asm/mmu_context_64.h Mike Kravetz   2016-12-19   
> 40                            &mm->context.tsb_block[MM_TSB_HUGE] :
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 41                            NULL)
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 42  #else
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 43                           NULL
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 44  #endif
> fc290a114 arch/sparc/include/asm/mmu_context_64.h Rob Gardner    2017-07-17   
> 45                           , __pa(&mm->context.tsb_descr[MM_TSB_BASE]),
> fc290a114 arch/sparc/include/asm/mmu_context_64.h Rob Gardner    2017-07-17   
> 46                           ctx);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 47  }
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 48  
> fc290a114 arch/sparc/include/asm/mmu_context_64.h Rob Gardner    2017-07-17   
> 49  #define tsb_context_switch(X) tsb_context_switch_ctx(X, 0)
> fc290a114 arch/sparc/include/asm/mmu_context_64.h Rob Gardner    2017-07-17   
> 50  
> f05a68653 arch/sparc/include/asm/mmu_context_64.h Sam Ravnborg   2014-05-16   
> 51  void tsb_grow(struct mm_struct *mm,
> f05a68653 arch/sparc/include/asm/mmu_context_64.h Sam Ravnborg   2014-05-16   
> 52            unsigned long tsb_index,
> f05a68653 arch/sparc/include/asm/mmu_context_64.h Sam Ravnborg   2014-05-16   
> 53            unsigned long mm_rss);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 54  #ifdef CONFIG_SMP
> f05a68653 arch/sparc/include/asm/mmu_context_64.h Sam Ravnborg   2014-05-16   
> 55  void smp_tsb_sync(struct mm_struct *mm);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 56  #else
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 57  #define smp_tsb_sync(__mm) do { } while (0)
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 58  #endif
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 59  
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 60  /* Set MMU context in the actual hardware. */
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 61  #define load_secondary_context(__mm) \
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 62      __asm__ __volatile__( \
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 63      "\n661: stxa            %0, [%1] %2\n" \
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 64      "       .section        .sun4v_1insn_patch, \"ax\"\n" \
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 65      "       .word           661b\n" \
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 66      "       stxa            %0, [%1] %3\n" \
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 67      "       .previous\n" \
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 68      "       flush           %%g6\n" \
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 69      : /* No outputs */ \
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 70      : "r" (CTX_HWBITS((__mm)->context)), \
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 71        "r" (SECONDARY_CONTEXT), "i" (ASI_DMMU), "i" (ASI_MMU))
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 72  
> f05a68653 arch/sparc/include/asm/mmu_context_64.h Sam Ravnborg   2014-05-16   
> 73  void __flush_tlb_mm(unsigned long, unsigned long);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 74  
> 07df84187 arch/sparc/include/asm/mmu_context_64.h Kirill Tkhai   2013-04-09   
> 75  /* Switch the current MM context. */
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 76  static inline void switch_mm(struct mm_struct *old_mm, struct mm_struct 
> *mm, struct task_struct *tsk)
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 77  {
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 78      unsigned long ctx_valid, flags;
> 7a5b4bbf4 arch/sparc/include/asm/mmu_context_64.h Pavel Tatashin 2017-05-31  
> @79      int cpu = smp_processor_id();
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 80  
> 7a5b4bbf4 arch/sparc/include/asm/mmu_context_64.h Pavel Tatashin 2017-05-31  
> @81      per_cpu(per_cpu_secondary_mm, cpu) = mm;
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 82      if (unlikely(mm == &init_mm))
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 83              return;
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 84  
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 85      spin_lock_irqsave(&mm->context.lock, flags);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 86      ctx_valid = CTX_VALID(mm->context);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 87      if (!ctx_valid)
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 88              get_new_mmu_context(mm);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 89  
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 90      /* We have to be extremely careful here or else we will miss
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 91       * a TSB grow if we switch back and forth between a kernel
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 92       * thread and an address space which has it's TSB size increased
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 93       * on another processor.
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 94       *
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 95       * It is possible to play some games in order to optimize the
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 96       * switch, but the safest thing to do is to unconditionally
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 97       * perform the secondary context load and the TSB context switch.
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 98       *
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17   
> 99       * For reference the bad case is, for address space "A":
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 100       *
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 101       *              CPU 0                   CPU 1
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 102       *      run address space A
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 103       *      set cpu0's bits in cpu_vm_mask
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 104       *      switch to kernel thread, borrow
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 105       *      address space A via entry_lazy_tlb
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 106       *                                      run address space A
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 107       *                                      set cpu1's bit in cpu_vm_mask
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 108       *                                      flush_tlb_pending()
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 109       *                                      reset cpu_vm_mask to just 
> cpu1
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 110       *                                      TSB grow
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 111       *      run address space A
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 112       *      context was valid, so skip
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 113       *      TSB context switch
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 114       *
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 115       * At that point cpu0 continues to use a stale TSB, the one from
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 116       * before the TSB grow performed on cpu1.  cpu1 did not cross-call
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 117       * cpu0 to update it's TSB because at that point the cpu_vm_mask
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 118       * only had cpu1 set in it.
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 119       */
> fc290a114 arch/sparc/include/asm/mmu_context_64.h Rob Gardner    2017-07-17  
> 120      tsb_context_switch_ctx(mm, CTX_HWBITS(mm->context));
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 121  
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 122      /* Any time a processor runs a context on an address space
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 123       * for the first time, we must flush that context out of the
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 124       * local TLB.
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 125       */
> 81f1adf01 arch/sparc/include/asm/mmu_context_64.h Rusty Russell  2009-03-16  
> 126      if (!ctx_valid || !cpumask_test_cpu(cpu, mm_cpumask(mm))) {
> 81f1adf01 arch/sparc/include/asm/mmu_context_64.h Rusty Russell  2009-03-16  
> 127              cpumask_set_cpu(cpu, mm_cpumask(mm));
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 128              __flush_tlb_mm(CTX_HWBITS(mm->context),
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 129                             SECONDARY_CONTEXT);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 130      }
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 131      spin_unlock_irqrestore(&mm->context.lock, flags);
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 132  }
> f5e706ad8 include/asm-sparc/mmu_context_64.h      Sam Ravnborg   2008-07-17  
> 133  
>
> :::::: The code at line 22 was first introduced by commit
> :::::: 7a5b4bbf49fe86ce77488a70c5dccfe2d50d7a2d sparc64: add per-cpu mm of 
> secondary contexts
>
> :::::: TO: Pavel Tatashin <[email protected]>
> :::::: CC: David S. Miller <[email protected]>
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to