I guess I got to the party late. I found this thread after I started developing the same feature... On Thu, Jul 12, 2018 at 7:58 AM, Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > On 07/11, Ravi Bangoria wrote: >> >> > However, I still think it would be better to avoid uprobe exporting and modifying >> > set_swbp/set_orig_insn. May be we can simply kill both set_swbp() and set_orig_insn(), >> > I'll re-check... >> >> Good that you bring this up. Actually, we can implement same logic >> without exporting uprobe. We can do "uprobe = container_of(arch_uprobe)" >> in uprobe_write_opcode(). No need to export struct uprobe outside, >> no need to change set_swbp() / set_orig_insn() syntax. Just that we >> need to pass arch_uprobe object to uprobe_write_opcode(). > > Yes, but you still need to modify set_swbp/set_orig_insn to pass the new > arg to uprobe_write_opcode(). OK, this is fine. > > >> But, I wanted to discuss about making ref_ctr_offset a uprobe property >> or a consumer property, before posting v6: >> >> If we make it a consumer property, the design becomes flexible for >> user. User will have an option to either depend on kernel to handle >> reference counter or he can create normal uprobe and manipulate >> reference counter on his own. This will not require any changes to >> existing tools. With this approach we need to increment / decrement >> reference counter for each consumer. But, because of the fact that our >> install_breakpoint() / remove_breakpoint() are not balanced, we have >> to keep track of which reference counter have been updated in which >> mm, for which uprobe and for which consumer. I.e. Maintain a list of >> {uprobe, consumer, mm}. Is it possible to maintain balanced refcount by modifying callers of install_breakpoint() and remove_breakpoint()? I am actually working toward this direction. And I found some imbalance between register_for_each_vma(uprobe, uc) and register_for_each_vma(uprobe, NULL) >From reading the thread, I think there are other sources of imbalance. But I think it is still possible to fix it? Please let me know if this is not realistic... About race conditions, I think both install_breakpoint() and remove_breakpoint() are called with down_write(&mm->mmap_sem); As long as we do the same when modifying the reference counter, it should be fine, right? Wait... sometimes we only down_read(). Is this by design? Thanks, Song -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html