[v2] firmware_loader: Abort new fw load request once firmware core knows about reboot
Message ID | 1696431327-7369-1-git-send-email-quic_mojha@quicinc.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:254a:b0:403:3b70:6f57 with SMTP id hf10csp190694vqb; Wed, 4 Oct 2023 07:56:37 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEzALw2oN30rct3GzeE6OJc/S2wVWarJxSOp/Bq+4rAiNIAOQaTHjadMlyaEpRInX2W4qDp X-Received: by 2002:a05:6358:e49f:b0:143:7bba:3c73 with SMTP id by31-20020a056358e49f00b001437bba3c73mr2506582rwb.1.1696431397511; Wed, 04 Oct 2023 07:56:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696431397; cv=none; d=google.com; s=arc-20160816; b=iWpmRZz47jTySRxTSoQG0Cx1nvZpEAvrlyYvQu7nbcsneawuUM3XPTB6AqMq/UdbTE fJAhyPsbB7T1X/fez6C7VzwU/uABrMgREpX/rN+aNffb4adpJY3GzJnD0E8xCwL74kJ/ IyIbCZ2dSZ614nYLY4XcSGMbPqsDSlxsHLbemRELdQlN7pV0lU3gYGc4zgBLGLgkf2nY Gq455tJUY1K8a7gTrrp6LP144tLI93OhJ44eTT52M9Ew07TlrgmQHe96gQidmzV2oGI9 cVzRXseX0VZ6K4PeglynOsjcaEwIG+WABPKS7HXy3tWGQKnfSpZMJxUMfviT4jxJ1NdS Lv9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from :dkim-signature; bh=W3GltK28J0SONn7jU/j3ZxDyrtxFksKfwkeLktZT698=; fh=2+lvJt/dCAbsF6PMV3rfhQ/+WJSa+MReowFQL/ereY0=; b=T52WQr7YXRmsCyLufeG2knxHHHxkErh/FzqAgy8WS0JxebSuPwE5ZybW1xTW0goECx PZ8AuOSpbQpWDioYdg/uAkm6VxLQLyZEsuUaOe2/Zfim2bmYMNPep1/UKHRC2jPB8jWj fQ+79zBmfnWRPufFDoi8sZtI9kvhrqBDIMkx9Uy1CVHnmRRNSE6Z5vhISpzXZyIZE3kC 1m+66/5YM73ieVHoJQQFwoDPrWAI4WGq5JXU9XgfKA0pKsBO5ysVM9ZpZcqJNlrOkFKy 2+8o6dC7VcEj5MpytzNlsL8X0QKLHPqAdH8Ldd1jbi/XQhMKf6vyVHe3uUPm8DqyJN8H 8RKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=S2TaWc46; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id b19-20020a6567d3000000b0056a1a149034si4006043pgs.650.2023.10.04.07.56.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Oct 2023 07:56:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=S2TaWc46; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id D4D6681AA532; Wed, 4 Oct 2023 07:56:33 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243015AbjJDO4J (ORCPT <rfc822;pusanteemu@gmail.com> + 18 others); Wed, 4 Oct 2023 10:56:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38216 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243020AbjJDO4H (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Wed, 4 Oct 2023 10:56:07 -0400 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 29E7CC4 for <linux-kernel@vger.kernel.org>; Wed, 4 Oct 2023 07:56:00 -0700 (PDT) Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 394BPXgq023918; Wed, 4 Oct 2023 14:55:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : mime-version : content-type; s=qcppdkim1; bh=W3GltK28J0SONn7jU/j3ZxDyrtxFksKfwkeLktZT698=; b=S2TaWc46J6wiam6ChDgxLNMFLy6uBImCPLXKhzUmAnfCfqVmF3hI6qYoQfa+XHk+z4sa 589sPj3SkSlNrzRokxEk1C+oZazwi5uOrE5qGl7a4t5uBeHgh3qjn/qE6AnnXI9c6xK2 QKA1Euco2mVrQJZ1Xqgf5ek5i9tO80ZHJGVj+3WxfRyp4TiKvOdCdDYdHG0PYm3bgVg6 MVl8+f1fM4sTDqOTCsfOnXM1cK38pxTZQOogs0he81fLQm2m/wi4ngNhuHBgfxC43l/N 8q6i2WwZjGzqd8D45i/ye1Cw0nX3sViPJY0i2zo0AZN4ThA1tzAizSo1JNxKG24YYAZB ww== Received: from nasanppmta02.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3tgr9mj6bx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 04 Oct 2023 14:55:46 +0000 Received: from nasanex01c.na.qualcomm.com (nasanex01c.na.qualcomm.com [10.45.79.139]) by NASANPPMTA02.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 394Etjsj004849 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 4 Oct 2023 14:55:45 GMT Received: from hu-mojha-hyd.qualcomm.com (10.80.80.8) by nasanex01c.na.qualcomm.com (10.45.79.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.36; Wed, 4 Oct 2023 07:55:43 -0700 From: Mukesh Ojha <quic_mojha@quicinc.com> To: <mcgrof@kernel.org>, <russell.h.weight@intel.com>, <gregkh@linuxfoundation.org>, <rafael@kernel.org> CC: <linux-kernel@vger.kernel.org>, Mukesh Ojha <quic_mojha@quicinc.com> Subject: [PATCH v2] firmware_loader: Abort new fw load request once firmware core knows about reboot Date: Wed, 4 Oct 2023 20:25:27 +0530 Message-ID: <1696431327-7369-1-git-send-email-quic_mojha@quicinc.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01c.na.qualcomm.com (10.45.79.139) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: 8WA_CQ0sq4Lcb7Igo60R555WIRf_u0PH X-Proofpoint-ORIG-GUID: 8WA_CQ0sq4Lcb7Igo60R555WIRf_u0PH X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-04_07,2023-10-02_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 mlxscore=0 adultscore=0 clxscore=1015 mlxlogscore=999 phishscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310040108 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Wed, 04 Oct 2023 07:56:33 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778837249096766306 X-GMAIL-MSGID: 1778837249096766306 |
Series |
[v2] firmware_loader: Abort new fw load request once firmware core knows about reboot
|
|
Commit Message
Mukesh Ojha
Oct. 4, 2023, 2:55 p.m. UTC
There could be following scenario where there is a ongoing reboot
is going from processA which tries to call all the reboot notifier
callback and one of them is firmware reboot call which tries to
abort all the ongoing firmware userspace request under fw_lock but
there could be another processB which tries to do request firmware,
which came just after abort done from ProcessA and ask for userspace
to load the firmware and this can stop the ongoing reboot ProcessA
to stall for next 60s(default timeout) which may not be expected
behaviour everyone like to see, instead we should abort any firmware
load request which came once firmware knows about the reboot through
notification.
ProcessA ProcessB
kernel_restart_prepare
blocking_notifier_call_chain
fw_shutdown_notify
kill_pending_fw_fallback_reqs
__fw_load_abort
fw_state_aborted request_firmware
__fw_state_set firmware_fallback_sysfs
... fw_load_from_user_helper
.. ...
. ..
usermodehelper_read_trylock
fw_load_sysfs_fallback
fw_sysfs_wait_timeout
usermodehelper_disable
__usermodehelper_disable
down_write()
Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com>
---
Changes from v1: https://lore.kernel.org/lkml/1694773288-15755-1-git-send-email-quic_mojha@quicinc.com/
- Renamed the flag to fw_load_abort.
- Kept the flag under fw_lock.
- Repharsed commit text.
drivers/base/firmware_loader/fallback.c | 6 +++++-
drivers/base/firmware_loader/firmware.h | 1 +
drivers/base/firmware_loader/main.c | 1 +
3 files changed, 7 insertions(+), 1 deletion(-)
Comments
Hi Mukesh, kernel test robot noticed the following build warnings: [auto build test WARNING on driver-core/driver-core-testing] [also build test WARNING on driver-core/driver-core-next driver-core/driver-core-linus linus/master v6.6-rc4 next-20231004] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Mukesh-Ojha/firmware_loader-Abort-new-fw-load-request-once-firmware-core-knows-about-reboot/20231004-225910 base: driver-core/driver-core-testing patch link: https://lore.kernel.org/r/1696431327-7369-1-git-send-email-quic_mojha%40quicinc.com patch subject: [PATCH v2] firmware_loader: Abort new fw load request once firmware core knows about reboot config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20231005/202310050525.CcwD9rYd-lkp@intel.com/config) compiler: m68k-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231005/202310050525.CcwD9rYd-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202310050525.CcwD9rYd-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from drivers/base/firmware_loader/fallback.h:9, from drivers/base/firmware_loader/fallback.c:11: drivers/base/firmware_loader/sysfs.h:87:20: error: 'fw_load_abort' redeclared as different kind of symbol 87 | static inline void fw_load_abort(struct fw_sysfs *fw_sysfs) | ^~~~~~~~~~~~~ In file included from drivers/base/firmware_loader/fallback.h:8: drivers/base/firmware_loader/firmware.h:89:13: note: previous declaration of 'fw_load_abort' with type 'bool' {aka '_Bool'} 89 | extern bool fw_load_abort; | ^~~~~~~~~~~~~ drivers/base/firmware_loader/fallback.c: In function 'kill_pending_fw_fallback_reqs': drivers/base/firmware_loader/fallback.c:62:31: error: lvalue required as left operand of assignment 62 | fw_load_abort = true; | ^ drivers/base/firmware_loader/fallback.c: In function 'fw_load_sysfs_fallback': >> drivers/base/firmware_loader/fallback.c:93:13: warning: the address of 'fw_load_abort' will always evaluate as 'true' [-Waddress] 93 | if (fw_load_abort || fw_state_is_aborted(fw_priv)) { | ^~~~~~~~~~~~~ vim +93 drivers/base/firmware_loader/fallback.c 66 67 /** 68 * fw_load_sysfs_fallback() - load a firmware via the sysfs fallback mechanism 69 * @fw_sysfs: firmware sysfs information for the firmware to load 70 * @timeout: timeout to wait for the load 71 * 72 * In charge of constructing a sysfs fallback interface for firmware loading. 73 **/ 74 static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs, long timeout) 75 { 76 int retval = 0; 77 struct device *f_dev = &fw_sysfs->dev; 78 struct fw_priv *fw_priv = fw_sysfs->fw_priv; 79 80 /* fall back on userspace loading */ 81 if (!fw_priv->data) 82 fw_priv->is_paged_buf = true; 83 84 dev_set_uevent_suppress(f_dev, true); 85 86 retval = device_add(f_dev); 87 if (retval) { 88 dev_err(f_dev, "%s: device_register failed\n", __func__); 89 goto err_put_dev; 90 } 91 92 mutex_lock(&fw_lock); > 93 if (fw_load_abort || fw_state_is_aborted(fw_priv)) { 94 mutex_unlock(&fw_lock); 95 retval = -EINTR; 96 goto out; 97 } 98 list_add(&fw_priv->pending_list, &pending_fw_head); 99 mutex_unlock(&fw_lock); 100 101 if (fw_priv->opt_flags & FW_OPT_UEVENT) { 102 fw_priv->need_uevent = true; 103 dev_set_uevent_suppress(f_dev, false); 104 dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_name); 105 kobject_uevent(&fw_sysfs->dev.kobj, KOBJ_ADD); 106 } else { 107 timeout = MAX_JIFFY_OFFSET; 108 } 109 110 retval = fw_sysfs_wait_timeout(fw_priv, timeout); 111 if (retval < 0 && retval != -ENOENT) { 112 mutex_lock(&fw_lock); 113 fw_load_abort(fw_sysfs); 114 mutex_unlock(&fw_lock); 115 } 116 117 if (fw_state_is_aborted(fw_priv)) { 118 if (retval == -ERESTARTSYS) 119 retval = -EINTR; 120 } else if (fw_priv->is_paged_buf && !fw_priv->data) 121 retval = -ENOMEM; 122 123 out: 124 device_del(f_dev); 125 err_put_dev: 126 put_device(f_dev); 127 return retval; 128 } 129
Hi Mukesh, kernel test robot noticed the following build errors: [auto build test ERROR on driver-core/driver-core-testing] [also build test ERROR on driver-core/driver-core-next driver-core/driver-core-linus linus/master v6.6-rc4 next-20231004] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Mukesh-Ojha/firmware_loader-Abort-new-fw-load-request-once-firmware-core-knows-about-reboot/20231004-225910 base: driver-core/driver-core-testing patch link: https://lore.kernel.org/r/1696431327-7369-1-git-send-email-quic_mojha%40quicinc.com patch subject: [PATCH v2] firmware_loader: Abort new fw load request once firmware core knows about reboot config: x86_64-rhel-8.3-rust (https://download.01.org/0day-ci/archive/20231005/202310050911.UHh53hem-lkp@intel.com/config) compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231005/202310050911.UHh53hem-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202310050911.UHh53hem-lkp@intel.com/ All errors (new ones prefixed by >>): In file included from drivers/base/firmware_loader/fallback.c:11: In file included from drivers/base/firmware_loader/fallback.h:9: drivers/base/firmware_loader/sysfs.h:87:20: error: redefinition of 'fw_load_abort' as different kind of symbol static inline void fw_load_abort(struct fw_sysfs *fw_sysfs) ^ drivers/base/firmware_loader/firmware.h:89:13: note: previous definition is here extern bool fw_load_abort; ^ >> drivers/base/firmware_loader/fallback.c:113:16: error: called object type 'bool' (aka '_Bool') is not a function or function pointer fw_load_abort(fw_sysfs); ~~~~~~~~~~~~~^ 2 errors generated. -- In file included from drivers/base/firmware_loader/sysfs.c:9: drivers/base/firmware_loader/sysfs.h:87:20: error: redefinition of 'fw_load_abort' as different kind of symbol static inline void fw_load_abort(struct fw_sysfs *fw_sysfs) ^ drivers/base/firmware_loader/firmware.h:89:13: note: previous definition is here extern bool fw_load_abort; ^ >> drivers/base/firmware_loader/sysfs.c:218:16: error: called object type 'bool' (aka '_Bool') is not a function or function pointer fw_load_abort(fw_sysfs); ~~~~~~~~~~~~~^ drivers/base/firmware_loader/sysfs.c:302:16: error: called object type 'bool' (aka '_Bool') is not a function or function pointer fw_load_abort(fw_sysfs); ~~~~~~~~~~~~~^ 3 errors generated. vim +113 drivers/base/firmware_loader/fallback.c d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 66 60fa74263cbeae1 drivers/base/firmware_loader/fallback.c Luis R. Rodriguez 2018-03-10 67 /** c35f9cbb1df8f17 drivers/base/firmware_loader/fallback.c Andres Rodriguez 2018-05-10 68 * fw_load_sysfs_fallback() - load a firmware via the sysfs fallback mechanism b93815d0f37e7c4 drivers/base/firmware_loader/fallback.c Andres Rodriguez 2018-04-25 69 * @fw_sysfs: firmware sysfs information for the firmware to load 60fa74263cbeae1 drivers/base/firmware_loader/fallback.c Luis R. Rodriguez 2018-03-10 70 * @timeout: timeout to wait for the load 60fa74263cbeae1 drivers/base/firmware_loader/fallback.c Luis R. Rodriguez 2018-03-10 71 * 60fa74263cbeae1 drivers/base/firmware_loader/fallback.c Luis R. Rodriguez 2018-03-10 72 * In charge of constructing a sysfs fallback interface for firmware loading. 60fa74263cbeae1 drivers/base/firmware_loader/fallback.c Luis R. Rodriguez 2018-03-10 73 **/ 89287c169f8ff79 drivers/base/firmware_loader/fallback.c Kees Cook 2020-10-02 74 static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs, long timeout) d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 75 { d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 76 int retval = 0; d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 77 struct device *f_dev = &fw_sysfs->dev; d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 78 struct fw_priv *fw_priv = fw_sysfs->fw_priv; d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 79 d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 80 /* fall back on userspace loading */ d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 81 if (!fw_priv->data) d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 82 fw_priv->is_paged_buf = true; d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 83 d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 84 dev_set_uevent_suppress(f_dev, true); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 85 d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 86 retval = device_add(f_dev); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 87 if (retval) { d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 88 dev_err(f_dev, "%s: device_register failed\n", __func__); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 89 goto err_put_dev; d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 90 } d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 91 d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 92 mutex_lock(&fw_lock); b30557dae4a363d drivers/base/firmware_loader/fallback.c Mukesh Ojha 2023-10-04 93 if (fw_load_abort || fw_state_is_aborted(fw_priv)) { 75d95e2e39b27f7 drivers/base/firmware_loader/fallback.c Anirudh Rayabharam 2021-07-28 94 mutex_unlock(&fw_lock); 75d95e2e39b27f7 drivers/base/firmware_loader/fallback.c Anirudh Rayabharam 2021-07-28 95 retval = -EINTR; 75d95e2e39b27f7 drivers/base/firmware_loader/fallback.c Anirudh Rayabharam 2021-07-28 96 goto out; 75d95e2e39b27f7 drivers/base/firmware_loader/fallback.c Anirudh Rayabharam 2021-07-28 97 } d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 98 list_add(&fw_priv->pending_list, &pending_fw_head); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 99 mutex_unlock(&fw_lock); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 100 89287c169f8ff79 drivers/base/firmware_loader/fallback.c Kees Cook 2020-10-02 101 if (fw_priv->opt_flags & FW_OPT_UEVENT) { d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 102 fw_priv->need_uevent = true; d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 103 dev_set_uevent_suppress(f_dev, false); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 104 dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_name); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 105 kobject_uevent(&fw_sysfs->dev.kobj, KOBJ_ADD); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 106 } else { d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 107 timeout = MAX_JIFFY_OFFSET; d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 108 } d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 109 d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 110 retval = fw_sysfs_wait_timeout(fw_priv, timeout); bcfbd3523f3c6ee drivers/base/firmware_loader/fallback.c Junyong Sun 2020-03-03 111 if (retval < 0 && retval != -ENOENT) { d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 112 mutex_lock(&fw_lock); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 @113 fw_load_abort(fw_sysfs); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 114 mutex_unlock(&fw_lock); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 115 } d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 116 d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 117 if (fw_state_is_aborted(fw_priv)) { d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 118 if (retval == -ERESTARTSYS) d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 119 retval = -EINTR; d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 120 } else if (fw_priv->is_paged_buf && !fw_priv->data) d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 121 retval = -ENOMEM; d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 122 75d95e2e39b27f7 drivers/base/firmware_loader/fallback.c Anirudh Rayabharam 2021-07-28 123 out: d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 124 device_del(f_dev); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 125 err_put_dev: d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 126 put_device(f_dev); d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 127 return retval; d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 128 } d73f821c7aea16a drivers/base/firmware_fallback.c Luis R. Rodriguez 2018-03-10 129
Hi Mukesh,
kernel test robot noticed the following build errors:
[auto build test ERROR on driver-core/driver-core-testing]
[also build test ERROR on driver-core/driver-core-next driver-core/driver-core-linus linus/master v6.6-rc4 next-20231004]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Mukesh-Ojha/firmware_loader-Abort-new-fw-load-request-once-firmware-core-knows-about-reboot/20231004-225910
base: driver-core/driver-core-testing
patch link: https://lore.kernel.org/r/1696431327-7369-1-git-send-email-quic_mojha%40quicinc.com
patch subject: [PATCH v2] firmware_loader: Abort new fw load request once firmware core knows about reboot
config: um-allnoconfig (https://download.01.org/0day-ci/archive/20231005/202310051011.PW217wHD-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231005/202310051011.PW217wHD-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202310051011.PW217wHD-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from drivers/base/firmware_loader/main.c:21:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from arch/um/include/asm/hardirq.h:5:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/um/include/asm/io.h:24:
include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
547 | val = __raw_readb(PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
| ^
In file included from drivers/base/firmware_loader/main.c:21:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from arch/um/include/asm/hardirq.h:5:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/um/include/asm/io.h:24:
include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
| ^
In file included from drivers/base/firmware_loader/main.c:21:
In file included from include/linux/interrupt.h:11:
In file included from include/linux/hardirq.h:11:
In file included from arch/um/include/asm/hardirq.h:5:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/um/include/asm/io.h:24:
include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
584 | __raw_writeb(value, PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
692 | readsb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
700 | readsw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
708 | readsl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
717 | writesb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
726 | writesw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
735 | writesl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
In file included from drivers/base/firmware_loader/main.c:45:
In file included from drivers/base/firmware_loader/fallback.h:9:
>> drivers/base/firmware_loader/sysfs.h:87:20: error: redefinition of 'fw_load_abort' as different kind of symbol
87 | static inline void fw_load_abort(struct fw_sysfs *fw_sysfs)
| ^
drivers/base/firmware_loader/firmware.h:89:13: note: previous definition is here
89 | extern bool fw_load_abort;
| ^
12 warnings and 1 error generated.
vim +/fw_load_abort +87 drivers/base/firmware_loader/sysfs.h
e0c11a8b985137 Russ Weight 2022-04-21 86
e0c11a8b985137 Russ Weight 2022-04-21 @87 static inline void fw_load_abort(struct fw_sysfs *fw_sysfs)
e0c11a8b985137 Russ Weight 2022-04-21 88 {
e0c11a8b985137 Russ Weight 2022-04-21 89 struct fw_priv *fw_priv = fw_sysfs->fw_priv;
e0c11a8b985137 Russ Weight 2022-04-21 90
e0c11a8b985137 Russ Weight 2022-04-21 91 __fw_load_abort(fw_priv);
e0c11a8b985137 Russ Weight 2022-04-21 92 }
e0c11a8b985137 Russ Weight 2022-04-21 93
Seems like you just have to fix the 0-day build issues. Luis
On 10/11/2023 4:00 AM, Luis Chamberlain wrote: > > Seems like you just have to fix the 0-day build issues. V3 was posted a day after that. https://lore.kernel.org/lkml/1696482420-1329-1-git-send-email-quic_mojha@quicinc.com/ -Mukesh > > Luis
diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c index bf68e3947814..b9f855d248ac 100644 --- a/drivers/base/firmware_loader/fallback.c +++ b/drivers/base/firmware_loader/fallback.c @@ -57,6 +57,10 @@ void kill_pending_fw_fallback_reqs(bool only_kill_custom) if (!fw_priv->need_uevent || !only_kill_custom) __fw_load_abort(fw_priv); } + + if (!only_kill_custom) + fw_load_abort = true; + mutex_unlock(&fw_lock); } @@ -86,7 +90,7 @@ static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs, long timeout) } mutex_lock(&fw_lock); - if (fw_state_is_aborted(fw_priv)) { + if (fw_load_abort || fw_state_is_aborted(fw_priv)) { mutex_unlock(&fw_lock); retval = -EINTR; goto out; diff --git a/drivers/base/firmware_loader/firmware.h b/drivers/base/firmware_loader/firmware.h index bf549d6500d7..015846e50dff 100644 --- a/drivers/base/firmware_loader/firmware.h +++ b/drivers/base/firmware_loader/firmware.h @@ -86,6 +86,7 @@ struct fw_priv { extern struct mutex fw_lock; extern struct firmware_cache fw_cache; +extern bool fw_load_abort; static inline bool __fw_state_check(struct fw_priv *fw_priv, enum fw_status status) diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index b58c42f1b1ce..467ff1d439af 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -93,6 +93,7 @@ static inline struct fw_priv *to_fw_priv(struct kref *ref) DEFINE_MUTEX(fw_lock); struct firmware_cache fw_cache; +bool fw_load_abort; void fw_state_init(struct fw_priv *fw_priv) {