mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 15:10:38 +00:00
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. */
|
/* O32 stack has to be 8-byte aligned. */
|
||||||
static u64 o32_stk[4096];
|
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); \
|
#define __PROM_O32(fun, arg) fun arg __asm__(#fun); \
|
||||||
__asm__(#fun " = call_o32")
|
__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,
|
extern unsigned long __xchg_small(volatile void *ptr, unsigned long val,
|
||||||
unsigned int size);
|
unsigned int size);
|
||||||
|
|
||||||
static inline unsigned long __xchg(volatile void *ptr, unsigned long x,
|
static __always_inline
|
||||||
int size)
|
unsigned long __xchg(volatile void *ptr, unsigned long x, int size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 1:
|
case 1:
|
||||||
@ -153,8 +153,9 @@ static inline unsigned long __xchg(volatile void *ptr, unsigned long x,
|
|||||||
extern unsigned long __cmpxchg_small(volatile void *ptr, unsigned long old,
|
extern unsigned long __cmpxchg_small(volatile void *ptr, unsigned long old,
|
||||||
unsigned long new, unsigned int size);
|
unsigned long new, unsigned int size);
|
||||||
|
|
||||||
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
static __always_inline
|
||||||
unsigned long new, unsigned int size)
|
unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
||||||
|
unsigned long new, unsigned int size)
|
||||||
{
|
{
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -6,5 +6,16 @@
|
|||||||
#define HWCAP_MIPS_R6 (1 << 0)
|
#define HWCAP_MIPS_R6 (1 << 0)
|
||||||
#define HWCAP_MIPS_MSA (1 << 1)
|
#define HWCAP_MIPS_MSA (1 << 1)
|
||||||
#define HWCAP_MIPS_CRC32 (1 << 2)
|
#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 */
|
#endif /* _UAPI_ASM_HWCAP_H */
|
||||||
|
@ -2180,6 +2180,39 @@ void cpu_probe(void)
|
|||||||
elf_hwcap |= HWCAP_MIPS_MSA;
|
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)
|
if (cpu_has_vz)
|
||||||
cpu_probe_vz(c);
|
cpu_probe_vz(c);
|
||||||
|
|
||||||
|
@ -66,6 +66,10 @@ else
|
|||||||
$(call cc-option,-march=mips64r2,-mips64r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS64)
|
$(call cc-option,-march=mips64r2,-mips64r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS64)
|
||||||
endif
|
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
|
# Loongson Machines' Support
|
||||||
#
|
#
|
||||||
|
@ -15,6 +15,7 @@ ccflags-vdso := \
|
|||||||
$(filter -mmicromips,$(KBUILD_CFLAGS)) \
|
$(filter -mmicromips,$(KBUILD_CFLAGS)) \
|
||||||
$(filter -march=%,$(KBUILD_CFLAGS)) \
|
$(filter -march=%,$(KBUILD_CFLAGS)) \
|
||||||
$(filter -m%-float,$(KBUILD_CFLAGS)) \
|
$(filter -m%-float,$(KBUILD_CFLAGS)) \
|
||||||
|
$(filter -mno-loongson-%,$(KBUILD_CFLAGS)) \
|
||||||
-D__VDSO__
|
-D__VDSO__
|
||||||
|
|
||||||
ifdef CONFIG_CC_IS_CLANG
|
ifdef CONFIG_CC_IS_CLANG
|
||||||
|
Loading…
x
Reference in New Issue
Block a user