Received: by 10.192.165.156 with SMTP id m28csp1185554imm; Mon, 16 Apr 2018 15:53:54 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+r8pFISQ7bAJ6wqOoOCv0ZKDvdbjkzoaAjtwN69qml7cS2X1AK6Zp/p+UYRCcvGffLIRRW X-Received: by 10.99.115.14 with SMTP id o14mr14639119pgc.121.1523919234145; Mon, 16 Apr 2018 15:53:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523919234; cv=none; d=google.com; s=arc-20160816; b=U0j7qa+zj8T6xIseRmAg+iZ79r8qymLsdjnh0DOhr8vu7U2ojpJaaB9VPPBLzLzAh6 JQso1CkHiYwE0NVun1JQc7X8PVKzlMdpNItwaWI6hoTP5GzFtzKNtYlaBcyl+JCbPRSx ztEaq6MS1Iu+9DwT4YxBFkAqsZ+4oef9rdyYon1Uoj4w37ZojiQZ4zhE7luDVSSzhINB 2QureQvfVr8rNinkAj9QWyQCt05uJp5fHuNDpuO53TqVlELWfbn883kN2KKddCSNjIiV sV61QKB2CLzN/u55O9mNXtOm/WNjjVMpFg8Nuqc11ckOU5WX+aEeElUQmxZrZtGCg84F /JIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=nmDkQXElOfQiiu3s2wXaBMlnqp8s86RoylJaIU9921o=; b=gqx1o3WVq1w2u8OqvRiXz7Kavm0Y333hUrbvch7NkTO/zoQk6s3yMDZaRHzV171G8t LAUNBkZTp8kZ8sI6mehgZBCG0+GFdblntbKS+5QEsJaLsbH3rPTdlBd7sebED6EWp3Wv 0RJtbaxRtP7RLa99Sls6CBuvvbSnc57GyynCzo5JrslGaSILhegynv0IqMssaGaqDBjA PEFZH3gsvq03P1JGkASfQvnjpu/EaQaq+w5DO5alV9oc3spmCIh0QxtBtXx9tiI+6DAX MVI6YlDTLB2UfYnGgku0fcEzRJoZKXt9aDL6MtArCzy9zeYArtB0FvenIxJ5iy0aYuop TTOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@infradead.org header.s=merlin.20170209 header.b=JA+tEBT2; 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 v140si10467195pgb.326.2018.04.16.15.53.39; Mon, 16 Apr 2018 15:53:54 -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; dkim=neutral (body hash did not verify) header.i=@infradead.org header.s=merlin.20170209 header.b=JA+tEBT2; 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 S1752314AbeDPWwg (ORCPT + 99 others); Mon, 16 Apr 2018 18:52:36 -0400 Received: from merlin.infradead.org ([205.233.59.134]:58462 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751205AbeDPWwf (ORCPT ); Mon, 16 Apr 2018 18:52:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=merlin.20170209; h=Content-Transfer-Encoding:Content-Type: In-Reply-To:MIME-Version:Date:Message-ID:From:References:Cc:To:Subject:Sender :Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=2AewlK3lG9d7tu24Uv3XJLdnCPN9b5pNoX5MUvB+WPY=; b=JA+tEBT2VIeeqbS3HDXUy3dJWa P9tV+pKaMmslXA0eeq/w5BpP0/xycgblFdq/lvX/YOS86Pehyy034kWSLdjA4E/kTT8XxmrGnxFS9 QMEaP6N3c7chg+uibz4VnQezDw3T1klraellZ9YNp1SRBvKsBymM/Z+nDawxnQ3C8HbBQ3e/1riFP n316RAo9mUGTDopAR6zbVUCQ+RmEnHVmbWOu9K/GhOf2c6vGUAal7pqkKoe/xNVO19OJxnkKg2TEk k9jYcqNbksPemHJLy2wNRJ6Xybacq8jzIkjUXuxT4daQHf1tdKYNKmFciuD8dX+8FWQjoWJ5qQiUi NinwYglA==; Received: from static-50-53-52-16.bvtn.or.frontiernet.net ([50.53.52.16] helo=midway.dunlab) by merlin.infradead.org with esmtpsa (Exim 4.90_1 #2 (Red Hat Linux)) id 1f8Cz8-0006eo-V4; Mon, 16 Apr 2018 22:52:31 +0000 Subject: Re: [PATCH 4/8] firmware: add functions to load firmware without warnings v3 To: Andres Rodriguez , linux-kernel@vger.kernel.org Cc: gregkh@linuxfoundation.org, mcgrof@kernel.org, alexdeucher@gmail.com, ckoenig.leichtzumerken@gmail.com, kvalo@codeaurora.org, arend.vanspriel@broadcom.com References: <20180416222427.29683-1-andresx7@gmail.com> <20180416222427.29683-5-andresx7@gmail.com> From: Randy Dunlap Message-ID: <615140ec-4a2a-f181-f3b8-8c097a3be296@infradead.org> Date: Mon, 16 Apr 2018 15:52:29 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180416222427.29683-5-andresx7@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 04/16/18 15:24, Andres Rodriguez wrote: > Currently the firmware loader only exposes one silent path for querying > optional firmware, and that is firmware_request_direct(). This function > also disables the fallback path, which might not always be the > desired behaviour. [0] > > This patch introduces variations of firmware_request() and > firmware_request_nowait() that enable the caller to disable the > undesired warning messages. This is equivalent to adding FW_OPT_NO_WARN, > to the old behaviour. > > v2: add header prototype, use updated opt_flags > v3: split debug message to separate patch > added _nowait variant > added documentation > > [0]: https://git.kernel.org/linus/c0cc00f250e1 > > Signed-off-by: Andres Rodriguez > --- > .../driver-api/firmware/request_firmware.rst | 13 ++++-- > drivers/base/firmware_loader/main.c | 52 ++++++++++++++++++++-- > include/linux/firmware.h | 6 +++ > 3 files changed, 63 insertions(+), 8 deletions(-) > diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c > index 5baadad3012d..14ded1de84bf 100644 > --- a/drivers/base/firmware_loader/main.c > +++ b/drivers/base/firmware_loader/main.c > @@ -631,6 +631,30 @@ firmware_request(const struct firmware **firmware_p, const char *name, > } > EXPORT_SYMBOL(firmware_request); > Please see/use Documentation/doc-guide/kernel-doc.rst: /** * function_name() - Brief description of function. * @arg1: Describe the first argument. * @arg2: Describe the second argument. * One can provide multiple line descriptions * for arguments. ... > +/** > + * firmware_request_nowarn: - request for an optional fw module no ':' above. > + * @firmware: pointer to firmware image > + * @name: name of firmware file > + * @device: device for which firmware is being loaded > + * > + * This function is similar in behaviour to firmware_request(), except > + * it doesn't produce warning messages when the file is not found. > + **/ > +int > +firmware_request_nowarn(const struct firmware **firmware, const char *name, > + struct device *device) > +{ > + int ret; > + > + /* Need to pin this module until return */ > + __module_get(THIS_MODULE); > + ret = _firmware_request(firmware, name, device, NULL, 0, > + FW_OPT_UEVENT | FW_OPT_NO_WARN); > + module_put(THIS_MODULE); > + return ret; > +} > +EXPORT_SYMBOL_GPL(firmware_request_nowarn); > + > /** > * firmware_request_direct: - load firmware directly without usermode helper No ':' above. > * @firmware_p: pointer to firmware image > @@ -755,10 +779,11 @@ static void firmware_request_work_func(struct work_struct *work) > } > > /** > - * firmware_request_nowait - asynchronous version of firmware_request > + * firmware_request_nowait2 - asynchronous version of firmware_request > * @module: module requesting the firmware > * @uevent: sends uevent to copy the firmware image if this flag > * is non-zero else the firmware copy must be done manually. > + * @warn: enable warnings > * @name: name of firmware file > * @device: device for which firmware is being loaded > * @gfp: allocation flags > @@ -778,8 +803,8 @@ static void firmware_request_work_func(struct work_struct *work) > * - can't sleep at all if @gfp is GFP_ATOMIC. > **/ > int > -firmware_request_nowait( > - struct module *module, bool uevent, > +firmware_request_nowait2( > + struct module *module, bool uevent, bool warn, > const char *name, struct device *device, gfp_t gfp, void *context, > void (*cont)(const struct firmware *fw, void *context)) > { > @@ -799,7 +824,8 @@ firmware_request_nowait( > fw_work->context = context; > fw_work->cont = cont; > fw_work->opt_flags = FW_OPT_NOWAIT | > - (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER); > + (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER) | > + (warn ? 0 : FW_OPT_NO_WARN); > > if (!uevent && fw_cache_is_setup(device, name)) { > kfree_const(fw_work->name); > @@ -818,6 +844,24 @@ firmware_request_nowait( > schedule_work(&fw_work->work); > return 0; > } > +EXPORT_SYMBOL_GPL(firmware_request_nowait2); > + > +/** > + * firmware_request_nowait - compatibility version of firmware_request_nowait2 > + * > + * This is equivalent to calling firmware_request_nowait2 with warnings enabled. > + * > + * Refer to firmware_request_nowait2 for further details. > + **/ > +int > +firmware_request_nowait( > + struct module *module, bool uevent, > + const char *name, struct device *device, gfp_t gfp, void *context, > + void (*cont)(const struct firmware *fw, void *context)) > +{ > + return firmware_request_nowait2(module, uevent, true, name, device, > + gfp, context, cont); > +} > EXPORT_SYMBOL(firmware_request_nowait); > > #ifdef CONFIG_PM_SLEEP -- ~Randy