From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754711AbcFPWyn (ORCPT ); Thu, 16 Jun 2016 18:54:43 -0400 Received: from mail.kernel.org ([198.145.29.136]:37826 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754641AbcFPWyj (ORCPT ); Thu, 16 Jun 2016 18:54:39 -0400 From: "Luis R. Rodriguez" To: ming.lei@canonical.com, akpm@linux-foundation.org, mmarek@suse.com, gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, markivx@codeaurora.org, stephen.boyd@linaro.org, zohar@linux.vnet.ibm.com, broonie@kernel.org, tiwai@suse.de, johannes@sipsolutions.net, chunkeey@googlemail.com, hauke@hauke-m.de, jwboyer@fedoraproject.org, dmitry.torokhov@gmail.com, dwmw2@infradead.org, jslaby@suse.com, torvalds@linux-foundation.org, luto@amacapital.net, fengguang.wu@intel.com, rpurdie@rpsys.net, j.anaszewski@samsung.com, Abhay_Salunke@dell.com, Julia.Lawall@lip6.fr, Gilles.Muller@lip6.fr, nicolas.palix@imag.fr, teg@jklm.no, dhowells@redhat.com, "Luis R. Rodriguez" Subject: [PATCH v2 5/5] firmware: fix fw cache to avoid usermode helper on suspend Date: Thu, 16 Jun 2016 15:54:21 -0700 Message-Id: <1466117661-22075-6-git-send-email-mcgrof@kernel.org> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1466117661-22075-1-git-send-email-mcgrof@kernel.org> References: <1466117661-22075-1-git-send-email-mcgrof@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The firmware cache purposely kills all non-udev (usermode helper) pending requests prior to suspend with kill_requests_without_uevent() right before it calls out to request for firmware for the fw cache. It is pointless to again run into the possible issue of queing up further usermode helpers during suspend, furthermore its actually buggy to have required the usermode helper in some cases where clearly the driver originally had not wanted that. Fix this by simply using the direct call. This doesn't fix any known bug however if it should be an optimization for suspend/resume. While at it extend documentation to ensure folks of the usermode helper are aware that they must cache the firmware on their own for suspend / resume. Signed-off-by: Luis R. Rodriguez --- Documentation/firmware_class/README | 3 +++ drivers/base/firmware_class.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Documentation/firmware_class/README b/Documentation/firmware_class/README index 00604b6d7675..b7b99f4e3aaf 100644 --- a/Documentation/firmware_class/README +++ b/Documentation/firmware_class/README @@ -172,3 +172,6 @@ $ make coccicheck MODE=report resume callback, and callers needn't cache the firmware by themselves any more for dealing with firmware loss during system resume. + +The firmware cache is only for non-user mode helper users. Drivers that +require the usermode helper must deal with caching on their own. diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c index 22d1760a4278..dca4f9cbf4db 100644 --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c @@ -1412,7 +1412,7 @@ static int cache_firmware(const char *fw_name) pr_debug("%s: %s\n", __func__, fw_name); - ret = request_firmware(&fw, fw_name, NULL); + ret = request_firmware_direct(&fw, fw_name, NULL); if (!ret) kfree(fw); -- 2.8.2