From mboxrd@z Thu Jan 1 00:00:00 1970 From: Viresh Kumar Subject: Re: [PATCH 4/8] opp: Introduce APIs to remove OPPs Date: Wed, 26 Nov 2014 14:47:47 +0530 Message-ID: References: <20141125162434.GC5050@linux.vnet.ibm.com> <20141125173943.GG5050@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Return-path: Received: from mail-ob0-f172.google.com ([209.85.214.172]:53827 "EHLO mail-ob0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750879AbaKZJRs (ORCPT ); Wed, 26 Nov 2014 04:17:48 -0500 Received: by mail-ob0-f172.google.com with SMTP id wn1so1874923obc.17 for ; Wed, 26 Nov 2014 01:17:47 -0800 (PST) In-Reply-To: Sender: linux-pm-owner@vger.kernel.org List-Id: linux-pm@vger.kernel.org To: Paul McKenney Cc: Rafael Wysocki , Lists linaro-kernel , "linux-pm@vger.kernel.org" , Stefan Wahren , Nishanth Menon , "linux-arm-kernel@lists.infradead.org" , Sudeep Holla On 26 November 2014 at 11:59, Viresh Kumar wrote: > Also it looks like I should use call_srcu() with kfree_rcu() for > opp_set_availability() case as well to avoid any corner cases. This is the diff I would be adding to this patch: diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c index f9d80e6..3f728cd 100644 --- a/drivers/base/power/opp.c +++ b/drivers/base/power/opp.c @@ -506,7 +506,7 @@ static void kfree_opp_rcu(struct rcu_head *head) struct dev_pm_opp *opp = container_of(head, struct dev_pm_opp, rcu_head); pr_info("%s: opp:%p, dynamic:%d\n", __func__, opp, opp->dynamic); - kfree(opp); + kfree_rcu(opp); } static void kfree_device_rcu(struct rcu_head *head) @@ -644,7 +644,7 @@ static int opp_set_availability(struct device *dev, unsigned long freq, list_replace_rcu(&opp->node, &new_opp->node); mutex_unlock(&dev_opp_list_lock); - kfree_rcu(opp, rcu_head); + call_srcu(&dev_opp->srcu_head.srcu, &opp->rcu_head, kfree_opp_rcu); /* Notify the change of the OPP availability */ if (availability_req)