From patchwork Wed Oct 4 14:55:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mukesh Ojha X-Patchwork-Id: 148337 Return-Path: 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 + 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 ); 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 ; 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 To: , , , CC: , Mukesh Ojha 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 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: 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 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 --- 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(-) 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) {