Received: by 10.192.165.156 with SMTP id m28csp1076944imm; Wed, 11 Apr 2018 12:00:31 -0700 (PDT) X-Google-Smtp-Source: AIpwx48OBiFvdzzmOISu1YUBWK4RZEfC6Ei8rYkL1aHF2PIMiq4HgcpRCa86TrtgFlOqA4n6Im4z X-Received: by 2002:a17:902:5497:: with SMTP id e23-v6mr6355165pli.308.1523473231848; Wed, 11 Apr 2018 12:00:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523473231; cv=none; d=google.com; s=arc-20160816; b=M2edRXtKFhFmnQWd3MJkAW68/dLQtZn9J5Z6Cpg9E2+O8JoOoKsHCT75OUJNn9vR2l 1pDwq8GFcHwtYSzzYtPk1erhj+XhfabkD/zaj8FqjoRxCJXPsxoWicdQ98G54NIlUYeL A42XuCfX7nvDJBnJQ/2h5+sFcBCwpuw9RGOX0PXrKaVSI/ieSFlTNSDZMFijBOCZ6r7l /LDGnjTZrvUuQrku6hZGIs+7EmVXUxisVWBtb/DgGL03rSH4HviXgXyj8J5E/vkd9gk7 sl5wWRI/ESJeFKepYPZH8wlZ9mZ3NlXvB9UM5tiPZQTaazrNGFsv+oIMqRtanjRx2HhU bCsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=R8I6tSqN3iKRDLx/EBJFGp6hauBJBOGxPV8MiNLddJg=; b=f9nkS7juDWDRqwv0f0sXp4DZSlN7WVvZwNe+Aa0vgt2DemOwN29GUqpaRKg6Qx8Qy6 HkyWaH3y+8lDT6c2NPs37w8JcC6fuZ0w2baPnepF48D9HO5rVx6CFIt2NfcwGUPpgmq0 zy4txeqgE+ZcbPgwmklxZQ3FwXQeHdLuxfSp3VyKYxEbWsp6rWdNUR/6s1gpFLqGw5D9 n394fZKkwmE6V5kyRNy4XiAUUc65G2GNGWPLceokgkWc+UNfORovEB7C8VTH46vg2GEV 9UjuR+OpRjJHTbOPPMdwScIm/LxWbRJATVIFcpzYDiUaBRq144P88tOUPgAHl79Przf3 U85g== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 207si1295145pfz.108.2018.04.11.11.59.54; Wed, 11 Apr 2018 12:00:31 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933862AbeDKS4Q (ORCPT + 99 others); Wed, 11 Apr 2018 14:56:16 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:35698 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933853AbeDKS4N (ORCPT ); Wed, 11 Apr 2018 14:56:13 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id BAB0CC03; Wed, 11 Apr 2018 18:56:12 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Petr Cvek , Robert Jarzmik , Hans Verkuil , Mauro Carvalho Chehab , Sasha Levin Subject: [PATCH 4.9 066/310] [media] pxa_camera: fix module remove codepath for v4l2 clock Date: Wed, 11 Apr 2018 20:33:25 +0200 Message-Id: <20180411183625.155746152@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180411183622.305902791@linuxfoundation.org> References: <20180411183622.305902791@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: Petr Cvek [ Upstream commit e3b4d10cc057522353c4a02f2f90dca6a52e006f ] The conversion from soc_camera omitted a correct handling of the clock gating for a sensor. When the pxa_camera driver module was removed it tried to unregister clk, but this caused a similar warning: WARNING: CPU: 0 PID: 6740 at drivers/media/v4l2-core/v4l2-clk.c:278 v4l2_clk_unregister(): Refusing to unregister ref-counted 0-0030 clock! The clock was at time still refcounted by the sensor driver. Before the removing of the pxa_camera the clock must be dropped by the sensor driver. This should be triggered by v4l2_async_notifier_unregister() call which removes sensor driver module too, calls unbind() function and then tries to probe sensor driver again. Inside unbind() we can safely unregister the v4l2 clock as the sensor driver got removed. The original v4l2_clk_unregister() should be put inside test as the clock can be already unregistered from unbind(). If there was not any bound sensor the clock is still present. The codepath is practically a copy from the old soc_camera. The bug was tested with a pxa_camera+ov9640 combination during the conversion of the ov9640 from the soc_camera. Signed-off-by: Petr Cvek Tested-by: Robert Jarzmik Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/media/platform/pxa_camera.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) --- a/drivers/media/platform/pxa_camera.c +++ b/drivers/media/platform/pxa_camera.c @@ -2169,6 +2169,12 @@ static void pxa_camera_sensor_unbind(str pxa_dma_stop_channels(pcdev); pxa_camera_destroy_formats(pcdev); + + if (pcdev->mclk_clk) { + v4l2_clk_unregister(pcdev->mclk_clk); + pcdev->mclk_clk = NULL; + } + video_unregister_device(&pcdev->vdev); pcdev->sensor = NULL; @@ -2495,7 +2501,13 @@ static int pxa_camera_remove(struct plat dma_release_channel(pcdev->dma_chans[1]); dma_release_channel(pcdev->dma_chans[2]); - v4l2_clk_unregister(pcdev->mclk_clk); + v4l2_async_notifier_unregister(&pcdev->notifier); + + if (pcdev->mclk_clk) { + v4l2_clk_unregister(pcdev->mclk_clk); + pcdev->mclk_clk = NULL; + } + v4l2_device_unregister(&pcdev->v4l2_dev); dev_info(&pdev->dev, "PXA Camera driver unloaded\n");