On Tue, Sep 17, 2013 at 11:21:13PM +0200, Ralf Baechle wrote:
> On Sun, Aug 11, 2013 at 05:10:17PM +0530, Jayachandran C wrote:
> > Allow usage of scratch register for current pgd even when
> > MIPS_PGD_C0_CONTEXT is not configured. MIPS_PGD_C0_CONTEXT is set
> > for 64r2 platforms to indicate availability of Xcontext for saving
> > cpuid, thus freeing Context to be used for saving PGD. This option
> > was also tied to using a scratch register for storing PGD.
> > This commit will allow usage of scratch register to store the current
> > pgd if one can be allocated for the platform, even when
> > MIPS_PGD_C0_CONTEXT is not set. The cpuid will be kept in the CP0
> > Context register in this case.
> > The code to store the current pgd for the TLB miss handler is now
> > generated in all cases. When scratch register is available, the PGD
> > is also stored in the scratch register.
> This patch breaks the build for almost all platforms. Amusingly it
> doesn't break Cavium however which is why I didn't notice it right away.
> The build error is the same for all platforms:
> LD init/built-in.o
> arch/mips/built-in.o: In function `per_cpu_trap_init':
> (.text+0x80e4): undefined reference to `tlbmiss_handler_setup_pgd'
> arch/mips/built-in.o: In function `build_setup_pgd':
> tlbex.c:(.text+0xe31c): undefined reference to `tlbmiss_handler_setup_pgd'
> tlbex.c:(.text+0xe328): undefined reference to `tlbmiss_handler_setup_pgd'
> tlbex.c:(.text+0xe324): undefined reference to `tlbmiss_handler_setup_pgd_end'
> tlbex.c:(.text+0xe32c): undefined reference to `tlbmiss_handler_setup_pgd_end'
> kernel/built-in.o: In function `__schedule':
> core.c:(.sched.text+0x1b74): undefined reference to
> mm/built-in.o: In function `use_mm':
> (.text+0x1a530): undefined reference to `tlbmiss_handler_setup_pgd'
> fs/built-in.o: In function `flush_old_exec':
> (.text+0x8da8): undefined reference to `tlbmiss_handler_setup_pgd'
> make: *** [vmlinux] Error 1
> make: *** [sub-make] Error 2
> make: *** [all] Error 2
> make: Leaving directory `/home/ralf/src/linux/obj/cobalt-build'
> I'm reverting the patch now.
The commit 774b6175 "MIPS: tlbex: Guard tlbmiss_handler_setup_pgd" that
went into 3.12-rc1 takes out tlbmiss_handler_setup_pgd definition when
CONFIG_MIPS_PGD_C0_CONTEXT is not defined. That clashes with this change
and caused the failure.
You can revert 774b6175 before applying this and things should work, I
had tested it with qemu on malta as well as on XLP.