From: rostedt at goodmis.org (Steven Rostedt) Subject: [RFC][PATCH v2] ftrace/x86: Emulate call function while updating in breakpoint handler Date: Tue, 30 Apr 2019 21:35:17 -0400 [thread overview] Message-ID: <20190430213517.7bcfaf8e@oasis.local.home> (raw) In-Reply-To: <20190430175334.423821c0@gandalf.local.home> On Tue, 30 Apr 2019 17:53:34 -0400 Steven Rostedt <rostedt at goodmis.org> wrote: > + if (ftrace_location(ip)) { > + /* A breakpoint at the beginning of the function was hit */ > + if (in_nmi()) { > + /* NMIs have their own trampoline */ > + this_cpu_write(ftrace_bp_call_nmi_return, (void *)ip + MCOUNT_INSN_SIZE); > + regs->ip = (unsigned long) ftrace_emulate_call_nmi; > + return 1; > + } > + this_cpu_write(ftrace_bp_call_return, (void *)ip + MCOUNT_INSN_SIZE); > + if (regs->flags & X86_EFLAGS_IF) { > + regs->flags &= ~X86_EFLAGS_IF; > + regs->ip = (unsigned long) ftrace_emulate_call_irqoff; > + /* Tell lockdep here we are enabling interrupts */ > + trace_hardirqs_on(); This isn't good enough. The return from interrupt does call lockdep saying interrupts are disabled. Need to add the lockdep tracking in the asm as well. Probably easier to move it from inline asm to ftrace_X.S and use the lockdep TRACE_ON/OFF macros. -- Steve > + } else { > + regs->ip = (unsigned long) ftrace_emulate_call_irqon; > + } > + return 1; > + } else if (is_ftrace_caller(ip)) { > + /* An ftrace trampoline is being updated */ > + if (!ftrace_update_func_call) { > + /* If it's a jump, just need to skip it */ > + regs->ip += MCOUNT_INSN_SIZE -1; > + return 1; > + } > + if (in_nmi()) { > + /* NMIs have their own trampoline */ > + this_cpu_write(ftrace_bp_call_nmi_return, (void *)ip + MCOUNT_INSN_SIZE); > + regs->ip = (unsigned long) ftrace_emulate_call_update_nmi; > + return 1; > + } > + this_cpu_write(ftrace_bp_call_return, (void *)ip + MCOUNT_INSN_SIZE); > + if (regs->flags & X86_EFLAGS_IF) { > + regs->flags &= ~X86_EFLAGS_IF; > + regs->ip = (unsigned long) ftrace_emulate_call_update_irqoff; > + trace_hardirqs_on(); > + } else { > + regs->ip = (unsigned long) ftrace_emulate_call_update_irqon; > + } > + return 1; > + } > > - return 1; > + return 0; > }
WARNING: multiple messages have this Message-ID (diff)
From: rostedt@goodmis.org (Steven Rostedt) Subject: [RFC][PATCH v2] ftrace/x86: Emulate call function while updating in breakpoint handler Date: Tue, 30 Apr 2019 21:35:17 -0400 [thread overview] Message-ID: <20190430213517.7bcfaf8e@oasis.local.home> (raw) Message-ID: <20190501013517.u9c6DZQwv83J27e39rTpS1ANr9IhNhQBgRubeuo3Ex8@z> (raw) In-Reply-To: <20190430175334.423821c0@gandalf.local.home> On Tue, 30 Apr 2019 17:53:34 -0400 Steven Rostedt <rostedt@goodmis.org> wrote: > + if (ftrace_location(ip)) { > + /* A breakpoint at the beginning of the function was hit */ > + if (in_nmi()) { > + /* NMIs have their own trampoline */ > + this_cpu_write(ftrace_bp_call_nmi_return, (void *)ip + MCOUNT_INSN_SIZE); > + regs->ip = (unsigned long) ftrace_emulate_call_nmi; > + return 1; > + } > + this_cpu_write(ftrace_bp_call_return, (void *)ip + MCOUNT_INSN_SIZE); > + if (regs->flags & X86_EFLAGS_IF) { > + regs->flags &= ~X86_EFLAGS_IF; > + regs->ip = (unsigned long) ftrace_emulate_call_irqoff; > + /* Tell lockdep here we are enabling interrupts */ > + trace_hardirqs_on(); This isn't good enough. The return from interrupt does call lockdep saying interrupts are disabled. Need to add the lockdep tracking in the asm as well. Probably easier to move it from inline asm to ftrace_X.S and use the lockdep TRACE_ON/OFF macros. -- Steve > + } else { > + regs->ip = (unsigned long) ftrace_emulate_call_irqon; > + } > + return 1; > + } else if (is_ftrace_caller(ip)) { > + /* An ftrace trampoline is being updated */ > + if (!ftrace_update_func_call) { > + /* If it's a jump, just need to skip it */ > + regs->ip += MCOUNT_INSN_SIZE -1; > + return 1; > + } > + if (in_nmi()) { > + /* NMIs have their own trampoline */ > + this_cpu_write(ftrace_bp_call_nmi_return, (void *)ip + MCOUNT_INSN_SIZE); > + regs->ip = (unsigned long) ftrace_emulate_call_update_nmi; > + return 1; > + } > + this_cpu_write(ftrace_bp_call_return, (void *)ip + MCOUNT_INSN_SIZE); > + if (regs->flags & X86_EFLAGS_IF) { > + regs->flags &= ~X86_EFLAGS_IF; > + regs->ip = (unsigned long) ftrace_emulate_call_update_irqoff; > + trace_hardirqs_on(); > + } else { > + regs->ip = (unsigned long) ftrace_emulate_call_update_irqon; > + } > + return 1; > + } > > - return 1; > + return 0; > }
next prev parent reply other threads:[~2019-05-01 1:35 UTC|newest] Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-04-27 10:06 [PATCH 0/4] x86/ftrace: make ftrace_int3_handler() not to skip fops invocation nstange 2019-04-27 10:06 ` Nicolai Stange 2019-04-27 10:06 ` [PATCH 1/4] x86/thread_info: introduce ->ftrace_int3_stack member nstange 2019-04-27 10:06 ` Nicolai Stange 2019-04-28 17:41 ` luto 2019-04-28 17:41 ` Andy Lutomirski 2019-04-28 17:51 ` rostedt 2019-04-28 17:51 ` Steven Rostedt 2019-04-28 18:08 ` luto 2019-04-28 18:08 ` Andy Lutomirski 2019-04-28 19:43 ` rostedt 2019-04-28 19:43 ` Steven Rostedt 2019-04-28 20:56 ` luto 2019-04-28 20:56 ` Andy Lutomirski 2019-04-28 21:22 ` nstange 2019-04-28 21:22 ` Nicolai Stange 2019-04-28 23:27 ` luto 2019-04-28 23:27 ` Andy Lutomirski 2019-04-27 10:06 ` [PATCH 2/4] ftrace: drop 'static' qualifier from ftrace_ops_list_func() nstange 2019-04-27 10:06 ` Nicolai Stange 2019-04-27 10:06 ` [PATCH 3/4] x86/ftrace: make ftrace_int3_handler() not to skip fops invocation nstange 2019-04-27 10:06 ` Nicolai Stange 2019-04-27 10:26 ` peterz 2019-04-27 10:26 ` Peter Zijlstra 2019-04-28 17:38 ` rostedt 2019-04-28 17:38 ` Steven Rostedt 2019-04-29 18:06 ` torvalds 2019-04-29 18:06 ` Linus Torvalds 2019-04-29 18:22 ` torvalds 2019-04-29 18:22 ` Linus Torvalds 2019-04-29 18:42 ` luto 2019-04-29 18:42 ` Andy Lutomirski [not found] ` <CAHk-=whtt4K2f0KPtG-4Pykh3FK8UBOjD8jhXCUKB5nWDj_YRA@mail.gmail.com> 2019-04-29 18:56 ` luto 2019-04-29 18:56 ` Andy Lutomirski [not found] ` <CAHk-=wgewK4eFhF3=0RNtk1KQjMANFH6oDE=8m=84RExn2gxhw@mail.gmail.com> [not found] ` <CAHk-=whay7eN6+2gZjY-ybRbkbcqAmgrLwwszzHx8ws3c=S-MA@mail.gmail.com> 2019-04-29 19:24 ` luto 2019-04-29 19:24 ` Andy Lutomirski 2019-04-29 20:07 ` torvalds 2019-04-29 20:07 ` Linus Torvalds 2019-04-30 13:56 ` peterz 2019-04-30 13:56 ` Peter Zijlstra 2019-04-30 16:06 ` torvalds 2019-04-30 16:06 ` Linus Torvalds 2019-04-30 16:33 ` luto 2019-04-30 16:33 ` Andy Lutomirski 2019-04-30 17:03 ` rostedt 2019-04-30 17:03 ` Steven Rostedt 2019-04-30 17:20 ` rostedt 2019-04-30 17:20 ` Steven Rostedt 2019-04-30 17:49 ` [RFC][PATCH] ftrace/x86: Emulate call function while updating in breakpoint handler rostedt 2019-04-30 17:49 ` Steven Rostedt 2019-04-30 18:33 ` torvalds 2019-04-30 18:33 ` Linus Torvalds 2019-04-30 19:00 ` rostedt 2019-04-30 19:00 ` Steven Rostedt 2019-04-30 21:08 ` rostedt 2019-04-30 21:08 ` Steven Rostedt 2019-05-01 13:11 ` peterz 2019-05-01 13:11 ` Peter Zijlstra 2019-05-01 18:58 ` rostedt 2019-05-01 18:58 ` Steven Rostedt 2019-05-01 19:03 ` peterz 2019-05-01 19:03 ` Peter Zijlstra 2019-05-01 19:03 ` torvalds 2019-05-01 19:03 ` Linus Torvalds 2019-05-01 19:13 ` peterz 2019-05-01 19:13 ` Peter Zijlstra 2019-05-01 19:13 ` rostedt 2019-05-01 19:13 ` Steven Rostedt 2019-05-01 19:33 ` jikos 2019-05-01 19:33 ` Jiri Kosina 2019-05-01 19:41 ` peterz 2019-05-01 19:41 ` Peter Zijlstra 2019-04-30 21:53 ` [RFC][PATCH v2] " rostedt 2019-04-30 21:53 ` Steven Rostedt 2019-05-01 1:35 ` rostedt [this message] 2019-05-01 1:35 ` Steven Rostedt 2019-05-01 1:58 ` torvalds 2019-05-01 1:58 ` Linus Torvalds 2019-05-01 8:26 ` nstange 2019-05-01 8:26 ` Nicolai Stange 2019-05-01 13:22 ` rostedt 2019-05-01 13:22 ` Steven Rostedt 2019-04-29 20:16 ` [PATCH 3/4] x86/ftrace: make ftrace_int3_handler() not to skip fops invocation torvalds 2019-04-29 20:16 ` Linus Torvalds 2019-04-29 22:08 ` sean.j.christopherson 2019-04-29 22:08 ` Sean Christopherson 2019-04-29 22:22 ` torvalds 2019-04-29 22:22 ` Linus Torvalds 2019-04-30 0:08 ` sean.j.christopherson 2019-04-30 0:08 ` Sean Christopherson 2019-04-30 0:45 ` sean.j.christopherson 2019-04-30 0:45 ` Sean Christopherson 2019-04-30 2:26 ` torvalds 2019-04-30 2:26 ` Linus Torvalds 2019-04-30 10:40 ` peterz 2019-04-30 10:40 ` Peter Zijlstra 2019-04-30 11:17 ` jikos 2019-04-30 11:17 ` Jiri Kosina 2019-04-29 22:06 ` torvalds 2019-04-29 22:06 ` Linus Torvalds 2019-04-30 11:18 ` peterz 2019-04-30 11:18 ` Peter Zijlstra 2019-04-29 18:52 ` rostedt 2019-04-29 18:52 ` Steven Rostedt [not found] ` <CAHk-=wjm93jLtVxTX4HZs6K4k1Wqh3ujjmapqaYtcibVk_YnzQ@mail.gmail.com> 2019-04-29 19:07 ` rostedt 2019-04-29 19:07 ` Steven Rostedt 2019-04-29 20:06 ` torvalds 2019-04-29 20:06 ` Linus Torvalds 2019-04-29 20:20 ` torvalds 2019-04-29 20:20 ` Linus Torvalds 2019-04-29 20:30 ` rostedt 2019-04-29 20:30 ` Steven Rostedt 2019-04-29 21:38 ` torvalds 2019-04-29 21:38 ` Linus Torvalds 2019-04-29 22:07 ` rostedt 2019-04-29 22:07 ` Steven Rostedt 2019-04-30 9:24 ` nstange 2019-04-30 9:24 ` Nicolai Stange 2019-04-30 10:46 ` peterz 2019-04-30 10:46 ` Peter Zijlstra 2019-04-30 13:44 ` rostedt 2019-04-30 13:44 ` Steven Rostedt 2019-04-30 14:20 ` peterz 2019-04-30 14:20 ` Peter Zijlstra 2019-04-30 14:36 ` rostedt 2019-04-30 14:36 ` Steven Rostedt 2019-04-27 10:06 ` [PATCH 4/4] selftests/livepatch: add "ftrace a live patched function" test nstange 2019-04-27 10:06 ` Nicolai Stange
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190430213517.7bcfaf8e@oasis.local.home \ --to=linux-kselftest@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).