Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp1703163imm; Mon, 3 Sep 2018 07:20:49 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbfY7wD8fKMt2Ic43/8n7btJqq9NiVqM97EhywgUHDnvnnkEUqoXYTtapmqvUZ5V96kOHAr X-Received: by 2002:a17:902:9a48:: with SMTP id x8-v6mr28661761plv.72.1535984449590; Mon, 03 Sep 2018 07:20:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535984449; cv=none; d=google.com; s=arc-20160816; b=atsYuqt5SXTqsHBHuVgbnNI2fC7yh/AQv7XgxJridHMqZhbQ+rYJjursXve3OEI2oA i0XZGXPU4jH/rSYPu+CbWTDXe32QBzv1+ouUkd+IFZawnOTCzkzyJehIoIJSCOqGBsH4 9IMubIeVVaQt/58m4QusbE6FiXJcXGk1BknodoIVv+e8loSV/XL35SGniZduJPb3Znl5 O9GRrhzobfxTiLFEfC1vn+Ox2iBu3daedCiMT2PJH6Hl674W9P73WpkTcRuv/hBEz8vf veCLATp5lclydapBJb6jMfl0ZhOmQb0WcVDOdtHKd5wHfmojg7eQF1YoblrekkO3JxjC rnSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:message-id:in-reply-to:subject:cc:to :from:dkim-signature:arc-authentication-results; bh=QryCjMJAqafj6P5SNs4jQHYP47JVtrkRsYMYmjAo5zY=; b=qZMoWloNRogT8kCIfaH5U8UrkDLsHPuZDCJAHyTKvrL/tSji16OTj5wX/8z5BnOkgb UHLNMdFi/dkrd6WgnQnjBW33jHE3Rqd9GzoxE9w6ePs+JwYmuf0Wz9izDMWyp8QFy0ll 7WZH10rUZChMctGWBgFBo8dl3A4NcKmSoZBjpg2G4ODL07L0uwUq+4ql/hAFvLpaNFq5 0e8r1teterq25fszmWyk6/UCjC/kOl3qP2uS49ZccYK/AdSgAuTpRbQGXn9t+iMC7f3G OVZKKZ+JtqVPvTBaX3shrXCaeObhRhStUFajH6ScZhFK2o2zdfZ2maNUDl5GFH6pMA+w IvwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@sirena.org.uk header.s=20170815-heliosphere header.b=M5YoFu2S; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d37-v6si18531897pla.40.2018.09.03.07.20.34; Mon, 03 Sep 2018 07:20:49 -0700 (PDT) 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=fail header.i=@sirena.org.uk header.s=20170815-heliosphere header.b=M5YoFu2S; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727608AbeICSjg (ORCPT + 99 others); Mon, 3 Sep 2018 14:39:36 -0400 Received: from heliosphere.sirena.org.uk ([172.104.155.198]:54864 "EHLO heliosphere.sirena.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727428AbeICSjg (ORCPT ); Mon, 3 Sep 2018 14:39:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sirena.org.uk; s=20170815-heliosphere; h=Date:Message-Id:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:References: List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner: List-Archive; bh=QryCjMJAqafj6P5SNs4jQHYP47JVtrkRsYMYmjAo5zY=; b=M5YoFu2Suwtr z0Tj2kpRHxpEWPT+hzbZ8p9fX3/twkTLZ5E/Mo35pa1VcgNeby7SfOa5vI0dL2oW0e2RZAzlGKylW 6J4PYEYcdMOxgHMZPydTC1PyGEq/hXjbtzHVdcCHQq6KbcnGkc/ZDxZj8YewGVGCsAZThk//30ERt budyw=; Received: from cpc102320-sgyl38-2-0-cust46.18-2.cable.virginm.net ([82.37.168.47] helo=debutante.sirena.org.uk) by heliosphere.sirena.org.uk with esmtpa (Exim 4.89) (envelope-from ) id 1fwph1-0000Lc-JE; Mon, 03 Sep 2018 14:19:03 +0000 Received: by debutante.sirena.org.uk (Postfix, from userid 1000) id 5AA7811227AE; Mon, 3 Sep 2018 15:19:03 +0100 (BST) From: Mark Brown To: Jon Hunter Cc: Mark Brown , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , linux-tegra@vger.kernel.org, alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, alsa-devel@alsa-project.org Subject: Applied "ASoC: core: Don't schedule DAPM work if already in target state" to the asoc tree In-Reply-To: <1534520143-29266-1-git-send-email-jonathanh@nvidia.com> Message-Id: <20180903141903.5AA7811227AE@debutante.sirena.org.uk> Date: Mon, 3 Sep 2018 15:19:03 +0100 (BST) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The patch ASoC: core: Don't schedule DAPM work if already in target state has been applied to the asoc tree at https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark From e03546ddd3db5352a74dec247dbdaa29889e93f7 Mon Sep 17 00:00:00 2001 From: Jon Hunter Date: Fri, 17 Aug 2018 16:35:43 +0100 Subject: [PATCH] ASoC: core: Don't schedule DAPM work if already in target state When dapm_power_widgets() is called, the dapm_pre_sequence_async() and dapm_post_sequence_async() functions are scheduled for all DAPM contexts (apart from the card DAPM context) regardless of whether the DAPM context is already in the desired state. The overhead of this is not insignificant and the more DAPM contexts there are the more overhead there is. For example, on the Tegra124 Jetson TK1, when profiling the time taken to execute the dapm_power_widgets() the following times were observed. Times for function dapm_power_widgets() are (us): Min 23, Ave 190, Max 434, Count 39 Here 'Count' is the number of times that dapm_power_widgets() has been called. Please note that the above time were measured using ktime_get() to log the time on entry and exit from dapm_power_widgets(). So it should be noted that these times may not be purely the time take to execute this function if it is preempted. However, after applying this patch and measuring the time taken to execute dapm_power_widgets() again a significant improvement is seen as shown below. Times for function dapm_power_widgets() are (us): Min 4, Ave 16, Max 82, Count 39 Therefore, optimise the dapm_power_widgets() function by only scheduling the dapm_pre/post_sequence_async() work if the DAPM context is not in the desired state. Signed-off-by: Jon Hunter Reviewed-by: Charles Keepax Signed-off-by: Mark Brown --- sound/soc/soc-dapm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index d7be3981f026..9feccd2e7c11 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -1952,7 +1952,7 @@ static int dapm_power_widgets(struct snd_soc_card *card, int event) dapm_pre_sequence_async(&card->dapm, 0); /* Run other bias changes in parallel */ list_for_each_entry(d, &card->dapm_list, list) { - if (d != &card->dapm) + if (d != &card->dapm && d->bias_level != d->target_bias_level) async_schedule_domain(dapm_pre_sequence_async, d, &async_domain); } @@ -1976,7 +1976,7 @@ static int dapm_power_widgets(struct snd_soc_card *card, int event) /* Run all the bias changes in parallel */ list_for_each_entry(d, &card->dapm_list, list) { - if (d != &card->dapm) + if (d != &card->dapm && d->bias_level != d->target_bias_level) async_schedule_domain(dapm_post_sequence_async, d, &async_domain); } -- 2.19.0.rc1