From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752442AbcBVOz2 (ORCPT ); Mon, 22 Feb 2016 09:55:28 -0500 Received: from smtp-out-196.synserver.de ([212.40.185.196]:1216 "EHLO smtp-out-033.synserver.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751954AbcBVOz0 (ORCPT ); Mon, 22 Feb 2016 09:55:26 -0500 X-SynServer-TrustedSrc: 1 X-SynServer-AuthUser: lars@metafoo.de X-SynServer-PPID: 7825 Subject: Re: [alsa-devel] [PATCH v2] ASoC: wm9713: fix regmap free path To: Robert Jarzmik , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai References: <1455997470-12307-1-git-send-email-robert.jarzmik@free.fr> Cc: alsa-devel@alsa-project.org, patches@opensource.wolfsonmicro.com, linux-kernel@vger.kernel.org From: Lars-Peter Clausen Message-ID: <56C98DA3.4000701@metafoo.de> Date: Sun, 21 Feb 2016 11:12:51 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.5.0 MIME-Version: 1.0 In-Reply-To: <1455997470-12307-1-git-send-email-robert.jarzmik@free.fr> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/20/2016 08:44 PM, Robert Jarzmik wrote: > In the conversion to regmap, I assumed that the 2 following functions > was working symetrically: > - snd_soc_codec_init_regmap() > - snd_soc_codec_exit_regmap(codec) > > As a mater of fact with the current code the regmap is freed twice > because of the devm_() call: > (mutex_lock) from (debugfs_remove_recursive+0x50/0x1d0) > (debugfs_remove_recursive) from (regmap_debugfs_exit+0x1c/0xd4) > (regmap_debugfs_exit) from (regmap_exit+0x28/0xc8) > (regmap_exit) from (release_nodes+0x18c/0x204) > (release_nodes) from (device_release+0x18/0x90) > (device_release) from (kobject_release+0x90/0x1bc) > (kobject_release) from (wm9713_soc_remove+0x1c/0x24) > (wm9713_soc_remove) from (soc_remove_component+0x50/0x7c) > (soc_remove_component) from (soc_remove_dai_links+0x118/0x228) > (soc_remove_dai_links) from (snd_soc_register_card+0x4e4/0xdd4) > (snd_soc_register_card) from (devm_snd_soc_register_card+0x34/0x70) > > Fix this by removing the doubled regmap free. The correct fix is to use the non devm variant of regmap_init_ac97() in this case. Device managed functions should only be used from inside a struct device probe function. - Lars