Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933113AbdDFGi5 (ORCPT ); Thu, 6 Apr 2017 02:38:57 -0400 Received: from mga02.intel.com ([134.134.136.20]:29057 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752954AbdDFGix (ORCPT ); Thu, 6 Apr 2017 02:38:53 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.37,283,1488873600"; d="scan'208";a="85376614" From: "Coelho, Luciano" To: "gregkh@linuxfoundation.org" , "mcgrof@kernel.org" CC: "linux-kernel@vger.kernel.org" , "pjones@redhat.com" , "moritz.fischer@ettus.com" , "takahiro.akashi@linaro.org" , "dhowells@redhat.com" , "pmladek@suse.com" , "Berg, Johannes" , "rjw@rjwysocki.net" , "yi1.li@linux.intel.com" , "kvalo@codeaurora.org" , "luto@kernel.org" , "arend.vanspriel@broadcom.com" , "rafal@milecki.pl" , "dwmw2@infradead.org" , "wagi@monom.org" , "atull@opensource.altera.com" , "Grumbach, Emmanuel" Subject: Re: [PATCH 1/5] firmware: share fw fallback killing on reboot/suspend Thread-Topic: [PATCH 1/5] firmware: share fw fallback killing on reboot/suspend Thread-Index: AQHSqQVCRbcb41HNj0ikRin7vvPR2qG33hMA Date: Thu, 6 Apr 2017 06:38:47 +0000 Message-ID: <1491460726.28535.42.camel@intel.com> References: <20170330032450.17121-1-mcgrof@kernel.org> <20170330032450.17121-2-mcgrof@kernel.org> In-Reply-To: <20170330032450.17121-2-mcgrof@kernel.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.252.23.86] Content-Type: text/plain; charset="utf-8" Content-ID: MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id v366dBqC003439 Content-Length: 2402 Lines: 76 Hi Luis, On Wed, 2017-03-29 at 20:24 -0700, Luis R. Rodriguez wrote: > We kill pending fallback requests on suspend and reboot, > the only difference is that on suspend we only kill custom > fallback requests. Provide a wrapper that lets us customize > the request with a flag. > > This also lets us simplify the #ifdef'ery over the calls. > > Signed-off-by: Luis R. Rodriguez > --- > drivers/base/firmware_class.c | 32 ++++++++++++++++---------------- > 1 file changed, 16 insertions(+), 16 deletions(-) > > diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c > index ac350c518e0c..d2e2d83aaf26 100644 > --- a/drivers/base/firmware_class.c > +++ b/drivers/base/firmware_class.c > @@ -562,16 +562,15 @@ static void fw_load_abort(struct firmware_priv *fw_priv) > > static LIST_HEAD(pending_fw_head); > > -/* reboot notifier for avoid deadlock with usermode_lock */ > static int fw_shutdown_notify(struct notifier_block *unused1, > unsigned long unused2, void *unused3) > { > - mutex_lock(&fw_lock); > - while (!list_empty(&pending_fw_head)) > - __fw_load_abort(list_first_entry(&pending_fw_head, > - struct firmware_buf, > - pending_list)); > - mutex_unlock(&fw_lock); > + /* > + * Kill all pending fallback requests to avoid both stalling shutdown, > + * and avoid a deadlock with the usermode_lock. > + */ > + kill_pending_fw_fallback_reqs(false); You are calling this function before you declare it, this won't compile when CONFIG_FW_LOADER_USER_HELPER is not set. > + > return NOTIFY_DONE; > } > > @@ -1048,21 +1047,20 @@ static int fw_load_from_user_helper(struct firmware *firmware, > return _request_firmware_load(fw_priv, opt_flags, timeout); > } > > -#ifdef CONFIG_PM_SLEEP > -/* kill pending requests without uevent to avoid blocking suspend */ > -static void kill_requests_without_uevent(void) > +static void kill_pending_fw_fallback_reqs(bool only_kill_custom) > { > struct firmware_buf *buf; > struct firmware_buf *next; > > mutex_lock(&fw_lock); > list_for_each_entry_safe(buf, next, &pending_fw_head, pending_list) { > - if (!buf->need_uevent) > + if (!only_kill_custom) > + __fw_load_abort(buf); > + else if (!buf->need_uevent) > __fw_load_abort(buf); Why not use this? if (!only_kill_custom || !buf->need_uevent) __fw_load_abort(buf); -- Cheers, Luca.