A few MIPS fixes for 5.4:
- Build fixes for CONFIG_OPTIMIZE_INLINING=y builds in which the compiler may choose not to inline __xchg() & __cmpxchg(). - A build fix for Loongson configurations with GCC 9.x. - Expose some extra HWCAP bits to indicate support for various instruction set extensions to userland. - Fix bad stack access in firmware handling code for old SNI RM200/300/400 machines. -----BEGIN PGP SIGNATURE----- iIsEABYIADMWIQRgLjeFAZEXQzy86/s+p5+stXUA3QUCXaIisxUccGF1bC5idXJ0 b25AbWlwcy5jb20ACgkQPqefrLV1AN205wEAtjKDsd7S19y++cKyhY75esNeQS5T bDR5FvsnNl4GEcsA+wZET5ryxjQlOOtja/+R1X1Hfk3xA8CKRC6NH4Yzh/wA =o9H6 -----END PGP SIGNATURE----- Merge tag 'mips_fixes_5.4_2' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux Pull MIPS fixes from Paul Burton: - Build fixes for CONFIG_OPTIMIZE_INLINING=y builds in which the compiler may choose not to inline __xchg() & __cmpxchg(). - A build fix for Loongson configurations with GCC 9.x. - Expose some extra HWCAP bits to indicate support for various instruction set extensions to userland. - Fix bad stack access in firmware handling code for old SNI RM200/300/400 machines. * tag 'mips_fixes_5.4_2' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux: MIPS: Disable Loongson MMI instructions for kernel build MIPS: elf_hwcap: Export userspace ASEs MIPS: fw: sni: Fix out of bounds init of o32 stack MIPS: include: Mark __xchg as __always_inline MIPS: include: Mark __cmpxchg as __always_inline
This commit is contained in:
commit
63f9bff56b
@ -43,7 +43,7 @@
|
||||
|
||||
/* O32 stack has to be 8-byte aligned. */
|
||||
static u64 o32_stk[4096];
|
||||
#define O32_STK &o32_stk[sizeof(o32_stk)]
|
||||
#define O32_STK (&o32_stk[ARRAY_SIZE(o32_stk)])
|
||||
|
||||
#define __PROM_O32(fun, arg) fun arg __asm__(#fun); \
|
||||
__asm__(#fun " = call_o32")
|
||||
|
@ -77,8 +77,8 @@ extern unsigned long __xchg_called_with_bad_pointer(void)
|
||||
extern unsigned long __xchg_small(volatile void *ptr, unsigned long val,
|
||||
unsigned int size);
|
||||
|
||||
static inline unsigned long __xchg(volatile void *ptr, unsigned long x,
|
||||
int size)
|
||||
static __always_inline
|
||||
unsigned long __xchg(volatile void *ptr, unsigned long x, int size)
|
||||
{
|
||||
switch (size) {
|
||||
case 1:
|
||||
@ -153,7 +153,8 @@ static inline unsigned long __xchg(volatile void *ptr, unsigned long x,
|
||||
extern unsigned long __cmpxchg_small(volatile void *ptr, unsigned long old,
|
||||
unsigned long new, unsigned int size);
|
||||
|
||||
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
||||
static __always_inline
|
||||
unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
||||
unsigned long new, unsigned int size)
|
||||
{
|
||||
switch (size) {
|
||||
|
@ -6,5 +6,16 @@
|
||||
#define HWCAP_MIPS_R6 (1 << 0)
|
||||
#define HWCAP_MIPS_MSA (1 << 1)
|
||||
#define HWCAP_MIPS_CRC32 (1 << 2)
|
||||
#define HWCAP_MIPS_MIPS16 (1 << 3)
|
||||
#define HWCAP_MIPS_MDMX (1 << 4)
|
||||
#define HWCAP_MIPS_MIPS3D (1 << 5)
|
||||
#define HWCAP_MIPS_SMARTMIPS (1 << 6)
|
||||
#define HWCAP_MIPS_DSP (1 << 7)
|
||||
#define HWCAP_MIPS_DSP2 (1 << 8)
|
||||
#define HWCAP_MIPS_DSP3 (1 << 9)
|
||||
#define HWCAP_MIPS_MIPS16E2 (1 << 10)
|
||||
#define HWCAP_LOONGSON_MMI (1 << 11)
|
||||
#define HWCAP_LOONGSON_EXT (1 << 12)
|
||||
#define HWCAP_LOONGSON_EXT2 (1 << 13)
|
||||
|
||||
#endif /* _UAPI_ASM_HWCAP_H */
|
||||
|
@ -2180,6 +2180,39 @@ void cpu_probe(void)
|
||||
elf_hwcap |= HWCAP_MIPS_MSA;
|
||||
}
|
||||
|
||||
if (cpu_has_mips16)
|
||||
elf_hwcap |= HWCAP_MIPS_MIPS16;
|
||||
|
||||
if (cpu_has_mdmx)
|
||||
elf_hwcap |= HWCAP_MIPS_MDMX;
|
||||
|
||||
if (cpu_has_mips3d)
|
||||
elf_hwcap |= HWCAP_MIPS_MIPS3D;
|
||||
|
||||
if (cpu_has_smartmips)
|
||||
elf_hwcap |= HWCAP_MIPS_SMARTMIPS;
|
||||
|
||||
if (cpu_has_dsp)
|
||||
elf_hwcap |= HWCAP_MIPS_DSP;
|
||||
|
||||
if (cpu_has_dsp2)
|
||||
elf_hwcap |= HWCAP_MIPS_DSP2;
|
||||
|
||||
if (cpu_has_dsp3)
|
||||
elf_hwcap |= HWCAP_MIPS_DSP3;
|
||||
|
||||
if (cpu_has_mips16e2)
|
||||
elf_hwcap |= HWCAP_MIPS_MIPS16E2;
|
||||
|
||||
if (cpu_has_loongson_mmi)
|
||||
elf_hwcap |= HWCAP_LOONGSON_MMI;
|
||||
|
||||
if (cpu_has_loongson_ext)
|
||||
elf_hwcap |= HWCAP_LOONGSON_EXT;
|
||||
|
||||
if (cpu_has_loongson_ext2)
|
||||
elf_hwcap |= HWCAP_LOONGSON_EXT2;
|
||||
|
||||
if (cpu_has_vz)
|
||||
cpu_probe_vz(c);
|
||||
|
||||
|
@ -66,6 +66,10 @@ else
|
||||
$(call cc-option,-march=mips64r2,-mips64r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS64)
|
||||
endif
|
||||
|
||||
# Some -march= flags enable MMI instructions, and GCC complains about that
|
||||
# support being enabled alongside -msoft-float. Thus explicitly disable MMI.
|
||||
cflags-y += $(call cc-option,-mno-loongson-mmi)
|
||||
|
||||
#
|
||||
# Loongson Machines' Support
|
||||
#
|
||||
|
@ -15,6 +15,7 @@ ccflags-vdso := \
|
||||
$(filter -mmicromips,$(KBUILD_CFLAGS)) \
|
||||
$(filter -march=%,$(KBUILD_CFLAGS)) \
|
||||
$(filter -m%-float,$(KBUILD_CFLAGS)) \
|
||||
$(filter -mno-loongson-%,$(KBUILD_CFLAGS)) \
|
||||
-D__VDSO__
|
||||
|
||||
ifdef CONFIG_CC_IS_CLANG
|
||||
|
Loading…
Reference in New Issue
Block a user