From: Joel Fernandes <joel@joelfernandes.org>
To: "Uladzislau Rezki (Sony)" <urezki@gmail.com>
Cc: LKML <linux-kernel@vger.kernel.org>, RCU <rcu@vger.kernel.org>,
"Paul E . McKenney" <paulmck@kernel.org>,
Frederic Weisbecker <frederic@kernel.org>,
Neeraj Upadhyay <neeraj.iitr10@gmail.com>,
Oleksiy Avramchenko <oleksiy.avramchenko@sony.com>
Subject: Re: [PATCH 1/2] rcu/kvfree: Remove useless monitor_todo flag
Date: Thu, 2 Jun 2022 23:43:39 +0000 [thread overview]
Message-ID: <YplLK2BcTn2oM0hr@google.com> (raw)
In-Reply-To: <20220602080644.432156-1-urezki@gmail.com>
On Thu, Jun 02, 2022 at 10:06:43AM +0200, Uladzislau Rezki (Sony) wrote:
> From: "Joel Fernandes (Google)" <joel@joelfernandes.org>
>
> monitor_todo is not needed as the work struct already tracks
> if work is pending. Just use that to know if work is pending
> using schedule_delayed_work() helper.
>
> Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
> Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
> ---
> kernel/rcu/tree.c | 33 ++++++++++++++++-----------------
> 1 file changed, 16 insertions(+), 17 deletions(-)
>
> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index 222d59299a2a..fd16c0b46d9e 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c
> @@ -3295,7 +3295,6 @@ struct kfree_rcu_cpu_work {
> * @krw_arr: Array of batches of kfree_rcu() objects waiting for a grace period
> * @lock: Synchronize access to this structure
> * @monitor_work: Promote @head to @head_free after KFREE_DRAIN_JIFFIES
> - * @monitor_todo: Tracks whether a @monitor_work delayed work is pending
> * @initialized: The @rcu_work fields have been initialized
> * @count: Number of objects for which GP not started
> * @bkvcache:
> @@ -3320,7 +3319,6 @@ struct kfree_rcu_cpu {
> struct kfree_rcu_cpu_work krw_arr[KFREE_N_BATCHES];
> raw_spinlock_t lock;
> struct delayed_work monitor_work;
> - bool monitor_todo;
> bool initialized;
> int count;
>
> @@ -3500,6 +3498,18 @@ static void kfree_rcu_work(struct work_struct *work)
> }
> }
>
> +static bool
> +need_offload_krc(struct kfree_rcu_cpu *krcp)
> +{
> + int i;
> +
> + for (i = 0; i < FREE_N_CHANNELS; i++)
> + if (krcp->bkvhead[i])
> + return true;
> +
> + return !!krcp->head;
> +}
Thanks for modifying my original patch to do this, and thanks for giving me
the attribution for the patch. This function is a nice addition.
For the patch in its entirety:
Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
thanks,
- Joel
> +
> /*
> * This function is invoked after the KFREE_DRAIN_JIFFIES timeout.
> */
> @@ -3556,9 +3566,7 @@ static void kfree_rcu_monitor(struct work_struct *work)
> // of the channels that is still busy we should rearm the
> // work to repeat an attempt. Because previous batches are
> // still in progress.
> - if (!krcp->bkvhead[0] && !krcp->bkvhead[1] && !krcp->head)
> - krcp->monitor_todo = false;
> - else
> + if (need_offload_krc(krcp))
> schedule_delayed_work(&krcp->monitor_work, KFREE_DRAIN_JIFFIES);
>
> raw_spin_unlock_irqrestore(&krcp->lock, flags);
> @@ -3746,11 +3754,8 @@ void kvfree_call_rcu(struct rcu_head *head, rcu_callback_t func)
> WRITE_ONCE(krcp->count, krcp->count + 1);
>
> // Set timer to drain after KFREE_DRAIN_JIFFIES.
> - if (rcu_scheduler_active == RCU_SCHEDULER_RUNNING &&
> - !krcp->monitor_todo) {
> - krcp->monitor_todo = true;
> + if (rcu_scheduler_active == RCU_SCHEDULER_RUNNING)
> schedule_delayed_work(&krcp->monitor_work, KFREE_DRAIN_JIFFIES);
> - }
>
> unlock_return:
> krc_this_cpu_unlock(krcp, flags);
> @@ -3825,14 +3830,8 @@ void __init kfree_rcu_scheduler_running(void)
> struct kfree_rcu_cpu *krcp = per_cpu_ptr(&krc, cpu);
>
> raw_spin_lock_irqsave(&krcp->lock, flags);
> - if ((!krcp->bkvhead[0] && !krcp->bkvhead[1] && !krcp->head) ||
> - krcp->monitor_todo) {
> - raw_spin_unlock_irqrestore(&krcp->lock, flags);
> - continue;
> - }
> - krcp->monitor_todo = true;
> - schedule_delayed_work_on(cpu, &krcp->monitor_work,
> - KFREE_DRAIN_JIFFIES);
> + if (need_offload_krc(krcp))
> + schedule_delayed_work_on(cpu, &krcp->monitor_work, KFREE_DRAIN_JIFFIES);
> raw_spin_unlock_irqrestore(&krcp->lock, flags);
> }
> }
> --
> 2.30.2
>
next prev parent reply other threads:[~2022-06-02 23:43 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-02 8:06 [PATCH 1/2] rcu/kvfree: Remove useless monitor_todo flag Uladzislau Rezki (Sony)
2022-06-02 8:06 ` [PATCH 2/2] rcu/kvfree: Introduce KFREE_DRAIN_JIFFIES_[MAX/MIN] interval Uladzislau Rezki (Sony)
2022-06-02 23:32 ` Joel Fernandes
2022-06-03 9:55 ` Uladzislau Rezki
2022-06-04 3:03 ` Joel Fernandes
2022-06-04 15:51 ` Paul E. McKenney
2022-06-05 9:10 ` Uladzislau Rezki
2022-06-07 3:47 ` Paul E. McKenney
2022-06-09 13:10 ` Uladzislau Rezki
2022-06-10 16:45 ` Joel Fernandes
2022-06-13 9:47 ` Uladzislau Rezki
2022-06-14 6:42 ` Uladzislau Rezki
2022-06-15 5:12 ` Paul E. McKenney
2022-06-15 7:32 ` Uladzislau Rezki
2022-06-15 14:02 ` Paul E. McKenney
2022-06-02 23:43 ` Joel Fernandes [this message]
2022-06-03 9:51 ` [PATCH 1/2] rcu/kvfree: Remove useless monitor_todo flag Uladzislau Rezki
2022-06-04 3:07 ` Joel Fernandes
2022-06-04 16:03 ` Paul E. McKenney
2022-06-05 8:52 ` Uladzislau Rezki
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=YplLK2BcTn2oM0hr@google.com \
--to=joel@joelfernandes.org \
--cc=frederic@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=neeraj.iitr10@gmail.com \
--cc=oleksiy.avramchenko@sony.com \
--cc=paulmck@kernel.org \
--cc=rcu@vger.kernel.org \
--cc=urezki@gmail.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.