On 2019/07/20 21:49, Andy Lutomirski wrote: > On Fri, Jul 19, 2019 at 8:59 PM Eiichi Tsukata <de...@etsukata.com> wrote: >> ... >> >> ==== >> >> debug() // dr6: 0xffff4ff0, user_mode: 1 >> TRACE_IRQS_OFF >> arch_stack_user_walk() >> debug() // dr6: 0xffff4ff1 == 0xffff4ff0 | 0xffff0ff1 ... (*) >> do_debug() >> WARN_ON_ONCE >> do_debug() // dr6: 0xffff0ff0(cleared in the above do_debug()) > > The dr6 register will indeed be cleared like this, but the dr6 > variable should still be 0xffff4ff0.
I should have use DR6 to mean it is a register, not variable. "dr6" was ambiguous. > >> ... >> >> Note: printk() in do_debug() can cause infinite loop(printk() -> >> irq_disable() -> do_debug() -> printk() ...), so printk_deferred() >> was preferable. >> > > Shouldn't that be fixed with my patches? It should only be able to > recurse two deep: do_debug() from user mode can indeed trip > breakpoints, but the next do_debug() will clear DR7 in paranoid_entry. > Sorry, I missed that. Now I confirmed your patches fixed the loop. Thanks Eiichi