• Oleg Nesterov's avatar
    uprobes: Rationalize the usage of filter_chain() · 806a98bd
    Oleg Nesterov authored
    filter_chain() was added into install_breakpoint/remove_breakpoint to
    simplify the initial changes but this is sub-optimal.
    
    This patch shifts the callsite to the callers, register_for_each_vma()
    and uprobe_mmap(). This way:
    
    - It will be easier to add the new arguments. This is the main reason,
      we can do more optimizations later.
    
    - register_for_each_vma(is_register => true) can be optimized, we only
      need to consult the new consumer. The previous consumers were already
      asked when they called uprobe_register().
    
    This patch also moves the MMF_HAS_UPROBES check from remove_breakpoint(),
    this allows to avoid the potentionally costly filter_chain(). Note that
    register_for_each_vma(is_register => false) doesn't really need to take
    ->consumer_rwsem, but I don't think it makes sense to optimize this and
    introduce filter_chain_lockless().
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Acked-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
    806a98bd
uprobes.c 38.3 KB