lkml.org 
[lkml]   [2022]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 1/1] rcu/kvfree: Use READ_ONCE() when access to krcp->head
Date
A need_offload_krc() function is now lock-free. A compiler
can optimize readers in way that they see an old value even
though writers already updated the krcp->head from another
path.

Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
---
kernel/rcu/tree.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index efc79f942b30..d155f2594317 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -3029,7 +3029,7 @@ need_offload_krc(struct kfree_rcu_cpu *krcp)
if (!list_empty(&krcp->bulk_head[i]))
return true;

- return !!krcp->head;
+ return !!READ_ONCE(krcp->head);
}

static void
@@ -3070,7 +3070,7 @@ static void kfree_rcu_monitor(struct work_struct *work)
// in that case the monitor work is rearmed.
if ((!list_empty(&krcp->bulk_head[0]) && list_empty(&krwp->bulk_head_free[0])) ||
(!list_empty(&krcp->bulk_head[1]) && list_empty(&krwp->bulk_head_free[1])) ||
- (krcp->head && !krwp->head_free)) {
+ (READ_ONCE(krcp->head) && !krwp->head_free)) {

// Channel 1 corresponds to the SLAB-pointer bulk path.
// Channel 2 corresponds to vmalloc-pointer bulk path.
--
2.30.2
\
 
 \ /
  Last update: 2022-12-02 14:19    [W:0.052 / U:1.092 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site