Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp801456ybt; Sat, 13 Jun 2020 23:55:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyd657Yp0dTsY+dT4j3CH07wmPGPEv6F3luO3sQAziOlu9u7uwAwFry5FN1tKqhCHNgWQh5 X-Received: by 2002:a17:906:370a:: with SMTP id d10mr20304888ejc.433.1592117711172; Sat, 13 Jun 2020 23:55:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592117711; cv=none; d=google.com; s=arc-20160816; b=D1KYRFgAQBlqPrIbOe117o87Do6B8yqBhA6PeLVHfqjljc9fEM59nYhVLds3UGzOoR HI26eGMvADQuuN/QCIUv8wqn/TNrSvE9lWhss4loOzuj7wbjNEtcU6vJqYZhaVgRSoOn jHPJho5Q7mPQ6Aiq6Oj4x5234uDZjLA8L4WuF5Wp146xiTx9v8m9JS+NxwjPFUwegkcG QG0YC3RDx7dB/5TZD2jt8+CQ+9Asb4IANZcJlSW78C9ERgsT5RpEP/McHKAYx5IR1kiI emF5Rc9OsfO0me78mJuj1Fio10Z6KN1WNy1gyBhRKl4F5JDPhECzgtpEXO3HAp60yi9v GLdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=l7NqrBVPm55TBMnhB8GUWUjLTUxcL6eNHsDiGUxal5I=; b=IBMj4RmdNSGTsuuBsUT1J1fYc+jMSg6k6tVztksREEUHm7MqtwWOV6TNiQDfl7Dtkf AcMd8vsskNfR7wKKPGr+IpsLqLzCEcMEiWQysWoM9hWFh23DHaavcmlMXjgSCPZO178F Hxm8R8UwLs+p5pp/6fZo/W49pn6xKcK65nY8L5WIyvgMrkzOAAIo7K1ii1c5uwmWzTLo A2oJThD+vMZbeEa7m721+nh9uNtMK1DeTs0znldvwtcqImenJGm3LxOXQH6phjiCrJ6f tjkpk9zfyAwMAiwCROgoDpc74XzbN+PMiz+1g/7Gedt1oNysVJDr+ixP8BgqINf06qd6 EQgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=nkVJFgev; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id fx23si7009371ejb.22.2020.06.13.23.54.48; Sat, 13 Jun 2020 23:55:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=nkVJFgev; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725896AbgFNGxD (ORCPT + 99 others); Sun, 14 Jun 2020 02:53:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58348 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725267AbgFNGxD (ORCPT ); Sun, 14 Jun 2020 02:53:03 -0400 Received: from mail-il1-x143.google.com (mail-il1-x143.google.com [IPv6:2607:f8b0:4864:20::143]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AED76C03E96F for ; Sat, 13 Jun 2020 23:53:01 -0700 (PDT) Received: by mail-il1-x143.google.com with SMTP id z2so12479371ilq.0 for ; Sat, 13 Jun 2020 23:53:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=l7NqrBVPm55TBMnhB8GUWUjLTUxcL6eNHsDiGUxal5I=; b=nkVJFgevcODeA1AiC94JJnvIYyQe+jwYYSgOR8nE5HriFZTKjNPyQJxSzqBnqEngiw n5UisSMFNqj6olBJvMBQP+PvjRpqnaOv35p4N3RPkZrtRUgwTY0J475ABpsNm+99wASN ATx7iNksqv4nRnhaI4H9/6dXXRXuRlD6Vyex43MJkpfaeWqI1trgomEwHjX0IWNoxMhL SgwtpS/S/Z4YgYB6O5z/cOa6GMWpS/QOXrJrwVRAlvpBSurIiBGUgl5cCP7fbqh9GUh1 ycudI/SXnqFwuEFKYge9EajppLTMMhU3rwik2JFV/pF/V89nqA7+Kyjmx8DlHl7WSNLl LpZQ== 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; bh=l7NqrBVPm55TBMnhB8GUWUjLTUxcL6eNHsDiGUxal5I=; b=o/LtDch3mUKTC1iRDhutPxS7XuaOTkuZwnnx4/wauq82ABsbQYeTvYMwg/Wmt/cNrh ArktUHb9exfHC8GEuHE3XssKNm5/d7UUdITOscYzPnTcKxDm48o81LLGYpNd8KSj+fVZ 1wzeFDYTJ8qOfsYDagW4LKg5HH8kZFr95W+JhZF7AqTyvJJaTh1mdc+qLEUlNHWl9+Q8 8WwZY52oq0K9gsyZWGz9suy1LQ4WYh+TeMsdGBU7360U1RHj96+oGDGg1Ozr6Lx6AQGS 8P+urr/YqG6gWUVqo8xXOzrjKf3kE1ZOlYGDa6iJCgaIzUD6kj8wzuNL5RlMxTH0U4JB FqJQ== X-Gm-Message-State: AOAM530xJNYIUJsFn+RaLbDHTQcIo0p1oKx7nbKt97OmEl3mxYfcqPKl 0pzkc5pMBd6WiMh3HfLDYLY= X-Received: by 2002:a05:6e02:4a7:: with SMTP id e7mr20934834ils.180.1592117580805; Sat, 13 Jun 2020 23:53:00 -0700 (PDT) Received: from cs-u-kase.dtc.umn.edu (cs-u-kase.cs.umn.edu. [160.94.64.2]) by smtp.googlemail.com with ESMTPSA id n82sm5821135iod.23.2020.06.13.23.53.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2020 23:53:00 -0700 (PDT) From: Navid Emamdoost To: Eric Anholt , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: emamd001@umn.edu, wu000273@umn.edu, kjlu@umn.edu, smccaman@umn.edu, Navid Emamdoost Subject: [PATCH] drm/vc4: fix ref count leak in vc4_dsi_encoder_enable Date: Sun, 14 Jun 2020 01:52:50 -0500 Message-Id: <20200614065251.94106-1-navid.emamdoost@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org in vc4_dsi_encoder_enable, the call to pm_runtime_get_sync increments the counter even in case of failure, leading to incorrect ref count. In case of failure, decrement the ref count before returning. Signed-off-by: Navid Emamdoost --- drivers/gpu/drm/vc4/vc4_dsi.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c index eaf276978ee7..e651de9d1c7d 100644 --- a/drivers/gpu/drm/vc4/vc4_dsi.c +++ b/drivers/gpu/drm/vc4/vc4_dsi.c @@ -838,7 +838,7 @@ static void vc4_dsi_encoder_enable(struct drm_encoder *encoder) ret = pm_runtime_get_sync(dev); if (ret) { DRM_ERROR("Failed to runtime PM enable on DSI%d\n", dsi->port); - return; + goto out; } if (debug_dump_regs) { @@ -916,13 +916,13 @@ static void vc4_dsi_encoder_enable(struct drm_encoder *encoder) ret = clk_prepare_enable(dsi->escape_clock); if (ret) { DRM_ERROR("Failed to turn on DSI escape clock: %d\n", ret); - return; + goto out; } ret = clk_prepare_enable(dsi->pll_phy_clock); if (ret) { DRM_ERROR("Failed to turn on DSI PLL: %d\n", ret); - return; + goto out; } hs_clock = clk_get_rate(dsi->pll_phy_clock); @@ -944,7 +944,7 @@ static void vc4_dsi_encoder_enable(struct drm_encoder *encoder) ret = clk_prepare_enable(dsi->pixel_clock); if (ret) { DRM_ERROR("Failed to turn on DSI pixel clock: %d\n", ret); - return; + goto out; } /* How many ns one DSI unit interval is. Note that the clock @@ -1088,6 +1088,8 @@ static void vc4_dsi_encoder_enable(struct drm_encoder *encoder) dev_info(&dsi->pdev->dev, "DSI regs after:\n"); drm_print_regset32(&p, &dsi->regset); } +out: + pm_runtime_put(dev); } static ssize_t vc4_dsi_host_transfer(struct mipi_dsi_host *host, -- 2.17.1