mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 13:11:40 +00:00
s390 updates for 5.5-rc3
- Fix unwinding from irq context of interrupted user process. - Add purgatory build missing symbols check. That helped to uncover and fix missing symbols when built with kasan support enabled. - Couple of ftrace fixes. Avoid broken stack trace and fix recursion loop in function_graph tracer. -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEE3QHqV+H2a8xAv27vjYWKoQLXFBgFAl3+dtoACgkQjYWKoQLX FBggAQf/WuAi4PPv67jbjn8L62iiVfwvpKVuOQUS4TxCn+AEIIoxAn1VwhqOwruR r2oVQyLw0toK2dOAbancV72tsujk3b3akoSfeQB9fmE4bo62pvmHWFf6sdupoU3C WWcWTFv/E4PpCV4uVDN6KLx7iohqJghm9sHllGuQzPBBdeyQSeUai1u2G+BZ8qf4 9q4j5HafNoDUg1YcX8fWra73kZ6ggbZ4+PTwoKkM6iIaVJ3+vWOVt+DXE1RHKnbI 7VqmI5XvO9eaTQmwJeZMDsYkS2TFVA04GRNkz97GlXFznikbSeCzKEQ6SqRixRfq 6VezZSvKWacFuKqlqmq+lHUV56rdyw== =3/cw -----END PGP SIGNATURE----- Merge tag 's390-5.5-4' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux Pull s390 fixes from Vasily Gorbik: - Fix unwinding from irq context of interrupted user process. - Add purgatory build missing symbols check. That helped to uncover and fix missing symbols when built with kasan support enabled. - Couple of ftrace fixes. Avoid broken stack trace and fix recursion loop in function_graph tracer. * tag 's390-5.5-4' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/ftrace: save traced function caller s390/unwind: stop gracefully at user mode pt_regs in irq stack s390/purgatory: do not build purgatory with kcov, kasan and friends s390/purgatory: Make sure we fail the build if purgatory has missing symbols s390/ftrace: fix endless recursion in function_graph tracer
This commit is contained in:
commit
60b04df6bf
@ -194,9 +194,9 @@ static inline unsigned long long get_tod_clock_monotonic(void)
|
||||
{
|
||||
unsigned long long tod;
|
||||
|
||||
preempt_disable();
|
||||
preempt_disable_notrace();
|
||||
tod = get_tod_clock() - *(unsigned long long *) &tod_clock_base[1];
|
||||
preempt_enable();
|
||||
preempt_enable_notrace();
|
||||
return tod;
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@ EXPORT_SYMBOL(_mcount)
|
||||
ENTRY(ftrace_caller)
|
||||
.globl ftrace_regs_caller
|
||||
.set ftrace_regs_caller,ftrace_caller
|
||||
stg %r14,(__SF_GPRS+8*8)(%r15) # save traced function caller
|
||||
lgr %r1,%r15
|
||||
#if !(defined(CC_USING_HOTPATCH) || defined(CC_USING_NOP_MCOUNT))
|
||||
aghi %r0,MCOUNT_RETURN_FIXUP
|
||||
|
@ -36,10 +36,17 @@ static bool update_stack_info(struct unwind_state *state, unsigned long sp)
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool is_task_pt_regs(struct unwind_state *state,
|
||||
struct pt_regs *regs)
|
||||
static inline bool is_final_pt_regs(struct unwind_state *state,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
return task_pt_regs(state->task) == regs;
|
||||
/* user mode or kernel thread pt_regs at the bottom of task stack */
|
||||
if (task_pt_regs(state->task) == regs)
|
||||
return true;
|
||||
|
||||
/* user mode pt_regs at the bottom of irq stack */
|
||||
return state->stack_info.type == STACK_TYPE_IRQ &&
|
||||
state->stack_info.end - sizeof(struct pt_regs) == (unsigned long)regs &&
|
||||
READ_ONCE_NOCHECK(regs->psw.mask) & PSW_MASK_PSTATE;
|
||||
}
|
||||
|
||||
bool unwind_next_frame(struct unwind_state *state)
|
||||
@ -80,7 +87,7 @@ bool unwind_next_frame(struct unwind_state *state)
|
||||
if (!on_stack(info, sp, sizeof(struct pt_regs)))
|
||||
goto out_err;
|
||||
regs = (struct pt_regs *) sp;
|
||||
if (is_task_pt_regs(state, regs))
|
||||
if (is_final_pt_regs(state, regs))
|
||||
goto out_stop;
|
||||
ip = READ_ONCE_NOCHECK(regs->psw.addr);
|
||||
sp = READ_ONCE_NOCHECK(regs->gprs[15]);
|
||||
|
1
arch/s390/purgatory/.gitignore
vendored
1
arch/s390/purgatory/.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
purgatory
|
||||
purgatory.chk
|
||||
purgatory.lds
|
||||
purgatory.ro
|
||||
|
@ -4,7 +4,7 @@ OBJECT_FILES_NON_STANDARD := y
|
||||
|
||||
purgatory-y := head.o purgatory.o string.o sha256.o mem.o
|
||||
|
||||
targets += $(purgatory-y) purgatory.lds purgatory purgatory.ro
|
||||
targets += $(purgatory-y) purgatory.lds purgatory purgatory.chk purgatory.ro
|
||||
PURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y))
|
||||
|
||||
$(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
|
||||
@ -15,8 +15,10 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
|
||||
$(obj)/mem.o: $(srctree)/arch/s390/lib/mem.S FORCE
|
||||
$(call if_changed_rule,as_o_S)
|
||||
|
||||
$(obj)/string.o: $(srctree)/arch/s390/lib/string.c FORCE
|
||||
$(call if_changed_rule,cc_o_c)
|
||||
KCOV_INSTRUMENT := n
|
||||
GCOV_PROFILE := n
|
||||
UBSAN_SANITIZE := n
|
||||
KASAN_SANITIZE := n
|
||||
|
||||
KBUILD_CFLAGS := -fno-strict-aliasing -Wall -Wstrict-prototypes
|
||||
KBUILD_CFLAGS += -Wno-pointer-sign -Wno-sign-compare
|
||||
@ -26,15 +28,22 @@ KBUILD_CFLAGS += $(CLANG_FLAGS)
|
||||
KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
|
||||
KBUILD_AFLAGS := $(filter-out -DCC_USING_EXPOLINE,$(KBUILD_AFLAGS))
|
||||
|
||||
LDFLAGS_purgatory := -r --no-undefined -nostdlib -z nodefaultlib -T
|
||||
# Since we link purgatory with -r unresolved symbols are not checked, so we
|
||||
# also link a purgatory.chk binary without -r to check for unresolved symbols.
|
||||
PURGATORY_LDFLAGS := -nostdlib -z nodefaultlib
|
||||
LDFLAGS_purgatory := -r $(PURGATORY_LDFLAGS) -T
|
||||
LDFLAGS_purgatory.chk := -e purgatory_start $(PURGATORY_LDFLAGS)
|
||||
$(obj)/purgatory: $(obj)/purgatory.lds $(PURGATORY_OBJS) FORCE
|
||||
$(call if_changed,ld)
|
||||
|
||||
$(obj)/purgatory.chk: $(obj)/purgatory FORCE
|
||||
$(call if_changed,ld)
|
||||
|
||||
OBJCOPYFLAGS_purgatory.ro := -O elf64-s390
|
||||
OBJCOPYFLAGS_purgatory.ro += --remove-section='*debug*'
|
||||
OBJCOPYFLAGS_purgatory.ro += --remove-section='.comment'
|
||||
OBJCOPYFLAGS_purgatory.ro += --remove-section='.note.*'
|
||||
$(obj)/purgatory.ro: $(obj)/purgatory FORCE
|
||||
$(obj)/purgatory.ro: $(obj)/purgatory $(obj)/purgatory.chk FORCE
|
||||
$(call if_changed,objcopy)
|
||||
|
||||
$(obj)/kexec-purgatory.o: $(obj)/kexec-purgatory.S $(obj)/purgatory.ro FORCE
|
||||
|
3
arch/s390/purgatory/string.c
Normal file
3
arch/s390/purgatory/string.c
Normal file
@ -0,0 +1,3 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#define __HAVE_ARCH_MEMCMP /* arch function */
|
||||
#include "../lib/string.c"
|
Loading…
Reference in New Issue
Block a user