Subject: linux-next: manual merge of the tip tree with the s390 tree

From: Stephen Rothwell <[email-masked]>
Date: Mon, 6 May 2019 16:58:47 +1000

Hi all,

Today's linux-next merge of the tip tree got a conflict in:

  arch/s390/kernel/stacktrace.c

between commit:

  78c98f907413 ("s390/unwind: introduce stack unwind API")

from the s390 tree and commit:

  6a28b4c2d93b ("s390/stacktrace: Remove the pointless ULONG_MAX marker")

from the tip tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

-- 
Cheers,
Stephen Rothwell

diff --cc arch/s390/kernel/stacktrace.c
index 89f9f63dca18,cc9ed9787068..000000000000
--- a/arch/s390/kernel/stacktrace.c
+++ b/arch/s390/kernel/stacktrace.c
@@@ -16,53 -41,29 +16,47 @@@
  
  void save_stack_trace(struct stack_trace *trace)
  {
 -	unsigned long sp;
 -
 -	sp = current_stack_pointer();
 -	dump_trace(save_address, trace, NULL, sp);
 +	struct unwind_state state;
 +
 +	unwind_for_each_frame(&state, current, NULL, 0) {
 +		if (trace->nr_entries >= trace->max_entries)
 +			break;
 +		if (trace->skip > 0)
 +			trace->skip--;
 +		else
 +			trace->entries[trace->nr_entries++] = state.ip;
 +	}
- 	if (trace->nr_entries < trace->max_entries)
- 		trace->entries[trace->nr_entries++] = ULONG_MAX;
  }
  EXPORT_SYMBOL_GPL(save_stack_trace);
  
  void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
  {
 -	unsigned long sp;
 -
 -	sp = tsk->thread.ksp;
 -	if (tsk == current)
 -		sp = current_stack_pointer();
 -	dump_trace(save_address_nosched, trace, tsk, sp);
 +	struct unwind_state state;
 +
 +	unwind_for_each_frame(&state, tsk, NULL, 0) {
 +		if (trace->nr_entries >= trace->max_entries)
 +			break;
 +		if (in_sched_functions(state.ip))
 +			continue;
 +		if (trace->skip > 0)
 +			trace->skip--;
 +		else
 +			trace->entries[trace->nr_entries++] = state.ip;
 +	}
- 	if (trace->nr_entries < trace->max_entries)
- 		trace->entries[trace->nr_entries++] = ULONG_MAX;
  }
  EXPORT_SYMBOL_GPL(save_stack_trace_tsk);
  
  void save_stack_trace_regs(struct pt_regs *regs, struct stack_trace *trace)
  {
 -	unsigned long sp;
 -
 -	sp = kernel_stack_pointer(regs);
 -	dump_trace(save_address, trace, NULL, sp);
 +	struct unwind_state state;
 +
 +	unwind_for_each_frame(&state, current, regs, 0) {
 +		if (trace->nr_entries >= trace->max_entries)
 +			break;
 +		if (trace->skip > 0)
 +			trace->skip--;
 +		else
 +			trace->entries[trace->nr_entries++] = state.ip;
 +	}
- 	if (trace->nr_entries < trace->max_entries)
- 		trace->entries[trace->nr_entries++] = ULONG_MAX;
  }
  EXPORT_SYMBOL_GPL(save_stack_trace_regs);