Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp682966imm; Thu, 31 May 2018 07:38:58 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJPwccI8zC5PX37WvM6mtBPE0/wV3S83adSUt8eOA8lNovdiMFbd3YG+waZMvMuP8i4dhPG X-Received: by 2002:a63:a513:: with SMTP id n19-v6mr5663366pgf.381.1527777538018; Thu, 31 May 2018 07:38:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527777537; cv=none; d=google.com; s=arc-20160816; b=LORPoqC2Qv5I44dP18tBAsr9B43G6qVkIg6ZzrI7H3dAHKjzkhTTWmfcrlarpoczq5 7mVA+CnP4GhnYNE8ATU/IHd0vsb/68LaPtL1HOpndhQ9tfbeP4rS6qOlHblf0YgKrUCG T5N6JnrYr5RNmznymbnAWrv4dsrgWxEQl+aiKtvmd+AzkPwK26d6XSvjfl6ppTEHFsrB X9Hy/SV92h7ICoYFoU+hcKLYb0U0wuL0ZqA28mp0PGGXgn7Fj2x2HFoMNfRuXuVdBAtw w8VoO5hMKH1kMNq0jHfH6hfmfq6f6MpOU8wXqtWoEKF7NEeRX3aCgh945QX5u7baikfE av0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=qg/q7m4J0qX6moE0XEuOCk6W3lCOwGiGdEVx1qQsOd0=; b=MfKBgmznaqvC5vUjOHqW0Nt0WO/v8XXZdKrCChcSMb/dAL+fF/pt+ZUbUiSYE8qT0t YYSoODgc+C+KhZpPXHdJZA5GYHlqs19jNIGuWbkQh1AbnoZTg9u4S3wxraKf4dWjiHY8 MAmD1CayKRVktBl4D0iuLFZPTsf1mNlaP48lnVuJXmFUdt6qzInVY4GVXSHexKHTd+SC cYk90ieoHfyq3L5ca9T1O+jyPslQQiALkEku7K44thTUmcV6g1k0d+pYUwW80ncGzlze OnUSv8kB2eVeGHMUaQQ+vLMJ2M94VB8OyWm0sjlbvhc7gWx197xelLzyR+YEc1aISLGf YH2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=l8I3uO1w; 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 z16-v6si12969212pfj.337.2018.05.31.07.38.41; Thu, 31 May 2018 07:38:57 -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=@gmail.com header.s=20161025 header.b=l8I3uO1w; 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 S1755388AbeEaOhM (ORCPT + 99 others); Thu, 31 May 2018 10:37:12 -0400 Received: from mail-lf0-f65.google.com ([209.85.215.65]:44976 "EHLO mail-lf0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755302AbeEaOhI (ORCPT ); Thu, 31 May 2018 10:37:08 -0400 Received: by mail-lf0-f65.google.com with SMTP id 36-v6so8163423lfr.11; Thu, 31 May 2018 07:37:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=qg/q7m4J0qX6moE0XEuOCk6W3lCOwGiGdEVx1qQsOd0=; b=l8I3uO1wcgJIYR+002pdF+k50O0sKkpqxf+LckupKLCFwkDhd50lpJy7DWOQj7GQK5 SUGEYZFaOdiy5DKO6tbSTVSgnwIoV1lDCpcgcnBRIxhMbmnjs4lq7Y6PxZBFoxjrI8ho OcxkGtDnVnHQNKri5JC+hxlAJY1s9Sxk6bc9ovqElgyK6a8n3GWTr0rrkamLYdATH7a+ EQd0XoVW0YKQeL0hbYeXR50AgPxXcMY9hrE2e+8A6tDnw1934Q1zHPrzHsoGt6KXjabE 4zWg1cqRquBy5MqVLZ87WZlwFxCMglQ13gb+dKeApuDaigW9vZAM8f52JusDDTG+gZH5 9nkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition:in-reply-to:user-agent; bh=qg/q7m4J0qX6moE0XEuOCk6W3lCOwGiGdEVx1qQsOd0=; b=O0HJeMcj/EYzqoP9D5D+43FrKMTyZQ7Hs893j/wI5CufNTyF0O6cDQUA2eU1OoVWX2 AueEk5RgmhZKYtXTBdEXFKMokEKz+RDiwj/iM4juAQDZmYIMoqCFLBE/IVhYWJUHP1sH YJ9dhunkpr8AOABgimrPISJ4mpduLfGka5wA8VcU1oFr+nkGI5N46I09Ld9JiXwfzEsl WL1xtHhPrpXNTTTGV0UXTE7/FwTLntRbqPfVvchODx+iejCfo7aUukgEJfmgzT2daCIZ mrm4n9T8LLRPI7sVUXu9wBo6cFsGEjiPtF7/kuhttdkuHoTTjRje3dzkQNDfkPMgslhs M9tg== X-Gm-Message-State: ALKqPwdA4CVD4veT15jqGV5wpoa/rDKEakSMCVhboh/pWi8bNMiFBEeC 4GhHs4fsiFGDeUePPnIFzbU= X-Received: by 2002:a2e:93cf:: with SMTP id p15-v6mr5274499ljh.30.1527777426948; Thu, 31 May 2018 07:37:06 -0700 (PDT) Received: from xi.terra (c-8bb2e655.07-184-6d6c6d4.bbcust.telenor.se. [85.230.178.139]) by smtp.gmail.com with ESMTPSA id q2-v6sm1036734ljg.90.2018.05.31.07.37.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 31 May 2018 07:37:06 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.90_1) (envelope-from ) id 1fOOhL-0006Hv-CA; Thu, 31 May 2018 16:37:03 +0200 Date: Thu, 31 May 2018 16:37:03 +0200 From: Johan Hovold To: Alan Stern Cc: Johan Hovold , Roger Quadros , balbi@kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/2] usb: dwc3: of_simple: don't call pm_runtime_set_active() Message-ID: <20180531143703.GL3259@localhost> References: <20180531132538.GH3259@localhost> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.0 (2018-05-17) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 31, 2018 at 10:07:05AM -0400, Alan Stern wrote: > On Thu, 31 May 2018, Johan Hovold wrote: > > > > This breaks runtime pm as you now get a second round of clock enables > > > which are never balanced on runtime suspend (the clocks are first > > > enabled in dwc3_of_simple_clk_init() above and with your change again in > > > dwc3_of_simple_runtime_resume()). > > > > > > On the other hand, we currently return from probe() with a positive RPM > > > count so perhaps the RPM callbacks can just be removed altogether (i.e. > > > unless some other entity drops that count at some point before > > > remove()). > > > > > > > ret = of_platform_populate(np, NULL, NULL, dev); > > > > if (ret) { > > > > for (i = 0; i < simple->num_clocks; i++) { > > > > @@ -131,10 +134,6 @@ static int dwc3_of_simple_probe(struct platform_device *pdev) > > > > goto err_resetc_assert; > > > > } > > > > > > > > - pm_runtime_set_active(dev); > > > > - pm_runtime_enable(dev); > > > > - pm_runtime_get_sync(dev); > > > > - > > > > return 0; > > > > > > > > err_resetc_assert: > > > > > > Also note that there's currently a use-after-free in remove(), where > > > pm_runtime_put_sync() is called after the clocks have been put. > > > Something like the below (untested) patch should fix it. > > > > What about the use-after-free in remove? Shall I resubmit the fix below > > separately? > > > > Thanks, > > Johan > > > > > From 35c384c31010c344d403c26fc0a1dde0fd68ef4a Mon Sep 17 00:00:00 2001 > > > From: Johan Hovold > > > Date: Mon, 28 May 2018 17:31:45 +0200 > > > Subject: [PATCH] usb: dwc3: of-simple: fix use-after-free on remove > > > > > > The clocks have already been explicitly disabled and put as part of > > > remove() so the runtime suspend callback must not be run when balancing > > > the runtime PM usage count before returning. > > > > > > Fixes: 16adc674d0d6 ("usb: dwc3: add generic OF glue layer") > > > Signed-off-by: Johan Hovold > > > --- > > > drivers/usb/dwc3/dwc3-of-simple.c | 3 ++- > > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c > > > index cb2ee96fd3e8..b9c869cd6585 100644 > > > --- a/drivers/usb/dwc3/dwc3-of-simple.c > > > +++ b/drivers/usb/dwc3/dwc3-of-simple.c > > > @@ -165,8 +165,9 @@ static int dwc3_of_simple_remove(struct platform_device *pdev) > > > > > > reset_control_put(simple->resets); > > > > > > - pm_runtime_put_sync(dev); > > > + pm_runtime_put_noidle(dev); > > > pm_runtime_disable(dev); > > > + pm_runtime_set_suspended(dev); > > > > > > return 0; > > > } > > This is a little racy -- there might be a runtime-suspend callback > between the put_noidle and the disable. (The put_noidle itself won't > cause a callback to happen, but something else could.) > > It would be better to do the disable first and then the put_noidle. Good point. I'll send a v2 for Felipe to consider. Thanks, Johan