From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Nadia.Derbey@bull.net
Cc: manfred@colorfullife.com, lnxninja@linux.vnet.ibm.com,
linux-kernel@vger.kernel.org, efault@gmx.de,
akpm@linux-foundation.org
Subject: Re: [PATCH 5/9] Make idr_get_new* rcu-safe
Date: Fri, 30 May 2008 01:23:57 -0700 [thread overview]
Message-ID: <20080530082357.GH4943@linux.vnet.ibm.com> (raw)
In-Reply-To: <20080507113736.754796000@bull.net>
On Wed, May 07, 2008 at 01:35:58PM +0200, Nadia.Derbey@bull.net wrote:
> [PATCH 05/09]
>
> This is a patch that make the idr_get_new* routines rcu-safe.
Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> Signed-off-by: Nadia Derbey <Nadia.Derbey@bull.net>
>
> ---
> lib/idr.c | 17 ++++++++++++-----
> 1 file changed, 12 insertions(+), 5 deletions(-)
>
> Index: linux-2.6.25-mm1/lib/idr.c
> ===================================================================
> --- linux-2.6.25-mm1.orig/lib/idr.c 2008-05-06 17:38:42.000000000 +0200
> +++ linux-2.6.25-mm1/lib/idr.c 2008-05-06 18:02:07.000000000 +0200
> @@ -6,6 +6,8 @@
> * Modified by George Anzinger to reuse immediately and to use
> * find bit instructions. Also removed _irq on spinlocks.
> *
> + * Modified by Nadia Derbey to make it RCU safe.
> + *
> * Small id to pointer translation service.
> *
> * It uses a radix tree like structure as a sparse array indexed
> @@ -96,7 +98,7 @@ static void idr_mark_full(struct idr_lay
> * @gfp_mask: memory allocation flags
> *
> * This function should be called prior to locking and calling the
> - * following function. It preallocates enough memory to satisfy
> + * idr_get_new* functions. It preallocates enough memory to satisfy
> * the worst possible allocation.
> *
> * If the system is REALLY out of memory this function returns 0,
> @@ -170,7 +172,8 @@ static int sub_alloc(struct idr *idp, in
> new = get_from_free_list(idp);
> if (!new)
> return -1;
> - p->ary[m] = new;
> + INIT_RCU_HEAD(&new->rcu_head);
> + rcu_assign_pointer(p->ary[m], new);
> p->count++;
> }
> pa[l--] = p;
> @@ -195,6 +198,7 @@ build_up:
> if (unlikely(!p)) {
> if (!(p = get_from_free_list(idp)))
> return -1;
> + INIT_RCU_HEAD(&p->rcu_head);
> layers = 1;
> }
> /*
> @@ -222,11 +226,12 @@ build_up:
> }
> new->ary[0] = p;
> new->count = 1;
> + INIT_RCU_HEAD(&new->rcu_head);
> if (p->bitmap == IDR_FULL)
> __set_bit(0, &new->bitmap);
> p = new;
> }
> - idp->top = p;
> + rcu_assign_pointer(idp->top, p);
> idp->layers = layers;
> v = sub_alloc(idp, &id, pa);
> if (v == IDR_NEED_TO_GROW)
> @@ -245,7 +250,8 @@ static int idr_get_new_above_int(struct
> * Successfully found an empty slot. Install the user
> * pointer and mark the slot full.
> */
> - pa[0]->ary[id & IDR_MASK] = (struct idr_layer *)ptr;
> + rcu_assign_pointer(pa[0]->ary[id & IDR_MASK],
> + (struct idr_layer *)ptr);
> pa[0]->count++;
> idr_mark_full(pa, id);
> }
> @@ -710,7 +716,8 @@ int ida_get_new_above(struct ida *ida, i
> return -EAGAIN;
>
> memset(bitmap, 0, sizeof(struct ida_bitmap));
> - pa[0]->ary[idr_id & IDR_MASK] = (void *)bitmap;
> + rcu_assign_pointer(pa[0]->ary[idr_id & IDR_MASK],
> + (void *)bitmap);
> pa[0]->count++;
> }
>
>
> --
next prev parent reply other threads:[~2008-05-30 8:24 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-07 11:35 [PATCH 0/9] Scalability requirements for sysv ipc - v3 Nadia.Derbey
2008-05-07 11:35 ` [PATCH 1/9] Change the idr structure Nadia.Derbey
2008-05-08 17:12 ` Rik van Riel
2008-05-30 8:22 ` Paul E. McKenney
2008-05-07 11:35 ` [PATCH 2/9] Rename some of the idr APIs internal routines Nadia.Derbey
2008-05-08 17:15 ` Rik van Riel
2008-05-30 8:23 ` Paul E. McKenney
2008-05-07 11:35 ` [PATCH 3/9] Fix a printk call Nadia.Derbey
2008-05-08 17:43 ` Rik van Riel
2008-05-30 8:23 ` Paul E. McKenney
2008-05-07 11:35 ` [PATCH 4/9] Error checking factorization Nadia.Derbey
2008-05-08 17:45 ` Rik van Riel
2008-05-07 11:35 ` [PATCH 5/9] Make idr_get_new* rcu-safe Nadia.Derbey
2008-05-08 17:55 ` Rik van Riel
2008-05-30 8:23 ` Paul E. McKenney [this message]
2008-05-07 11:35 ` [PATCH 6/9] Make idr_find rcu-safe Nadia.Derbey
2008-05-08 17:58 ` Rik van Riel
2008-05-30 8:24 ` Paul E. McKenney
2008-05-07 11:36 ` [PATCH 7/9] Make idr_remove rcu-safe Nadia.Derbey
2008-05-08 18:02 ` Rik van Riel
2008-05-14 19:59 ` Tim Pepper
2008-05-15 7:40 ` Nadia Derbey
2008-05-20 5:29 ` Tim Pepper
2008-05-20 5:35 ` Tim Pepper
2008-05-20 7:03 ` Nadia Derbey
2008-05-20 16:26 ` Tim Pepper
2008-05-30 8:24 ` Paul E. McKenney
2008-05-07 11:36 ` [PATCH 8/9] Call idr_find() without locking in ipc_lock() Nadia.Derbey
2008-05-08 18:11 ` Rik van Riel
2008-05-30 8:27 ` Paul E. McKenney
2008-05-07 11:36 ` [PATCH 9/9] Get rid of ipc_lock_down() Nadia.Derbey
2008-05-08 18:13 ` Rik van Riel
2008-05-30 8:29 ` Paul E. McKenney
2008-05-07 11:41 ` [PATCH 0/9] Scalability requirements for sysv ipc - v3 Nadia Derbey
2008-05-07 13:19 ` KOSAKI Motohiro
2008-05-13 14:10 ` Nadia Derbey
2008-05-14 4:22 ` KOSAKI Motohiro
2008-05-30 8:22 ` Paul E. McKenney
2008-06-02 5:53 ` Nadia Derbey
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=20080530082357.GH4943@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=Nadia.Derbey@bull.net \
--cc=akpm@linux-foundation.org \
--cc=efault@gmx.de \
--cc=linux-kernel@vger.kernel.org \
--cc=lnxninja@linux.vnet.ibm.com \
--cc=manfred@colorfullife.com \
/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.