Received: by 2002:ac0:a679:0:0:0:0:0 with SMTP id p54csp154049imp; Wed, 20 Feb 2019 21:52:39 -0800 (PST) X-Google-Smtp-Source: AHgI3IYFPgQ9E9mYTuUpdCj6za1SuMafxbgZ2pWYsbZklvpeN+Iwhv11Q8sDkaVGKj9EfEQ+4Nue X-Received: by 2002:a17:902:9a02:: with SMTP id v2mr37602649plp.201.1550728359107; Wed, 20 Feb 2019 21:52:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550728359; cv=none; d=google.com; s=arc-20160816; b=mAcrk7+V7GwsiO26a6lucqv4nnZeqhYHX9Kg3h4PS2humk9Ek+bsRiAIPmAtUdJc+p 5KYTpHzZ1SZslDzjo1rubrjc6g9jrL4icX3aUmtiNivQeDcJxARpL20wtPppENjUek35 9iJiiob/Ivl7KELVt8zJPPf25MtYARJeP35iK4R9zemqeotW5PodUtA7+lsuZRoL1NQi UIkWoArZx6PUaLVOxiLrMST3PulfK8EhRz+tZkVGYAIPY0f9NQi6nZCzPXDD0pLSNEQ9 kMY2SMZATfRNZu17KrqxKJXQyhSl2Pxz3JPJTZseHucxwAEzDXVJ3Mzccwz7p3HEQPu4 idCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yJQh9OTMcc8GKjMOMevDLRheK40LG7vhJJv8Mr0Iw/w=; b=VZCINt77ULxwZ9+Z7/YIvfKUmuRT+HfqmZK0QYHo68RUBqZBkQiK/5BkmxtG23PyYp B0P9epZu8lx1gRvjITPWQpTprZ9xjTWyrGzNWXnXp5zW5jjo9O7f8uLdIlCbCQa5KGFx TFvS4J8kSz9jh+JttW7OJpfW4Nh4diCZmr2chh+Qmt1FJX0Ij93XPf6cT07MFJG1Z3QQ LqhAma3YVIdjuZWu+hsqRydpUKwdHBeYFpIxgumPHZ7jaWCEznLelJdfsKwNiaNV07i3 JTq/rZj4wBKlSOgifBQvYdZtQuaptiAtUgEbRez89qGSftIK0VsNIWb8embgsnJmzrXt DG9g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=uoqFMMbj; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x5si19723128pgq.535.2019.02.20.21.52.23; Wed, 20 Feb 2019 21:52:39 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=uoqFMMbj; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727195AbfBUFuZ (ORCPT + 99 others); Thu, 21 Feb 2019 00:50:25 -0500 Received: from mail-qk1-f196.google.com ([209.85.222.196]:39976 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726743AbfBUFuD (ORCPT ); Thu, 21 Feb 2019 00:50:03 -0500 Received: by mail-qk1-f196.google.com with SMTP id h28so3595017qkk.7 for ; Wed, 20 Feb 2019 21:50:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yJQh9OTMcc8GKjMOMevDLRheK40LG7vhJJv8Mr0Iw/w=; b=uoqFMMbjjyp/Ye2yvo+ESfFkN4f+MztM+/NmqQuFjSGfOx7yPbiRx71jZUAVQnxPxy 0REAyP5KXc4D7bmiEU7b/79C3M7DLd85cHRWrQfm2ti6u7zrQJG8eW2N+sxtTnkFj0Ux 5ccIv/xRONCSuio88pfmb02DI+AS6hzE2cfD0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yJQh9OTMcc8GKjMOMevDLRheK40LG7vhJJv8Mr0Iw/w=; b=XNl4ckr7pEY6L8+bGvx7IC+zKhT7VgR43nN1ONGY0FNKJKr3vCCjFIimgin/9cFJfN 6hriDqvi2ysf0GEtyAwg421mdrYBk/zAaYxHk6RcxIIVXrbZcLwaT6u8ixtZT09wrA26 ogAm8zTraJ9KoWXtwPf336N++cne5+JvwIptzidZH00xBZ4SZjfZj3UrEHPLIn8xDFRO CtUxG3S2aAenMQFzSVSJX+XTAdtksUkV4UR1+AvVqBd7xbAA7REoqBZPnlEMhVxliRWf yaivHPUdm/fQ/Xz0BBIbuvY1ok257hPK1C6p6nO4nD5QILSCdmwp6X726Et3fTf6TUxP 6n2w== X-Gm-Message-State: AHQUAuYaFjWTApk7vdIlxjYzEaPoaeCTs+tHu7zEp4IDHEVQO5qQlICJ vxlVJjfBkCKkLVZmhnRmVd9NzD42cOg= X-Received: by 2002:a37:9682:: with SMTP id y124mr14167594qkd.288.1550728202015; Wed, 20 Feb 2019 21:50:02 -0800 (PST) Received: from joelaf.cam.corp.google.com ([2620:0:1004:1100:cca9:fccc:8667:9bdc]) by smtp.gmail.com with ESMTPSA id k185sm11561219qkd.62.2019.02.20.21.50.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 20 Feb 2019 21:50:01 -0800 (PST) From: "Joel Fernandes (Google)" To: linux-kernel@vger.kernel.org Cc: "Joel Fernandes (Google)" , Alexei Starovoitov , Christian Brauner , Daniel Borkmann , David Ahern , "David S. Miller" , Ido Schimmel , Ingo Molnar , intel-wired-lan@lists.osuosl.org (moderated list:INTEL ETHERNET DRIVERS), Jakub Kicinski , Jeff Kirsher , Jesper Dangaard Brouer , John Fastabend , Josh Triplett , keescook@chromium.org, Lai Jiangshan , Martin KaFai Lau , Mathieu Desnoyers , netdev@vger.kernel.org, "Paul E. McKenney" , Peter Zijlstra , rcu@vger.kernel.org, Song Liu , Steven Rostedt , xdp-newbies@vger.kernel.org, Yonghong Song Subject: [PATCH RFC 3/5] sched/cpufreq: Fix incorrect RCU API usage Date: Thu, 21 Feb 2019 00:49:40 -0500 Message-Id: <20190221054942.132388-4-joel@joelfernandes.org> X-Mailer: git-send-email 2.21.0.rc0.258.g878e2cd30e-goog In-Reply-To: <20190221054942.132388-1-joel@joelfernandes.org> References: <20190221054942.132388-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Recently I added an RCU annotation check to rcu_assign_pointer(). All pointers assigned to RCU protected data are to be annotated with __rcu inorder to be able to use rcu_assign_pointer() similar to checks in other RCU APIs. This resulted in a sparse error: kernel//sched/cpufreq.c:41:9: sparse: error: incompatible types in comparison expression (different address spaces) Fix this by using the correct APIs for RCU accesses. This will potentially avoid any future bugs in the code. If it is felt that RCU protection is not needed here, then the rcu_assign_pointer call can be dropped and replaced with, say, WRITE_ONCE or smp_store_release. Or, may be we add a new API to do it. But calls rcu_assign_pointer seems an abuse of the RCU API unless RCU is being used. Signed-off-by: Joel Fernandes (Google) --- kernel/sched/cpufreq.c | 8 ++++++-- kernel/sched/sched.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/kernel/sched/cpufreq.c b/kernel/sched/cpufreq.c index 22bd8980f32f..c9aeb3bf5dc2 100644 --- a/kernel/sched/cpufreq.c +++ b/kernel/sched/cpufreq.c @@ -7,7 +7,7 @@ */ #include "sched.h" -DEFINE_PER_CPU(struct update_util_data *, cpufreq_update_util_data); +DEFINE_PER_CPU(struct update_util_data __rcu *, cpufreq_update_util_data); /** * cpufreq_add_update_util_hook - Populate the CPU's update_util_data pointer. @@ -34,8 +34,12 @@ void cpufreq_add_update_util_hook(int cpu, struct update_util_data *data, if (WARN_ON(!data || !func)) return; - if (WARN_ON(per_cpu(cpufreq_update_util_data, cpu))) + rcu_read_lock(); + if (WARN_ON(rcu_dereference(per_cpu(cpufreq_update_util_data, cpu)))) { + rcu_read_unlock(); return; + } + rcu_read_unlock(); data->func = func; rcu_assign_pointer(per_cpu(cpufreq_update_util_data, cpu), data); diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index d04530bf251f..2ab545d40381 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -2166,7 +2166,7 @@ static inline u64 irq_time_read(int cpu) #endif /* CONFIG_IRQ_TIME_ACCOUNTING */ #ifdef CONFIG_CPU_FREQ -DECLARE_PER_CPU(struct update_util_data *, cpufreq_update_util_data); +DECLARE_PER_CPU(struct update_util_data __rcu *, cpufreq_update_util_data); /** * cpufreq_update_util - Take a note about CPU utilization changes. -- 2.21.0.rc0.258.g878e2cd30e-goog