From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 22229C433EF for ; Tue, 5 Oct 2021 14:36:00 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DFA626137C for ; Tue, 5 Oct 2021 14:35:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org DFA626137C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linuxfoundation.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 09EAF6F5DC; Tue, 5 Oct 2021 14:35:59 +0000 (UTC) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0B6866F5DC; Tue, 5 Oct 2021 14:35:58 +0000 (UTC) Received: by mail.kernel.org (Postfix) with ESMTPSA id 6DE7161372; Tue, 5 Oct 2021 14:35:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1633444557; bh=WvZ8JLb5v93QBADCd0vUKgm5lhpJbxIW9TwhqZ0TzdM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=JjFWcOLGO1DYCmQLBXXDU7pHE4TCziZiUu68bh6z27RvqRP1ihbXe1Ukc99/QzH78 JPaz5bk7gVXpoOMDb2UOHjch5c17x6n9GX3+wNanmyCgiKoRGKX7//xQ+umkLA+Hm3 fWgJx+vTpPM2oJGtjz7bzQFiYgBLKbmxo0CC4XxM= Date: Tue, 5 Oct 2021 16:35:55 +0200 From: Greg KH To: Kai Vehmanen Cc: dri-devel@lists.freedesktop.org, tiwai@suse.de, alsa-devel@alsa-project.org, jani.nikula@intel.com, Imre Deak , Russell King , "Rafael J . Wysocki" , intel-gfx@lists.freedesktop.org, Russell King Subject: Re: [PATCH v2] component: do not leave master devres group open after bind Message-ID: References: <20210922085432.2776886-1-kai.vehmanen@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210922085432.2776886-1-kai.vehmanen@linux.intel.com> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Wed, Sep 22, 2021 at 11:54:32AM +0300, Kai Vehmanen wrote: > In current code, the devres group for aggregate master is left open > after call to component_master_add_*(). This leads to problems when the > master does further managed allocations on its own. When any > participating driver calls component_del(), this leads to immediate > release of resources. > > This came up when investigating a page fault occurring with i915 DRM > driver unbind with 5.15-rc1 kernel. The following sequence occurs: > > i915_pci_remove() > -> intel_display_driver_unregister() > -> i915_audio_component_cleanup() > -> component_del() > -> component.c:take_down_master() > -> hdac_component_master_unbind() [via master->ops->unbind()] > -> devres_release_group(master->parent, NULL) > > With older kernels this has not caused issues, but with audio driver > moving to use managed interfaces for more of its allocations, this no > longer works. Devres log shows following to occur: > > component_master_add_with_match() > [ 126.886032] snd_hda_intel 0000:00:1f.3: DEVRES ADD 00000000323ccdc5 devm_component_match_release (24 bytes) > [ 126.886045] snd_hda_intel 0000:00:1f.3: DEVRES ADD 00000000865cdb29 grp< (0 bytes) > [ 126.886049] snd_hda_intel 0000:00:1f.3: DEVRES ADD 000000001b480725 grp< (0 bytes) > > audio driver completes its PCI probe() > [ 126.892238] snd_hda_intel 0000:00:1f.3: DEVRES ADD 000000001b480725 pcim_iomap_release (48 bytes) > > component_del() called() at DRM/i915 unbind() > [ 137.579422] i915 0000:00:02.0: DEVRES REL 00000000ef44c293 grp< (0 bytes) > [ 137.579445] snd_hda_intel 0000:00:1f.3: DEVRES REL 00000000865cdb29 grp< (0 bytes) > [ 137.579458] snd_hda_intel 0000:00:1f.3: DEVRES REL 000000001b480725 pcim_iomap_release (48 bytes) > > So the "devres_release_group(master->parent, NULL)" ends up freeing the > pcim_iomap allocation. Upon next runtime resume, the audio driver will > cause a page fault as the iomap alloc was released without the driver > knowing about it. > > Fix this issue by using the "struct master" pointer as identifier for > the devres group, and by closing the devres group after > the master->ops->bind() call is done. This allows devres allocations > done by the driver acting as master to be isolated from the binding state > of the aggregate driver. This modifies the logic originally introduced in > commit 9e1ccb4a7700 ("drivers/base: fix devres handling for master device") > > BugLink: https://gitlab.freedesktop.org/drm/intel/-/issues/4136 > Signed-off-by: Kai Vehmanen > Acked-by: Imre Deak > Acked-by: Russell King (Oracle) > --- > drivers/base/component.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) What commit does this "fix:"? And does it need to go to stable kernel(s)? thanks, greg k-h From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D88D6C433F5 for ; Tue, 5 Oct 2021 14:36:03 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A341561350 for ; Tue, 5 Oct 2021 14:36:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org A341561350 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linuxfoundation.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 545396F5DE; Tue, 5 Oct 2021 14:35:59 +0000 (UTC) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0B6866F5DC; Tue, 5 Oct 2021 14:35:58 +0000 (UTC) Received: by mail.kernel.org (Postfix) with ESMTPSA id 6DE7161372; Tue, 5 Oct 2021 14:35:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1633444557; bh=WvZ8JLb5v93QBADCd0vUKgm5lhpJbxIW9TwhqZ0TzdM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=JjFWcOLGO1DYCmQLBXXDU7pHE4TCziZiUu68bh6z27RvqRP1ihbXe1Ukc99/QzH78 JPaz5bk7gVXpoOMDb2UOHjch5c17x6n9GX3+wNanmyCgiKoRGKX7//xQ+umkLA+Hm3 fWgJx+vTpPM2oJGtjz7bzQFiYgBLKbmxo0CC4XxM= Date: Tue, 5 Oct 2021 16:35:55 +0200 From: Greg KH To: Kai Vehmanen Cc: dri-devel@lists.freedesktop.org, tiwai@suse.de, alsa-devel@alsa-project.org, jani.nikula@intel.com, Imre Deak , Russell King , "Rafael J . Wysocki" , intel-gfx@lists.freedesktop.org, Russell King Message-ID: References: <20210922085432.2776886-1-kai.vehmanen@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210922085432.2776886-1-kai.vehmanen@linux.intel.com> Subject: Re: [Intel-gfx] [PATCH v2] component: do not leave master devres group open after bind X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" On Wed, Sep 22, 2021 at 11:54:32AM +0300, Kai Vehmanen wrote: > In current code, the devres group for aggregate master is left open > after call to component_master_add_*(). This leads to problems when the > master does further managed allocations on its own. When any > participating driver calls component_del(), this leads to immediate > release of resources. > > This came up when investigating a page fault occurring with i915 DRM > driver unbind with 5.15-rc1 kernel. The following sequence occurs: > > i915_pci_remove() > -> intel_display_driver_unregister() > -> i915_audio_component_cleanup() > -> component_del() > -> component.c:take_down_master() > -> hdac_component_master_unbind() [via master->ops->unbind()] > -> devres_release_group(master->parent, NULL) > > With older kernels this has not caused issues, but with audio driver > moving to use managed interfaces for more of its allocations, this no > longer works. Devres log shows following to occur: > > component_master_add_with_match() > [ 126.886032] snd_hda_intel 0000:00:1f.3: DEVRES ADD 00000000323ccdc5 devm_component_match_release (24 bytes) > [ 126.886045] snd_hda_intel 0000:00:1f.3: DEVRES ADD 00000000865cdb29 grp< (0 bytes) > [ 126.886049] snd_hda_intel 0000:00:1f.3: DEVRES ADD 000000001b480725 grp< (0 bytes) > > audio driver completes its PCI probe() > [ 126.892238] snd_hda_intel 0000:00:1f.3: DEVRES ADD 000000001b480725 pcim_iomap_release (48 bytes) > > component_del() called() at DRM/i915 unbind() > [ 137.579422] i915 0000:00:02.0: DEVRES REL 00000000ef44c293 grp< (0 bytes) > [ 137.579445] snd_hda_intel 0000:00:1f.3: DEVRES REL 00000000865cdb29 grp< (0 bytes) > [ 137.579458] snd_hda_intel 0000:00:1f.3: DEVRES REL 000000001b480725 pcim_iomap_release (48 bytes) > > So the "devres_release_group(master->parent, NULL)" ends up freeing the > pcim_iomap allocation. Upon next runtime resume, the audio driver will > cause a page fault as the iomap alloc was released without the driver > knowing about it. > > Fix this issue by using the "struct master" pointer as identifier for > the devres group, and by closing the devres group after > the master->ops->bind() call is done. This allows devres allocations > done by the driver acting as master to be isolated from the binding state > of the aggregate driver. This modifies the logic originally introduced in > commit 9e1ccb4a7700 ("drivers/base: fix devres handling for master device") > > BugLink: https://gitlab.freedesktop.org/drm/intel/-/issues/4136 > Signed-off-by: Kai Vehmanen > Acked-by: Imre Deak > Acked-by: Russell King (Oracle) > --- > drivers/base/component.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) What commit does this "fix:"? And does it need to go to stable kernel(s)? thanks, greg k-h From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D01BDC433F5 for ; Tue, 5 Oct 2021 14:37:05 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8846E61381 for ; Tue, 5 Oct 2021 14:37:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 8846E61381 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linuxfoundation.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=alsa-project.org Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 811A11669; Tue, 5 Oct 2021 16:36:12 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 811A11669 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1633444622; bh=WvZ8JLb5v93QBADCd0vUKgm5lhpJbxIW9TwhqZ0TzdM=; h=Date:From:To:Subject:References:In-Reply-To:Cc:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=OWUmGhzkiSZkuH6Sm3GwCGqE6JENZN4GEVt40NnFrxApY+2kXj0wraaUPlfIBzl/y 027rRsjTFDZD01XKrn5RrMAc2ChvwYEkHacB+D2UaPqurAvbaEQdeaEg0MLT6tNYRZ 8B/USSqC72HCW2roJupzfJ3jc17PHthAY9O3QUTQ= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id 0DC52F80259; Tue, 5 Oct 2021 16:36:12 +0200 (CEST) Received: by alsa1.perex.cz (Postfix, from userid 50401) id D0273F8027D; Tue, 5 Oct 2021 16:36:09 +0200 (CEST) Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 2C332F80154 for ; Tue, 5 Oct 2021 16:36:01 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 2C332F80154 Authentication-Results: alsa1.perex.cz; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="JjFWcOLG" Received: by mail.kernel.org (Postfix) with ESMTPSA id 6DE7161372; Tue, 5 Oct 2021 14:35:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1633444557; bh=WvZ8JLb5v93QBADCd0vUKgm5lhpJbxIW9TwhqZ0TzdM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=JjFWcOLGO1DYCmQLBXXDU7pHE4TCziZiUu68bh6z27RvqRP1ihbXe1Ukc99/QzH78 JPaz5bk7gVXpoOMDb2UOHjch5c17x6n9GX3+wNanmyCgiKoRGKX7//xQ+umkLA+Hm3 fWgJx+vTpPM2oJGtjz7bzQFiYgBLKbmxo0CC4XxM= Date: Tue, 5 Oct 2021 16:35:55 +0200 From: Greg KH To: Kai Vehmanen Subject: Re: [PATCH v2] component: do not leave master devres group open after bind Message-ID: References: <20210922085432.2776886-1-kai.vehmanen@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210922085432.2776886-1-kai.vehmanen@linux.intel.com> Cc: alsa-devel@alsa-project.org, "Rafael J . Wysocki" , tiwai@suse.de, Imre Deak , dri-devel@lists.freedesktop.org, jani.nikula@intel.com, Russell King , Russell King , intel-gfx@lists.freedesktop.org X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" On Wed, Sep 22, 2021 at 11:54:32AM +0300, Kai Vehmanen wrote: > In current code, the devres group for aggregate master is left open > after call to component_master_add_*(). This leads to problems when the > master does further managed allocations on its own. When any > participating driver calls component_del(), this leads to immediate > release of resources. > > This came up when investigating a page fault occurring with i915 DRM > driver unbind with 5.15-rc1 kernel. The following sequence occurs: > > i915_pci_remove() > -> intel_display_driver_unregister() > -> i915_audio_component_cleanup() > -> component_del() > -> component.c:take_down_master() > -> hdac_component_master_unbind() [via master->ops->unbind()] > -> devres_release_group(master->parent, NULL) > > With older kernels this has not caused issues, but with audio driver > moving to use managed interfaces for more of its allocations, this no > longer works. Devres log shows following to occur: > > component_master_add_with_match() > [ 126.886032] snd_hda_intel 0000:00:1f.3: DEVRES ADD 00000000323ccdc5 devm_component_match_release (24 bytes) > [ 126.886045] snd_hda_intel 0000:00:1f.3: DEVRES ADD 00000000865cdb29 grp< (0 bytes) > [ 126.886049] snd_hda_intel 0000:00:1f.3: DEVRES ADD 000000001b480725 grp< (0 bytes) > > audio driver completes its PCI probe() > [ 126.892238] snd_hda_intel 0000:00:1f.3: DEVRES ADD 000000001b480725 pcim_iomap_release (48 bytes) > > component_del() called() at DRM/i915 unbind() > [ 137.579422] i915 0000:00:02.0: DEVRES REL 00000000ef44c293 grp< (0 bytes) > [ 137.579445] snd_hda_intel 0000:00:1f.3: DEVRES REL 00000000865cdb29 grp< (0 bytes) > [ 137.579458] snd_hda_intel 0000:00:1f.3: DEVRES REL 000000001b480725 pcim_iomap_release (48 bytes) > > So the "devres_release_group(master->parent, NULL)" ends up freeing the > pcim_iomap allocation. Upon next runtime resume, the audio driver will > cause a page fault as the iomap alloc was released without the driver > knowing about it. > > Fix this issue by using the "struct master" pointer as identifier for > the devres group, and by closing the devres group after > the master->ops->bind() call is done. This allows devres allocations > done by the driver acting as master to be isolated from the binding state > of the aggregate driver. This modifies the logic originally introduced in > commit 9e1ccb4a7700 ("drivers/base: fix devres handling for master device") > > BugLink: https://gitlab.freedesktop.org/drm/intel/-/issues/4136 > Signed-off-by: Kai Vehmanen > Acked-by: Imre Deak > Acked-by: Russell King (Oracle) > --- > drivers/base/component.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) What commit does this "fix:"? And does it need to go to stable kernel(s)? thanks, greg k-h