On Mon, May 25, 2020 at 9:31 PM Lai Jiangshan <jiangshanlai+l...@gmail.com> wrote: > > On Tue, May 26, 2020 at 12:21 PM Andy Lutomirski <l...@kernel.org> wrote: > > > > On Mon, May 25, 2020 at 6:42 PM Lai Jiangshan <la...@linux.alibaba.com> > > wrote: > > > > > > The percpu user_pcid_flush_mask is used for CPU entry > > > If a data breakpoint on it, it will cause an unwanted #DB. > > > Protect the full cpu_tlbstate structure to be sure. > > > > > > There are some other percpu data used in CPU entry, but they are > > > either in already-protected cpu_tss_rw or are safe to trigger #DB > > > (espfix_waddr, espfix_stack). > > > > How hard would it be to rework this to have DECLARE_PERCPU_NODEBUG() > > and DEFINE_PERCPU_NODEBUG() or similar? > > > I don't know, but it is an excellent idea. Although the patchset > protects only 2 or 3 portions of percpu data, but there is many > percpu data used in tracing or kprobe code. They are needed to be > protected too. > > Adds CC: > Steven Rostedt <rost...@goodmis.org> > Masami Hiramatsu <mhira...@kernel.org>
PeterZ is moving things in the direction of more aggressively disabling hardware breakpoints in the nasty paths where we won't survive a hardware breakpoint. Does the tracing code have portions that won't survive a limited amount of recursion? I'm hoping that we can keep the number of no-breakpoint-here percpu variables low. Maybe we could recruit objtool to help make sure we got all of them, but that would be a much larger project. Would we currently survive a breakpoint on the thread stack? I don't see any extremely obvious reason that we wouldn't. Blocking such a breakpoint would be annoying.