[linux-next:master 6345/11908] arch/sparc/include/asm/mmu_context_64.h:22:37: error: unknown type name 'per_cpu_secondary_mm'

Felix Kuehling felix.kuehling at amd.com
Tue Sep 5 17:52:42 UTC 2017


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 <pasha.tatashin at oracle.com>
> :::::: CC: David S. Miller <davem at davemloft.net>
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation



More information about the amd-gfx mailing list