All of lore.kernel.org
 help / color / mirror / Atom feed
From: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>,
	Peter Zijlstra <peterz@infradead.org>,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	Anton Arapov <anton@redhat.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/3] uprobes: Kill uprobe_events, use RB_EMPTY_ROOT() instead
Date: Thu, 13 Dec 2012 20:05:01 +0530	[thread overview]
Message-ID: <20121213143501.GF3902@linux.vnet.ibm.com> (raw)
In-Reply-To: <20121125223344.GA24801@redhat.com>

* Oleg Nesterov <oleg@redhat.com> [2012-11-25 23:33:44]:

> uprobe_events counts the number of uprobes in uprobes_tree but
> it is used as a boolean. We can use RB_EMPTY_ROOT() instead.
> 

Nice idea.

> Probably no_uprobe_events() added by this patch can have more
> callers, say, mmf_recalc_uprobes().
> 
> Signed-off-by: Oleg Nesterov <oleg@redhat.com>
> ---

Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>

>  kernel/events/uprobes.c |   19 +++++++------------
>  1 files changed, 7 insertions(+), 12 deletions(-)
> 
> diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
> index 1e047f8..53dc2eb 100644
> --- a/kernel/events/uprobes.c
> +++ b/kernel/events/uprobes.c
> @@ -41,6 +41,11 @@
>  #define MAX_UPROBE_XOL_SLOTS		UINSNS_PER_PAGE
> 
>  static struct rb_root uprobes_tree = RB_ROOT;
> +/*
> + * allows us to skip the uprobe_mmap if there are no uprobe events active
> + * at this time.  Probably a fine grained per inode count is better?
> + */
> +#define no_uprobe_events()	RB_EMPTY_ROOT(&uprobes_tree)
> 
>  static DEFINE_SPINLOCK(uprobes_treelock);	/* serialize rbtree access */
> 
> @@ -74,13 +79,6 @@ static struct mutex uprobes_mmap_mutex[UPROBES_HASH_SZ];
> 
>  static struct percpu_rw_semaphore dup_mmap_sem;
> 
> -/*
> - * uprobe_events allows us to skip the uprobe_mmap if there are no uprobe
> - * events active at this time.  Probably a fine grained per inode count is
> - * better?
> - */
> -static atomic_t uprobe_events = ATOMIC_INIT(0);
> -
>  /* Have a copy of original instruction */
>  #define UPROBE_COPY_INSN	0
>  /* Can skip singlestep */
> @@ -460,8 +458,6 @@ static struct uprobe *alloc_uprobe(struct inode *inode, loff_t offset)
>  		kfree(uprobe);
>  		uprobe = cur_uprobe;
>  		iput(inode);
> -	} else {
> -		atomic_inc(&uprobe_events);
>  	}
> 
>  	return uprobe;
> @@ -685,7 +681,6 @@ static void delete_uprobe(struct uprobe *uprobe)
>  	spin_unlock(&uprobes_treelock);
>  	iput(uprobe->inode);
>  	put_uprobe(uprobe);
> -	atomic_dec(&uprobe_events);
>  }
> 
>  struct map_info {
> @@ -975,7 +970,7 @@ int uprobe_mmap(struct vm_area_struct *vma)
>  	struct uprobe *uprobe, *u;
>  	struct inode *inode;
> 
> -	if (!atomic_read(&uprobe_events) || !valid_vma(vma, true))
> +	if (no_uprobe_events() || !valid_vma(vma, true))
>  		return 0;
> 
>  	inode = vma->vm_file->f_mapping->host;
> @@ -1021,7 +1016,7 @@ vma_has_uprobes(struct vm_area_struct *vma, unsigned long start, unsigned long e
>   */
>  void uprobe_munmap(struct vm_area_struct *vma, unsigned long start, unsigned long end)
>  {
> -	if (!atomic_read(&uprobe_events) || !valid_vma(vma, false))
> +	if (no_uprobe_events() || !valid_vma(vma, false))
>  		return;
> 
>  	if (!atomic_read(&vma->vm_mm->mm_users)) /* called by mmput() ? */
> -- 
> 1.5.5.1
> 


  reply	other threads:[~2012-12-13 15:07 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-25 22:33 [PATCH 0/3] uprobes: Kill uprobes_mutex[] Oleg Nesterov
2012-11-25 22:33 ` [PATCH 1/3] uprobes: Kill uprobe_events, use RB_EMPTY_ROOT() instead Oleg Nesterov
2012-12-13 14:35   ` Srikar Dronamraju [this message]
2012-12-23 19:21     ` Oleg Nesterov
2013-01-02 12:56   ` Anton Arapov
2012-11-25 22:33 ` [PATCH 2/3] uprobes: Introduce uprobe_is_active() Oleg Nesterov
2013-01-02 12:57   ` Anton Arapov
2013-01-03  9:04   ` Srikar Dronamraju
2012-11-25 22:33 ` [PATCH 3/3] uprobes: Kill uprobes_mutex[], separate alloc_uprobe() and __uprobe_register() Oleg Nesterov
2013-01-02 12:57   ` Anton Arapov
2013-01-03  9:05   ` Srikar Dronamraju

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=20121213143501.GF3902@linux.vnet.ibm.com \
    --to=srikar@linux.vnet.ibm.com \
    --cc=ananth@in.ibm.com \
    --cc=anton@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.