From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DA9AAC2D0C2 for ; Sat, 4 Jan 2020 18:21:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AE4B224650 for ; Sat, 4 Jan 2020 18:21:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578162086; bh=OffE6GW1fEHEsKz4lJ2UtasvfPdaubXshXY9rYrJGGw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=Dv7NAfS6DDj1KMNNFv/OJCZNp/0QiRRwwnCWGcg3q+W2oyycYSODXURPO9UywpIle sdrO08P/+zGDGWSwvCPBqp0qnoAsvS3QGkaZSbB95ZY3Z9vfFRIbrd/10Ye8KOZGIx R3vaG1/KqT9qwOIqmJ8OmrJMjsRCKpyY8JeS47qw= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726135AbgADSV0 (ORCPT ); Sat, 4 Jan 2020 13:21:26 -0500 Received: from mail.kernel.org ([198.145.29.99]:36924 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726118AbgADSVZ (ORCPT ); Sat, 4 Jan 2020 13:21:25 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B87E8222C4; Sat, 4 Jan 2020 18:21:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578162085; bh=OffE6GW1fEHEsKz4lJ2UtasvfPdaubXshXY9rYrJGGw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=hFkVpF4CJX1T67ffFbREBgsanbynhohqOoCBZyn4eKk7wE3YQXY1LqUrOH1ZS85GO qP0fXt6AlakACLEvz6FbVhYPVOEsUVf1OQDKgA0HBLBqE7Um/QEQiMkuEB/JwsETuJ 6fHnD1eXtpd3+0Xs3C948YuQhDcUXQfctb9GC80U= Date: Sat, 4 Jan 2020 19:21:23 +0100 From: Greg Kroah-Hartman To: =?utf-8?B?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: "Rafael J. Wysocki" , Len Brown , Pavel Machek , Steven Rostedt , Ingo Molnar , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] PM-runtime: add tracepoints for usage_count changes Message-ID: <20200104182123.GA1485543@kroah.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org On Sat, Jan 04, 2020 at 05:27:57PM +0100, Michał Mirosław wrote: > Add tracepoints to remaining places where device's power.usage_count > is changed. This helps debugging where and why autosuspend is prevented. > > Signed-off-by: Michał Mirosław > --- > drivers/base/power/runtime.c | 13 +++++++++++-- > include/trace/events/rpm.h | 6 ++++++ > 2 files changed, 17 insertions(+), 2 deletions(-) > > diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c > index 48616f358854..16134a69bf6f 100644 > --- a/drivers/base/power/runtime.c > +++ b/drivers/base/power/runtime.c > @@ -1006,8 +1006,10 @@ int __pm_runtime_idle(struct device *dev, int rpmflags) > int retval; > > if (rpmflags & RPM_GET_PUT) { > - if (!atomic_dec_and_test(&dev->power.usage_count)) > + if (!atomic_dec_and_test(&dev->power.usage_count)) { > + trace_rpm_usage_rcuidle(dev, rpmflags); Who and what is really going to use these tracepoints? And putting them in these if statements seems odd, are you sure that's the correct place? What do these show to userspace? > return 0; > + } > } > > might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe); > @@ -1038,8 +1040,10 @@ int __pm_runtime_suspend(struct device *dev, int rpmflags) > int retval; > > if (rpmflags & RPM_GET_PUT) { > - if (!atomic_dec_and_test(&dev->power.usage_count)) > + if (!atomic_dec_and_test(&dev->power.usage_count)) { > + trace_rpm_usage_rcuidle(dev, rpmflags); > return 0; > + } > } > > might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe); > @@ -1101,6 +1105,7 @@ int pm_runtime_get_if_in_use(struct device *dev) > retval = dev->power.disable_depth > 0 ? -EINVAL : > dev->power.runtime_status == RPM_ACTIVE > && atomic_inc_not_zero(&dev->power.usage_count); > + trace_rpm_usage_rcuidle(dev, 0); Why this one? > spin_unlock_irqrestore(&dev->power.lock, flags); > return retval; > } > @@ -1434,6 +1439,8 @@ void pm_runtime_allow(struct device *dev) > dev->power.runtime_auto = true; > if (atomic_dec_and_test(&dev->power.usage_count)) > rpm_idle(dev, RPM_AUTO | RPM_ASYNC); > + else > + trace_rpm_usage_rcuidle(dev, RPM_AUTO | RPM_ASYNC); Are you sure this is correct? These feel odd... thanks, greg k-h