From: Uladzislau Rezki <urezki@gmail.com>
To: Joel Fernandes <joel@joelfernandes.org>
Cc: "Uladzislau Rezki (Sony)" <urezki@gmail.com>,
LKML <linux-kernel@vger.kernel.org>,
"Paul E . McKenney" <paulmck@kernel.org>,
RCU <rcu@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Steven Rostedt <rostedt@goodmis.org>,
Oleksiy Avramchenko <oleksiy.avramchenko@sonymobile.com>
Subject: Re: [PATCH v1 2/6] rcu: introduce kvfree_rcu() interface
Date: Mon, 16 Mar 2020 19:55:19 +0100 [thread overview]
Message-ID: <20200316185519.GA10577@pc636> (raw)
In-Reply-To: <20200316154539.GE190951@google.com>
On Mon, Mar 16, 2020 at 11:45:39AM -0400, Joel Fernandes wrote:
> On Sun, Mar 15, 2020 at 07:18:36PM +0100, Uladzislau Rezki (Sony) wrote:
> > kvfree_rcu() can deal with an allocated memory that is obtained
> > via kvmalloc(). It can return two types of allocated memory or
> > "pointers", one can belong to regular SLAB allocator and another
> > one can be vmalloc one. It depends on requested size and memory
> > pressure.
> >
> > Based on that, two streams are split, thus if a pointer belongs
> > to vmalloc allocator it is queued to the list, otherwise SLAB
> > one is queued into "bulk array" for further processing.
> >
> > The main reason of such splitting is:
> > a) to distinguish kmalloc()/vmalloc() ptrs;
> > b) there is no vmalloc_bulk() interface.
> >
> > As of now we have list_lru.c user that needs such interface,
> > also there will be new comers. Apart of that it is preparation
> > to have a head-less variant later.
> >
> > Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> > ---
> > include/linux/rcupdate.h | 9 +++++++++
> > kernel/rcu/tiny.c | 3 ++-
> > kernel/rcu/tree.c | 17 ++++++++++++-----
> > 3 files changed, 23 insertions(+), 6 deletions(-)
> >
> > diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
> > index 2be97a83f266..bb270221dbdc 100644
> > --- a/include/linux/rcupdate.h
> > +++ b/include/linux/rcupdate.h
> > @@ -845,6 +845,15 @@ do { \
> > __kfree_rcu(&((___p)->rhf), offsetof(typeof(*(ptr)), rhf)); \
> > } while (0)
> >
> > +/**
> > + * kvfree_rcu() - kvfree an object after a grace period.
> > + * @ptr: pointer to kvfree
> > + * @rhf: the name of the struct rcu_head within the type of @ptr.
> > + *
> > + * Same as kfree_rcu(), just simple alias.
> > + */
> > +#define kvfree_rcu(ptr, rhf) kfree_rcu(ptr, rhf)
> > +
> > /*
> > * Place this after a lock-acquisition primitive to guarantee that
> > * an UNLOCK+LOCK pair acts as a full barrier. This guarantee applies
> > diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c
> > index dd572ce7c747..4b99f7b88bee 100644
> > --- a/kernel/rcu/tiny.c
> > +++ b/kernel/rcu/tiny.c
> > @@ -23,6 +23,7 @@
> > #include <linux/cpu.h>
> > #include <linux/prefetch.h>
> > #include <linux/slab.h>
> > +#include <linux/mm.h>
> >
> > #include "rcu.h"
> >
> > @@ -86,7 +87,7 @@ static inline bool rcu_reclaim_tiny(struct rcu_head *head)
> > rcu_lock_acquire(&rcu_callback_map);
> > if (__is_kfree_rcu_offset(offset)) {
> > trace_rcu_invoke_kfree_callback("", head, offset);
> > - kfree((void *)head - offset);
> > + kvfree((void *)head - offset);
> > rcu_lock_release(&rcu_callback_map);
> > return true;
> > }
> > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> > index 2f4c91a3713a..1c0a73616872 100644
> > --- a/kernel/rcu/tree.c
> > +++ b/kernel/rcu/tree.c
> > @@ -2899,9 +2899,9 @@ static void kfree_rcu_work(struct work_struct *work)
> > }
> >
> > /*
> > - * Emergency case only. It can happen under low memory
> > - * condition when an allocation gets failed, so the "bulk"
> > - * path can not be temporary maintained.
> > + * vmalloc() pointers end up here also emergency case. It can
>
> Suggest rephrase for clarity:
>
> nit: We can end up here either with 1) vmalloc() pointers or 2) low on memory
> and could not allocate a bulk array.
>
Let's go with your suggestion. I see that you took patches to your tree.
Could you please update it on your own? Otherwise i can send out V2, so
please let me know.
Thanks for the comments!
--
Vlad Rezki
next prev parent reply other threads:[~2020-03-16 18:55 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-15 18:18 [PATCH v1 0/6] Introduce kvfree_rcu() logic Uladzislau Rezki (Sony)
2020-03-15 18:18 ` [PATCH v1 1/6] mm/list_lru.c: rename kvfree_rcu() to local variant Uladzislau Rezki (Sony)
2020-03-15 18:18 ` [PATCH v1 2/6] rcu: introduce kvfree_rcu() interface Uladzislau Rezki (Sony)
2020-03-16 15:45 ` Joel Fernandes
2020-03-16 18:55 ` Uladzislau Rezki [this message]
2020-03-16 18:57 ` Joel Fernandes
2020-03-16 19:01 ` Joel Fernandes
2020-03-16 19:03 ` Uladzislau Rezki
2020-03-16 19:48 ` Joel Fernandes
2020-03-15 18:18 ` [PATCH v1 3/6] rcu: rename rcu_invoke_kfree_callback/rcu_kfree_callback Uladzislau Rezki (Sony)
2020-03-16 15:47 ` Joel Fernandes
2020-03-15 18:18 ` [PATCH v1 4/6] rcu: rename __is_kfree_rcu_offset() macro Uladzislau Rezki (Sony)
2020-03-16 15:48 ` Joel Fernandes
2020-03-15 18:18 ` [PATCH v1 5/6] rcu: rename kfree_call_rcu()/__kfree_rcu() Uladzislau Rezki (Sony)
2020-03-16 15:25 ` Joel Fernandes
2020-03-16 19:01 ` Uladzislau Rezki
2020-04-21 3:15 ` Andrew Morton
2020-04-21 12:03 ` Uladzislau Rezki
2020-04-22 23:03 ` Joel Fernandes
2020-04-22 23:16 ` Paul E. McKenney
2020-03-15 18:18 ` [PATCH v1 6/6] mm/list_lru.c: remove kvfree_rcu_local() function Uladzislau Rezki (Sony)
2020-03-16 15:49 ` Joel Fernandes
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=20200316185519.GA10577@pc636 \
--to=urezki@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=joel@joelfernandes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=oleksiy.avramchenko@sonymobile.com \
--cc=paulmck@kernel.org \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.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.