powerpc fixes for 5.11 #2
Four commits fixing various things in the new C VDSO code. One fix for a 32-bit VMAP stack bug. Two minor build fixes. Thanks to: Cédric Le Goater, Christophe Leroy, Will Springer. -----BEGIN PGP SIGNATURE----- iQJHBAABCAAxFiEEJFGtCPCthwEv2Y/bUevqPMjhpYAFAl/j6NUTHG1wZUBlbGxl cm1hbi5pZC5hdQAKCRBR6+o8yOGlgF/KD/4nE3hEriOVTVZwf3L6E032j4wBA5LW LcoERcloazjYTovr9WRF2o1mlzNvbG6ziKhp2VYAUZceKu6Yf3fu92Rqag1/HAZy uyc3ny8A4qurm9ZYFrrbLYIgrN0stcmujT58+UhGwkA7VQjERWpQrO5vF5uD+04C GCWPFCPgslbNBJxRXGOT32l4IUCmgDxX0mRvmORxGDOicDyOpjTc4mxVk3fwhcb4 tfNHOcWLg3lYnJJX95LpHekb5ka73DslCZ7B8J684jEY+IgNcvklD/sbS7eGuAcG gxAE5XGp/o065reLl6FKBLNH9/iikB5xQ5+4EGIIJGuMFAgeUG8+nf7n/rw5d8vj Fn6KQykJphYE3BNHXrXMvQu2ZD5RWltCMN9+gWhXwfVciuhu8xk8Ev/whdrWfBh0 AOcUNPgspHTrwNgiRd6q3yBxPTy+cvB1kDr0Ts6O9h/pHSB32wBdXJTp3adx3l2I Rq150rAKoX1RXjEULcSuqzd/J86JmuoCarB+Z11knHdKxGCu6XCjEhMEagoQ7dek 1cF0HMQ5Sohl4bEQfdjz88hLgFsrvdQI99IzLq4dXNa01t1oxytmFW1uNYxXg9Zw iJ6/btvE+adrp6sYC8cvCBOi0U3KyIuaeZol7QgMXlkLQqpAxcpVW1lC0+UhQuY8 m0HCz4nGg+cL5Q== =p9PP -----END PGP SIGNATURE----- Merge tag 'powerpc-5.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux Pull powerpc fixes from Michael Ellerman: - Four commits fixing various things in the new C VDSO code - One fix for a 32-bit VMAP stack bug - Two minor build fixes Thanks to Cédric Le Goater, Christophe Leroy, and Will Springer. * tag 'powerpc-5.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: powerpc/32: Fix vmap stack - Properly set r1 before activating MMU on syscall too powerpc/vdso: Fix DOTSYM for 32-bit LE VDSO powerpc/vdso: Don't pass 64-bit ABI cflags to 32-bit VDSO powerpc/vdso: Block R_PPC_REL24 relocations powerpc/smp: Add __init to init_big_cores() powerpc/time: Force inlining of get_tb() powerpc/boot: Fix build of dts/fsl
This commit is contained in:
commit
9b3f7f1b84
|
@ -373,6 +373,8 @@ initrd-y := $(filter-out $(image-y), $(initrd-y))
|
||||||
targets += $(image-y) $(initrd-y)
|
targets += $(image-y) $(initrd-y)
|
||||||
targets += $(foreach x, dtbImage uImage cuImage simpleImage treeImage, \
|
targets += $(foreach x, dtbImage uImage cuImage simpleImage treeImage, \
|
||||||
$(patsubst $(x).%, dts/%.dtb, $(filter $(x).%, $(image-y))))
|
$(patsubst $(x).%, dts/%.dtb, $(filter $(x).%, $(image-y))))
|
||||||
|
targets += $(foreach x, dtbImage uImage cuImage simpleImage treeImage, \
|
||||||
|
$(patsubst $(x).%, dts/fsl/%.dtb, $(filter $(x).%, $(image-y))))
|
||||||
|
|
||||||
$(addprefix $(obj)/, $(initrd-y)): $(obj)/ramdisk.image.gz
|
$(addprefix $(obj)/, $(initrd-y)): $(obj)/ramdisk.image.gz
|
||||||
|
|
||||||
|
|
|
@ -180,7 +180,12 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
|
||||||
#define VCPU_GPR(n) __VCPU_GPR(__REG_##n)
|
#define VCPU_GPR(n) __VCPU_GPR(__REG_##n)
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
#ifdef CONFIG_PPC64
|
|
||||||
|
/*
|
||||||
|
* We use __powerpc64__ here because we want the compat VDSO to use the 32-bit
|
||||||
|
* version below in the else case of the ifdef.
|
||||||
|
*/
|
||||||
|
#ifdef __powerpc64__
|
||||||
|
|
||||||
#define STACKFRAMESIZE 256
|
#define STACKFRAMESIZE 256
|
||||||
#define __STK_REG(i) (112 + ((i)-14)*8)
|
#define __STK_REG(i) (112 + ((i)-14)*8)
|
||||||
|
|
|
@ -49,7 +49,7 @@ static inline unsigned long get_tbl(void)
|
||||||
return mftb();
|
return mftb();
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u64 get_tb(void)
|
static __always_inline u64 get_tb(void)
|
||||||
{
|
{
|
||||||
unsigned int tbhi, tblo, tbhi2;
|
unsigned int tbhi, tblo, tbhi2;
|
||||||
|
|
||||||
|
|
|
@ -121,18 +121,28 @@
|
||||||
#ifdef CONFIG_VMAP_STACK
|
#ifdef CONFIG_VMAP_STACK
|
||||||
mfspr r11, SPRN_SRR0
|
mfspr r11, SPRN_SRR0
|
||||||
mtctr r11
|
mtctr r11
|
||||||
#endif
|
andi. r11, r9, MSR_PR
|
||||||
|
mr r11, r1
|
||||||
|
lwz r1,TASK_STACK-THREAD(r12)
|
||||||
|
beq- 99f
|
||||||
|
addi r1, r1, THREAD_SIZE - INT_FRAME_SIZE
|
||||||
|
li r10, MSR_KERNEL & ~(MSR_IR | MSR_RI) /* can take DTLB miss */
|
||||||
|
mtmsr r10
|
||||||
|
isync
|
||||||
|
tovirt(r12, r12)
|
||||||
|
stw r11,GPR1(r1)
|
||||||
|
stw r11,0(r1)
|
||||||
|
mr r11, r1
|
||||||
|
#else
|
||||||
andi. r11, r9, MSR_PR
|
andi. r11, r9, MSR_PR
|
||||||
lwz r11,TASK_STACK-THREAD(r12)
|
lwz r11,TASK_STACK-THREAD(r12)
|
||||||
beq- 99f
|
beq- 99f
|
||||||
addi r11, r11, THREAD_SIZE - INT_FRAME_SIZE
|
addi r11, r11, THREAD_SIZE - INT_FRAME_SIZE
|
||||||
#ifdef CONFIG_VMAP_STACK
|
tophys(r11, r11)
|
||||||
li r10, MSR_KERNEL & ~(MSR_IR | MSR_RI) /* can take DTLB miss */
|
stw r1,GPR1(r11)
|
||||||
mtmsr r10
|
stw r1,0(r11)
|
||||||
isync
|
tovirt(r1, r11) /* set new kernel sp */
|
||||||
#endif
|
#endif
|
||||||
tovirt_vmstack r12, r12
|
|
||||||
tophys_novmstack r11, r11
|
|
||||||
mflr r10
|
mflr r10
|
||||||
stw r10, _LINK(r11)
|
stw r10, _LINK(r11)
|
||||||
#ifdef CONFIG_VMAP_STACK
|
#ifdef CONFIG_VMAP_STACK
|
||||||
|
@ -140,9 +150,6 @@
|
||||||
#else
|
#else
|
||||||
mfspr r10,SPRN_SRR0
|
mfspr r10,SPRN_SRR0
|
||||||
#endif
|
#endif
|
||||||
stw r1,GPR1(r11)
|
|
||||||
stw r1,0(r11)
|
|
||||||
tovirt_novmstack r1, r11 /* set new kernel sp */
|
|
||||||
stw r10,_NIP(r11)
|
stw r10,_NIP(r11)
|
||||||
mfcr r10
|
mfcr r10
|
||||||
rlwinm r10,r10,0,4,2 /* Clear SO bit in CR */
|
rlwinm r10,r10,0,4,2 /* Clear SO bit in CR */
|
||||||
|
|
|
@ -990,7 +990,7 @@ static struct sched_domain_topology_level powerpc_topology[] = {
|
||||||
{ NULL, },
|
{ NULL, },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int init_big_cores(void)
|
static int __init init_big_cores(void)
|
||||||
{
|
{
|
||||||
int cpu;
|
int cpu;
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
# List of files in the vdso, has to be asm only for now
|
# List of files in the vdso, has to be asm only for now
|
||||||
|
|
||||||
ARCH_REL_TYPE_ABS := R_PPC_JUMP_SLOT|R_PPC_GLOB_DAT|R_PPC_ADDR32|R_PPC_ADDR24|R_PPC_ADDR16|R_PPC_ADDR16_LO|R_PPC_ADDR16_HI|R_PPC_ADDR16_HA|R_PPC_ADDR14|R_PPC_ADDR14_BRTAKEN|R_PPC_ADDR14_BRNTAKEN
|
ARCH_REL_TYPE_ABS := R_PPC_JUMP_SLOT|R_PPC_GLOB_DAT|R_PPC_ADDR32|R_PPC_ADDR24|R_PPC_ADDR16|R_PPC_ADDR16_LO|R_PPC_ADDR16_HI|R_PPC_ADDR16_HA|R_PPC_ADDR14|R_PPC_ADDR14_BRTAKEN|R_PPC_ADDR14_BRNTAKEN|R_PPC_REL24
|
||||||
include $(srctree)/lib/vdso/Makefile
|
include $(srctree)/lib/vdso/Makefile
|
||||||
|
|
||||||
obj-vdso32 = sigtramp.o gettimeofday.o datapage.o cacheflush.o note.o getcpu.o
|
obj-vdso32 = sigtramp.o gettimeofday.o datapage.o cacheflush.o note.o getcpu.o
|
||||||
|
@ -27,7 +27,7 @@ endif
|
||||||
CC32FLAGS :=
|
CC32FLAGS :=
|
||||||
ifdef CONFIG_PPC64
|
ifdef CONFIG_PPC64
|
||||||
CC32FLAGS += -m32
|
CC32FLAGS += -m32
|
||||||
KBUILD_CFLAGS := $(filter-out -mcmodel=medium,$(KBUILD_CFLAGS))
|
KBUILD_CFLAGS := $(filter-out -mcmodel=medium -mabi=elfv1 -mabi=elfv2 -mcall-aixdesc,$(KBUILD_CFLAGS))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
targets := $(obj-vdso32) vdso32.so.dbg
|
targets := $(obj-vdso32) vdso32.so.dbg
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
# List of files in the vdso, has to be asm only for now
|
# List of files in the vdso, has to be asm only for now
|
||||||
|
|
||||||
ARCH_REL_TYPE_ABS := R_PPC_JUMP_SLOT|R_PPC_GLOB_DAT|R_PPC_ADDR32|R_PPC_ADDR24|R_PPC_ADDR16|R_PPC_ADDR16_LO|R_PPC_ADDR16_HI|R_PPC_ADDR16_HA|R_PPC_ADDR14|R_PPC_ADDR14_BRTAKEN|R_PPC_ADDR14_BRNTAKEN
|
ARCH_REL_TYPE_ABS := R_PPC_JUMP_SLOT|R_PPC_GLOB_DAT|R_PPC_ADDR32|R_PPC_ADDR24|R_PPC_ADDR16|R_PPC_ADDR16_LO|R_PPC_ADDR16_HI|R_PPC_ADDR16_HA|R_PPC_ADDR14|R_PPC_ADDR14_BRTAKEN|R_PPC_ADDR14_BRNTAKEN|R_PPC_REL24
|
||||||
include $(srctree)/lib/vdso/Makefile
|
include $(srctree)/lib/vdso/Makefile
|
||||||
|
|
||||||
obj-vdso64 = sigtramp.o gettimeofday.o datapage.o cacheflush.o note.o getcpu.o
|
obj-vdso64 = sigtramp.o gettimeofday.o datapage.o cacheflush.o note.o getcpu.o
|
||||||
|
|
Loading…
Reference in New Issue