From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754216AbcHAQea (ORCPT ); Mon, 1 Aug 2016 12:34:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:46350 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753977AbcHAQeW (ORCPT ); Mon, 1 Aug 2016 12:34:22 -0400 Date: Mon, 1 Aug 2016 11:24:59 -0500 From: Josh Poimboeuf To: Steven Rostedt Cc: Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , x86@kernel.org, linux-kernel@vger.kernel.org, Andy Lutomirski , Linus Torvalds , Brian Gerst , Kees Cook , Peter Zijlstra , Frederic Weisbecker , Byungchul Park Subject: Re: [PATCH 05/19] x86/dumpstack: fix function graph tracing stack dump reliability issues Message-ID: <20160801162459.2cvfmj7mdedqaoul@treble> References: <20160729185521.62a5cd2a@gandalf.local.home> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20160729185521.62a5cd2a@gandalf.local.home> User-Agent: Mutt/1.6.0.1 (2016-04-01) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Mon, 01 Aug 2016 16:25:03 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jul 29, 2016 at 06:55:21PM -0400, Steven Rostedt wrote: > > @@ -108,18 +97,23 @@ print_context_stack(struct task_struct *task, > > stack = (unsigned long *)task_stack_page(task); > > > > while (valid_stack_ptr(task, stack, sizeof(*stack), end)) { > > - unsigned long addr; > > + unsigned long addr = *stack; > > > > addr = *stack; > > if (__kernel_text_address(addr)) { > > + int reliable = 0; > > + unsigned long real_addr; > > + > > if ((unsigned long) stack == bp + sizeof(long)) { > > - ops->address(data, addr, 1); > > + reliable = 1; > > frame = frame->next_frame; > > bp = (unsigned long) frame; > > - } else { > > - ops->address(data, addr, 0); > > } > > - print_ftrace_graph_addr(addr, data, ops, task, graph); > > + > > + real_addr = ftrace_graph_ret_addr(task, graph, addr); > > + if (addr != real_addr) > > + ops->address(data, addr, 0); > > + ops->address(data, real_addr, reliable); > > Note this changes behavior, as the original code had the ret_to_handler > first. This makes it second. (I fixed this below). Hm, as far as I can tell this actually keeps the original behavior. The "unreliable" ret_to_handler is still printed first, no? -- Josh