From nobody Fri Jul 24 05:24:08 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B6BC835200F for ; Thu, 23 Jul 2026 03:52:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784778770; cv=none; b=LgbrwGpX7Klot/WYD4rqJIeVmmNvc4rfofvqOua636+LFYRMPxUhSEW0YmcBVz8kkfIoYqVOqAHluKZNHr/B+si42alN0EmZW8oDD2y+1njfcL3IYsOBoWX5RyRqtJe2Ieq3OxClU9ys0jPmqLMe0M6c4g9fVuZC9yunbGHsAQE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784778770; c=relaxed/simple; bh=pwMxl4llW1/mlAOue/QMpARpxTropptCg8LeYp2N+k8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LH8OzJ3SMI6qAXH9KtpK5cFF5CAaO9BEA5YY6wnrSMFyj+AcA/R2YI+SjTTAsKtqSCNuVJUfQIHA8iOy5Ncgq+/KjzbHGKDZAH0okqMmzZlI/9YrCEARqBpj5Z74N9BtuO+j7bI1fh4GCNCnmZXrVpyU1UZjuxfvAoI5dqXUnz0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=ZoiqDsVc; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Ts0b8nn7; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="ZoiqDsVc"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Ts0b8nn7" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N2lL792435002 for ; Thu, 23 Jul 2026 03:52:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= rgykcy6Hc2CX22fNjmd0CTN8zd4sRXFgA/FqOczh40g=; b=ZoiqDsVcFXLi0Zoy dpanq19udGWYQDayj8NixRjf+Gcie7W64h3BFFC8MKhHNlz6qnYCvmsmcxLBVb9X X9blgO5VBLXf0rBKUpzAr+TUiHjIxReJEAJxRZHTueWE4rLrfejCYKZz1CLPKqey pcqI/H51RiQiggcXrj7rZW84JoP4iRnq/z6xjrHjDFrXQ2O+dXn+4LhCg+O9EpSR oKi3q7TqMB7U5lYl7Nq3v+mPLIg/aXEm+cxJtpT67WThOu1KkoeUU3ToKZEUUP5j 4orMX7w6/yeeFIuMXl4kYxa50y0J+HTiOmNRr0OBv2rDl1OT85aOUqtbOyItcYs6 QQxq1A== Received: from mail-ot1-f72.google.com (mail-ot1-f72.google.com [209.85.210.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fkafw0702-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 23 Jul 2026 03:52:47 +0000 (GMT) Received: by mail-ot1-f72.google.com with SMTP id 46e09a7af769-7e9dc0f5900so28370a34.0 for ; Wed, 22 Jul 2026 20:52:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784778767; x=1785383567; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=rgykcy6Hc2CX22fNjmd0CTN8zd4sRXFgA/FqOczh40g=; b=Ts0b8nn7gj3o0Q31K3Ux8kkCmke5ruYm2KXH3AyU9sBZHKAaXgFXANJByKZ11js9Lm TIDsEEdO6jdXfq58wOqrQQHICv6hb/BlGSZHclY1sByHd/8l94gjCTac2smBUPc55rwf riav+hoQv10lO4VqDD79CdNwRmj/Xu7CUvbxaeg4EiX6eq2WpfctSE/2C131vxb+lsbQ zd+bMb0Q1bNIKOelcp4NUhwEIruT0+PLdzC7Ij9v9UgW3Bd0UH5AnB0wbCxLs+Q95pjc XmILGQ7NFi3CPF2sZuKVVEwocmJPm26kKLspnYn1DZ2g0wn7Kd6Ijwv3T1B7NJhjO/gP 1uIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784778767; x=1785383567; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=rgykcy6Hc2CX22fNjmd0CTN8zd4sRXFgA/FqOczh40g=; b=PIPQHfND9wq27ntOMBEAVNeQOXJVmIl8CHlVcCjabPOU73zJsoODt4UH7LcagAXkB6 dYCCkC57Da7Nv1OhvyjQ7n7idVVdEG9RzTtIFeOmtMt6ADZe0fXE55RsP8JuHcvYOWrr UO5dEZSpYlZGOsRwzOD25zRArvOCzSZVTtMYdNqZ4Ta9fEAcKyM/iAWpguldXX9QSNcc e2BHAXPwVo27hgCi++2oQU++nv4zrL34LkC2sYSn/s1jQr4J8Oxpjld/R2B9A/5cdLTs 6RfEPP8KsyhcNmEyV7D9Z0XhHx1k7VF+Mn9QCjKjNcNeDQep01urCIzMXzOnxSvltEX6 W7yA== X-Forwarded-Encrypted: i=1; AHgh+Rr8syKWOJnuoxuU6f6fFWFE2zsX8biCSksuVRN1FIwOLzkYhikJ7jtw3a1jpAiY5kHVTbEARS1IWU0RdDA=@vger.kernel.org X-Gm-Message-State: AOJu0Yxg1OcbBaHmrBMvQikThcp3D9R569DDMjRbkRXdTr8y0tRBAM1n nkUXUrVDrsSuc0qDVPcBaOiSudS9KlBR5Y7wGqHlObvGcN+ykE5YRWEWmic3+T3V9DzZxZcYgjC xchb2E+50nSImD1GJpkWsiXxuet2RMC3IYfTTC31JcjirCbBQjk0BbtnBEieE4TD12K8= X-Gm-Gg: AR+sD10iTjVqQyd38Khq1Fwbf6g/mN+UphyGgOacUASxgLcuCIEkC03zfd5dysXwhyE pEPlscNZOm0iR4iaDvtr5BiA9P5tTDikQCEnTvG9V/yeslg2dSuW0IoRz2dDMDDfB/L0VKDXyPb 5FxOCsvh1rPcukansNhLsbRjLj9k9h0IUyCbU3yddwtXOUIO/4M0ZlwX4ZzIbfNU/MYyYMiHpZS j4u5KcGGZ7c1VDcsRPUDcOOjNrXRr40CRnTkNDv9Qlzqy8Nqyitp1ADm6Bf6XSmRY7EaVGicEoH /yK4/Ha4EFz/UBrtWwU8puMiefArzD4hJBa0ZFPFubKF5D8BdfEYs5Ke2QR0QZWH30BQNKoq0D4 YpOUKaibXPE/Fmx10JFM= X-Received: by 2002:a05:6820:4d03:b0:69d:7fdb:3416 with SMTP id 006d021491bc7-6aad4f94077mr476832eaf.21.1784778767074; Wed, 22 Jul 2026 20:52:47 -0700 (PDT) X-Received: by 2002:a05:6820:4d03:b0:69d:7fdb:3416 with SMTP id 006d021491bc7-6aad4f94077mr476822eaf.21.1784778766715; Wed, 22 Jul 2026 20:52:46 -0700 (PDT) Received: from [172.17.0.2] ([104.57.184.186]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-45766f238b0sm3302323fac.8.2026.07.22.20.52.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jul 2026 20:52:45 -0700 (PDT) From: Bjorn Andersson Date: Thu, 23 Jul 2026 03:52:27 +0000 Subject: [PATCH 1/3] remoteproc: Allow shutdown of crashed processors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260723-rproc-rmmod-not-crashing-v1-1-546dfd5de0e6@oss.qualcomm.com> References: <20260723-rproc-rmmod-not-crashing-v1-0-546dfd5de0e6@oss.qualcomm.com> In-Reply-To: <20260723-rproc-rmmod-not-crashing-v1-0-546dfd5de0e6@oss.qualcomm.com> To: Bjorn Andersson , Mathieu Poirier , Shengjiu Wang , Fernando Guzman Lugo , Ohad Ben-Cohen Cc: linux-arm-msm@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, Bjorn Andersson X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1810; i=bjorn.andersson@oss.qualcomm.com; h=from:subject:message-id; bh=pwMxl4llW1/mlAOue/QMpARpxTropptCg8LeYp2N+k8=; b=owEBfAKD/ZANAwAKAQsfOT8Nma3FAcsmYgBqYZALuNEvaMqMuJklvHLIFqUCE+M0izJ/lakts +J1nvWj9AuJAkIEAAEKACwWIQQF3gPMXzXqTwlm1SULHzk/DZmtxQUCamGQCw4cYmpvcm5Aa3J5 by5zZQAKCRALHzk/DZmtxZbbD/wKH9vAp3wW6aKPXk4JQuMqXiJD6AREiizeAWE9SVp4cX65TGg XLlQit5LgUuRooVxX+G12KF9GlSf6cZU5ZwdOdq9u8yOGNCzZorurYj5lr77ISxj7z5kq7JQTog sQ0ETFWKSPni8e/3BxH1DyHiODEdt5rtaidKajSeF+lJyyT/ImsbvNjSkFIBGSRcDNqxkxdCRXE +bmAH7mSUL4RgvfwqhbhGVLes8BORpljHzVz2IWaSvh5gVtwXeF7TG+l3QgUhfW2N54xEuglwLm KCnbFL0K8UqyiSTZFSNyr1j2AcDk4eDjtjFIxGdVtVAYNl9cL+MTXwHBs7R/LXv/zJ/es/FsPRJ 5JSlBAGBRXzBPZYHdCkVF8MU1f4G68dwAzrPrEZUOxlUUSYHmXH95EEGFyVVsbMRk9bbOHiMIi5 jMK87hZkTUQ5Bh+3VKm9kWX2bht/qRLq7AflOY1qwL4jZwdqzfnm2bL+MtxAYN4navKpgL2DTFF 02rtXUDPyDyrMfpU/hcMjFCxyWEsKWby26Jbxf2MdbZG+FfB0J3uLj5asWK0X+ogBEgD6g3Bhtc Zq+kfA7xpP9YwnhOc4kSOR6hqL0NeimZDtYPt+VXN36I9FAnXjtcctdL7VWO9K69x5lBqvVePCj KAtPu5y0ntJH+gF/oydRMHTtqeiSoTPMNqA== X-Developer-Key: i=bjorn.andersson@oss.qualcomm.com; a=openpgp; fpr=05DE03CC5F35EA4F0966D5250B1F393F0D99ADC5 X-Authority-Analysis: v=2.4 cv=XNkAjwhE c=1 sm=1 tr=0 ts=6a61900f cx=c_pps a=+3WqYijBVYhDct2f5Fivkw==:117 a=DaeiM5VmU20ml6RIjrOvYw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=BSaFMngucRZOfh4nmS4A:9 a=QEXdDO2ut3YA:10 a=eYe2g0i6gJ5uXG_o6N4q:22 X-Proofpoint-ORIG-GUID: -XhyNbdW9U5URBOMlca2HPVUq1iKuiER X-Proofpoint-GUID: -XhyNbdW9U5URBOMlca2HPVUq1iKuiER X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDAzNSBTYWx0ZWRfX3l7Q0xDKVMXc PPcxp8Lm/BHLXMgBDzzhmXr+YLFUdeMPEuPZkue4hs6d0pyMnpEF9Zq9mWewhHFgy+HIEib6gfy LzuN/uU+RNRZtyn8xQ0pxf1mnJQvvaY= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDAzNSBTYWx0ZWRfXzUhQzl7emr9Z V3ujGHxkKZKrWSQB5Ib9DvKab+b8L+d/PR6zhX2RIY7g0nd1xHL8FHf4b6A2OWq2+TFxAeL/Lgw ucusTjQlp7qoIY3MVmEHx5/0h+KeOIAcfWEAg5IPMGYGu8COLQn6g3ceT0uM3xRVM34Mfx3oonz YlCTg7m/4SpljYbqfCT3npTmUgyNJWVp2h8gqCvDXaUg/BQwzp5Dodlb/qqt2sT50HdmNMjWDIa ihj8tVVyUZG+Phu5bgmm+8MfUNJyPZQXJ8NozjLWZ1IfVFJH976/g1ofo2lGdIOdPRfYjS1nUxB i7ENFFrh3eW5W1EWVwHV2nVftBGIfUOcGRNpEsgid5ovXQu/8pshxvaRIuOBq0ZFfoOzUS3ZU9z 1JlpogZfkrzcgJoJEdw2pubPF119+YNVocoLd/gMNs6vSjhqt538pchYRLgvVnUOHObSnGFzx8L BqZgN1Kr4O2swFt7Qsg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_01,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 suspectscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 phishscore=0 priorityscore=1501 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607230035 rproc_shutdown() rejects a remoteproc in RPROC_CRASHED state, and rproc_del() ignores that error. The result of these two decisions is that a user cannot stop a remoteproc that with recovery disabled that has entered a crash state, and removal of an associated remoteproc driver will release resources without first stopping the remoteproc. Allow rproc_shutdown() to stop crashed processors. Propagate the crash state to subdevice teardown, to allow subdevices to dismantle things appropriately. Assisted-by: OpenCode:GPT-5.5 Fixes: 5e6a0e05270e ("remoteproc: core: Move state checking to remoteproc_c= ore") Signed-off-by: Bjorn Andersson Reviewed-by: Konrad Dybcio Reviewed-by: Mukesh Ojha --- drivers/remoteproc/remoteproc_core.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remo= teproc_core.c index 0583d3a56212..3cd4570513c2 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -2002,6 +2002,7 @@ EXPORT_SYMBOL(rproc_boot); int rproc_shutdown(struct rproc *rproc) { struct device *dev =3D &rproc->dev; + bool crashed; int ret; =20 ret =3D mutex_lock_interruptible(&rproc->lock); @@ -2011,16 +2012,18 @@ int rproc_shutdown(struct rproc *rproc) } =20 if (rproc->state !=3D RPROC_RUNNING && - rproc->state !=3D RPROC_ATTACHED) { + rproc->state !=3D RPROC_ATTACHED && + rproc->state !=3D RPROC_CRASHED) { ret =3D -EINVAL; goto out; } + crashed =3D rproc->state =3D=3D RPROC_CRASHED; =20 /* if the remote proc is still needed, bail out */ if (!atomic_dec_and_test(&rproc->power)) goto out; =20 - ret =3D rproc_stop(rproc, false); + ret =3D rproc_stop(rproc, crashed); if (ret) { atomic_inc(&rproc->power); goto out; --=20 2.53.0 From nobody Fri Jul 24 05:24:08 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8EEA36492A for ; Thu, 23 Jul 2026 03:52:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784778772; cv=none; b=M+nIDhT7pqKRA6S8wVyP7NFSu3J/kE4nqvczRt3BR6ESIeBtQA2tZaxx8d58sNZ+CeFiAmgBovSFk3WaZGYRiuuujT3IoqIq1DhqjVt7t/D01AoG1C64mxUsb8aK4qEltm4JzMrBTCCuEmvZMy37xLieTKj6nwg81srove8Iz6Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784778772; c=relaxed/simple; bh=MB+E++NtDWpIEJ0cfyh4tT6wTk6dSJAMri4GDNAphJQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NP45zjFzpTzLQ+BDl+wuviywVp3CJkVJ0cy0qA2uHZP9yAbs1mWku90xsbD1B85LnMnFk2IvWsrS2msP2ZeFNSgou8nNRb3JMVKyhTL6imAva0Yhhju2b87l0YwuPRIkBLGhu5HMHUzLLZPx1pIuHjAWbewUREtGn7QOinABWmI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=AIFSZbF+; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DhXPPTBu; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="AIFSZbF+"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DhXPPTBu" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N0XSBd2539108 for ; Thu, 23 Jul 2026 03:52:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 1W0bEkbJStAZU4NrrFFq8UC5bkGDDtW+lWeoDnscj6k=; b=AIFSZbF+Twm93V5q ePXn2w+vFKQwhYGB0uxN/a47vVR3ml6EmWfXogsPYRSUR1rfDO71aUEeiN0kFRCo 8nxksziEWnDHEwUjQwvXYMOuHbVbbfTLdiEIxLIUPFCXr7LXYLzK/YeEBvZhwz6u JKwuLRt4/RaKKLzeQ2Z/BARPi1fJAX3j7v/bIW0ELg4duNfdNxi4ZtmlV4qoWw8K DWX4j+E1e/8s3ywaeqfD5+UBnM9rNPyEp+KzBTqP7u+HtDHcp4anTJMkBfHe8wwE WTfwRgC2aY95yrTHnAApvG0T3jqvltU2cKkJTqrdYvcizJ+xZdDe0BBuCAs1epoK AmGUWA== Received: from mail-oa1-f71.google.com (mail-oa1-f71.google.com [209.85.160.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fk5cc18g9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 23 Jul 2026 03:52:49 +0000 (GMT) Received: by mail-oa1-f71.google.com with SMTP id 586e51a60fabf-44aeefa1a30so292508fac.3 for ; Wed, 22 Jul 2026 20:52:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784778769; x=1785383569; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=1W0bEkbJStAZU4NrrFFq8UC5bkGDDtW+lWeoDnscj6k=; b=DhXPPTBudPSTrw5H1k1VmMzvYvshaLhA26jHa3hhPJFX33ofbBBq4RWVXzYAdS1Kfg ttfxGmEClHfbzLJ8KxoYgUwX1fPsT9aloY6ARK54+6pq7ca0pCrU4Hf8XSJ7F9XwSNap dm322qd2l+igbCmLUVPajqx97dMlPUj0loeaBgLz4dGRMAc4H2AuZyWboEAiHWzKcM3x mL8ak1PIvnLQop7lVV9joVn+9DVhh2Lll9egg4vQgMH6fYOyWHDW67/cB1wMlkA9d8EA KXPJ9zV49owKbYq8fkP3F5XxjlP4ilezz20KOd5MVV6ZNv7NLPUGIKBF6IRiR1iKRPRJ gfVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784778769; x=1785383569; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=1W0bEkbJStAZU4NrrFFq8UC5bkGDDtW+lWeoDnscj6k=; b=Ys0eO31BxRX8gQ09aOaplNIT0jy6POWwt8MYQofO/1VGp10hJyrMLPjCIfPgVq4i3T rTPOts0lov4LGqc7pD++xzzOJ8rXSFJUKp3ZbqxB2SgZEq1r/pwrJNaNw2+8c4f71ymQ +d6Af/UXhm/ULwTFGjns6epcvT1ObZOn3WfZCk0JEiDNUTJJYo3kUY0U1sAAJ1CK+Uv2 m6RB8mV6ir4/quwuu1A8laVmY1xNm5DlQPi8gGIn3X+D9b4qQ6q1Enl1n4hOrSnRGgq4 6rdKZv4knhKGHuzmr1hu+r1yRziGyjk32P0y+AmOcfOUk1YojIK8VvWjb2+0tIwdZvVn CFUw== X-Forwarded-Encrypted: i=1; AHgh+Rp3Q0GEdlo+3Lrj8eQqYPfSsW7joIHXSzEuvWGBU22oFII8atTaMrvjv2aQC55I6hMtBz2Z9/9k6PRUNgk=@vger.kernel.org X-Gm-Message-State: AOJu0YwF4mUB69bnY3DSLoQTHDufFAvilgevFKMdWnOVlhfDgZMVZWIs TSjce/FrBGyh85Yi/1YDUtf1ILyOpvWzAbKuuatperfxPpeeb3w7jzBBzqMLP4gLvsUXvYX1ClT BTLz1nBglTwm8rnxwTtyzwyoJEJh868Q6G4N/+AkjjRk8Q3gPxm7KqOEcdq/iR01Gd2I= X-Gm-Gg: AR+sD13vmwJy6cWoe6G2Bkxm/5SBNTYpMjD585e6big8iKlOZ1BW/dw8CxTxVDxCTZg W4WibfpOtjEpz/N1TzZjQyRBxFszso+lAUHs6YE/6tSGA7okvwdnl95JzLlCJ3OL9MeAzqsOjXT FjwpryJ1rcAXejFSoQbQgYN5tRDlb+GMgJQEHCPo4PS0Xmzu61sQhWceyaTr7GzrKqR0DZU2Oyb tQnU0gLVKSwqprCIJtxPr1L86ohMXYdPOol9e+8ckEyYePq84E+YCZa+YyD4jgkuMc0TGlh5Dhr oF75Hva0t9RuvhV+gglm/ad5wTzUwkif+eMWc7Xapx9MA+383Sh6+rV5GikO64ogAizDJXWrZp2 Qbd+bLBUqXnIYWzwHxI8= X-Received: by 2002:a05:6870:e98b:b0:456:a154:6815 with SMTP id 586e51a60fabf-457a11f537cmr645981fac.42.1784778769039; Wed, 22 Jul 2026 20:52:49 -0700 (PDT) X-Received: by 2002:a05:6870:e98b:b0:456:a154:6815 with SMTP id 586e51a60fabf-457a11f537cmr645971fac.42.1784778768610; Wed, 22 Jul 2026 20:52:48 -0700 (PDT) Received: from [172.17.0.2] ([104.57.184.186]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-45766f238b0sm3302323fac.8.2026.07.22.20.52.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jul 2026 20:52:47 -0700 (PDT) From: Bjorn Andersson Date: Thu, 23 Jul 2026 03:52:28 +0000 Subject: [PATCH 2/3] remoteproc: Prevent crash handling to race with rproc_del() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260723-rproc-rmmod-not-crashing-v1-2-546dfd5de0e6@oss.qualcomm.com> References: <20260723-rproc-rmmod-not-crashing-v1-0-546dfd5de0e6@oss.qualcomm.com> In-Reply-To: <20260723-rproc-rmmod-not-crashing-v1-0-546dfd5de0e6@oss.qualcomm.com> To: Bjorn Andersson , Mathieu Poirier , Shengjiu Wang , Fernando Guzman Lugo , Ohad Ben-Cohen Cc: linux-arm-msm@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, Bjorn Andersson X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7175; i=bjorn.andersson@oss.qualcomm.com; h=from:subject:message-id; bh=MB+E++NtDWpIEJ0cfyh4tT6wTk6dSJAMri4GDNAphJQ=; b=owEBfAKD/ZANAwAKAQsfOT8Nma3FAcsmYgBqYZAL9GNcN4KXp9VVHrNzvpawwSgXq+iTXvUw1 zc839cNE+GJAkIEAAEKACwWIQQF3gPMXzXqTwlm1SULHzk/DZmtxQUCamGQCw4cYmpvcm5Aa3J5 by5zZQAKCRALHzk/DZmtxSBUEACAuSIKI2rO2TBbTTi7EYoqw0j+tMvwsduuu/cMYfqPXgthh2d y6BpX39ojWk2IU5ziK/oiHoBivUKWl94j9tvNmshFwb0z4mc+PnK1jo3Hgvw+yZhY9lH1fmvr+F h7C1EbiZhYgfq3LB3RPav268uS1kdODX7wjuVVulaVh0VuOkOIAk3SbzMN1Zv4SuQP0+9/8Utc9 K23Uk3v5Yh3qzvwHIAEXgWz1JY5zXPAdVJ9gpNSuhcxvkjXyKFf2B5Hy//B3tZR3Hb5zGxla8UC h6AqS3r+0oTsjukIcKE1wu6mchPwV+Sln/xcBq2M5fUVHQHUFFU60iBeFGhgSWKBT+aWLoZN8er Gg0LpMwHkSekta2AYb4RI2z3gf7XMYzlwG3QcpNFkkHnBe7MFJ/7nkWGC3odgwWanop/g/+7ycw 3HAHNRlN1ecHCs4J3MVboguRlfOqCbXtuvhj11ikKOprC+04wunBA1+wScxr8cw3ANyVdQ8rm59 maeFaVCALuZ4TF9B2E0H8PsGvaCJCWkGCeEMDiEMgfuyDteVZ2eoqQkIIDqdNSPFIQIZoSmWdPk +2O9635Gv/r3wypEr1Lpu8VW9G8k5F7IPoo9xeQaHtFpo1VjZV/PEa/HA39JCrJP/sad6KmeiEA 2W6RTTEzj30j5gvw5iEXPy/OwHXm5xOd3iw== X-Developer-Key: i=bjorn.andersson@oss.qualcomm.com; a=openpgp; fpr=05DE03CC5F35EA4F0966D5250B1F393F0D99ADC5 X-Proofpoint-ORIG-GUID: cb9-fnbNxnVUIf-liPWQ4p39dttHhJbc X-Proofpoint-GUID: cb9-fnbNxnVUIf-liPWQ4p39dttHhJbc X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDAzNCBTYWx0ZWRfXzkqj4tA2/rNZ bVbBnet4gaEBz81RqT0I9WiSgTGrdM2bojg54279HDsSau4MqApkFlxP+5CcZi/3ba5jg7l/K4l Opn+IVr/oB6FAgvRHANlUAyC6EqsuUI= X-Authority-Analysis: v=2.4 cv=L/ItheT8 c=1 sm=1 tr=0 ts=6a619011 cx=c_pps a=CWtnpBpaoqyeOyNyJ5EW7Q==:117 a=DaeiM5VmU20ml6RIjrOvYw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=13bCvcjworKfepPd0kMA:9 a=QEXdDO2ut3YA:10 a=vh23qwtRXIYOdz9xvnmn:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDAzNCBTYWx0ZWRfX1yLjGZ95Ehg9 FpCra2ypf7Xzl1gB4a96eMcod5lSPt7NFLjgATHVwXW86pQ3chopcMwY2Zm1Fcl4PAF2Hoxy8mr JgNRMGZ5gd55yfcaJTykv3fi3ZiUHjPrLroiq30gwHa7Hz8DMwFWZJackU3brUdO5ikttbuQTu4 zCXyhInC0FQHTcsGd53UX9KlJdNG7oxJnLz7rjufB2DqiODjaX09OpmzM57FHsNvV6mvQBrHpcR rXzhprdiA2FtoHozo5eMQcfjC+HwKfvnbmljiVa6+zwK4ak0x1hbfmixhM69XQmTOaOJZAe59po xsEwERfnL8yBX+H36vpnArpCo/ahkj8i/eYOqVl/g5qICOWQpf/TOc4SGyB33l4CO0NJXZsJYQl SNE/Y44V1GOW+gW8/GcRkdoOqxRagKwXZbPT6rlA1Oyi8SMsvGxWLu7w9VwqqCSELGpGivCxE0v zpzsXwgw6/dFsNIFGkA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_01,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 lowpriorityscore=0 adultscore=0 suspectscore=0 priorityscore=1501 impostorscore=0 spamscore=0 bulkscore=0 malwarescore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607230034 There's no synchronization between rproc_crash_handler_work() and rproc_del(), as such it's possible for a driver to be removed while crash-handler work is scheduled, or even executing - resulting in use-after-free issues. To avoid this the scheduled work need to be cancelled and synchronized against before the removal proceeds. In order to ensure that this doesn't race with the reporting, and thereby scheduling new work, a "deleting" flag is introduced. This is similar to the RPROC_DELETE state that was introduced to ensure that "start" didn't race with rproc_del(), but the existing mechanism can not be used as it's valid to call rproc_report_crash() in atomic context - and the "state" is protected by a mutex. In the event that work is cancelled the pm_stay_awake() is left unbalanced and need to be unrolled. The blocking and cancelling of crash-handler work prior to the actual rproc_shutdown() call does have the explicit side-effect that crashes resulting from the shutdown process will not enter the crash-handling path, and as such will not generate devcoredumps etc. Due to the existing mutual exclusion between these code paths there's no concrete reduction in functionality, but further work would be needed to handle this case. Assisted-by: OpenCode:GPT-5.5 Fixes: 8afd519c3470 ("remoteproc: add rproc_report_crash function to notify= rproc crashes") Signed-off-by: Bjorn Andersson --- drivers/remoteproc/remoteproc_core.c | 42 +++++++++++++++++++++++++++----= ---- drivers/remoteproc/remoteproc_sysfs.c | 1 - include/linux/remoteproc.h | 13 ++++++----- 3 files changed, 41 insertions(+), 15 deletions(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remo= teproc_core.c index 3cd4570513c2..899d2058bc45 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -1851,6 +1851,11 @@ int rproc_trigger_recovery(struct rproc *rproc) if (ret) return ret; =20 + if (READ_ONCE(rproc->deleting)) { + ret =3D -ENODEV; + goto unlock_mutex; + } + /* State could have changed before we got the mutex */ if (rproc->state !=3D RPROC_CRASHED) goto unlock_mutex; @@ -1883,6 +1888,11 @@ static void rproc_crash_handler_work(struct work_str= uct *work) =20 mutex_lock(&rproc->lock); =20 + if (READ_ONCE(rproc->deleting)) { + mutex_unlock(&rproc->lock); + goto out; + } + if (rproc->state =3D=3D RPROC_CRASHED) { /* handle only the first crash detected */ mutex_unlock(&rproc->lock); @@ -1938,9 +1948,9 @@ int rproc_boot(struct rproc *rproc) return ret; } =20 - if (rproc->state =3D=3D RPROC_DELETED) { + if (READ_ONCE(rproc->deleting)) { ret =3D -ENODEV; - dev_err(dev, "can't boot deleted rproc %s\n", rproc->name); + dev_err(dev, "can't boot deleting rproc %s\n", rproc->name); goto unlock_mutex; } =20 @@ -2533,8 +2543,9 @@ struct rproc *rproc_alloc(struct device *dev, const c= har *name, INIT_LIST_HEAD(&rproc->subdevs); INIT_LIST_HEAD(&rproc->dump_segments); =20 - INIT_WORK(&rproc->crash_handler, rproc_crash_handler_work); INIT_WORK(&rproc->attach_work, rproc_attach_work); + INIT_WORK(&rproc->crash_handler, rproc_crash_handler_work); + spin_lock_init(&rproc->crash_handler_lock); =20 rproc->state =3D RPROC_OFFLINE; =20 @@ -2598,16 +2609,21 @@ EXPORT_SYMBOL(rproc_put); */ int rproc_del(struct rproc *rproc) { + unsigned long flags; + if (!rproc) return -EINVAL; =20 + spin_lock_irqsave(&rproc->crash_handler_lock, flags); + WRITE_ONCE(rproc->deleting, true); + spin_unlock_irqrestore(&rproc->crash_handler_lock, flags); + + if (cancel_work_sync(&rproc->crash_handler)) + pm_relax(rproc->dev.parent); + /* TODO: make sure this works with rproc->power > 1 */ rproc_shutdown(rproc); =20 - mutex_lock(&rproc->lock); - rproc->state =3D RPROC_DELETED; - mutex_unlock(&rproc->lock); - rproc_delete_debug_dir(rproc); =20 /* the rproc is downref'ed as soon as it's removed from the klist */ @@ -2719,18 +2735,26 @@ EXPORT_SYMBOL(rproc_get_by_child); */ void rproc_report_crash(struct rproc *rproc, enum rproc_crash_type type) { + unsigned long flags; + if (!rproc) { pr_err("NULL rproc pointer\n"); return; } =20 + spin_lock_irqsave(&rproc->crash_handler_lock, flags); + if (READ_ONCE(rproc->deleting)) { + spin_unlock_irqrestore(&rproc->crash_handler_lock, flags); + return; + } + /* Prevent suspend while the remoteproc is being recovered */ pm_stay_awake(rproc->dev.parent); + queue_work(rproc_recovery_wq, &rproc->crash_handler); + spin_unlock_irqrestore(&rproc->crash_handler_lock, flags); =20 dev_err(&rproc->dev, "crash detected in %s: type %s\n", rproc->name, rproc_crash_to_string(type)); - - queue_work(rproc_recovery_wq, &rproc->crash_handler); } EXPORT_SYMBOL(rproc_report_crash); =20 diff --git a/drivers/remoteproc/remoteproc_sysfs.c b/drivers/remoteproc/rem= oteproc_sysfs.c index 138e752c5e4e..925b0cdbe577 100644 --- a/drivers/remoteproc/remoteproc_sysfs.c +++ b/drivers/remoteproc/remoteproc_sysfs.c @@ -168,7 +168,6 @@ static const char * const rproc_state_string[] =3D { [RPROC_SUSPENDED] =3D "suspended", [RPROC_RUNNING] =3D "running", [RPROC_CRASHED] =3D "crashed", - [RPROC_DELETED] =3D "deleted", [RPROC_ATTACHED] =3D "attached", [RPROC_DETACHED] =3D "detached", [RPROC_LAST] =3D "invalid", diff --git a/include/linux/remoteproc.h b/include/linux/remoteproc.h index 17ed75a11e15..ef711a5b1a7f 100644 --- a/include/linux/remoteproc.h +++ b/include/linux/remoteproc.h @@ -37,6 +37,7 @@ =20 #include #include +#include #include #include #include @@ -145,7 +146,6 @@ struct rproc_ops { * a message. * @RPROC_RUNNING: device is up and running * @RPROC_CRASHED: device has crashed; need to start recovery - * @RPROC_DELETED: device is deleted * @RPROC_ATTACHED: device has been booted by another entity and the core * has attached to it * @RPROC_DETACHED: device has been booted by another entity and waiting @@ -163,10 +163,9 @@ enum rproc_state { RPROC_SUSPENDED =3D 1, RPROC_RUNNING =3D 2, RPROC_CRASHED =3D 3, - RPROC_DELETED =3D 4, - RPROC_ATTACHED =3D 5, - RPROC_DETACHED =3D 6, - RPROC_LAST =3D 7, + RPROC_ATTACHED =3D 4, + RPROC_DETACHED =3D 5, + RPROC_LAST =3D 6, }; =20 /** @@ -261,6 +260,8 @@ enum rproc_features { * @index: index of this rproc device * @attach_work: workqueue for attaching rproc * @crash_handler: workqueue for handling a crash + * @crash_handler_lock: serializes crash handler queueing and deletion + * @deleting: remoteproc deletion has begun * @crash_cnt: crash counter * @recovery_disabled: flag that state if recovery was disabled * @max_notifyid: largest allocated notify id. @@ -305,6 +306,8 @@ struct rproc { int index; struct work_struct attach_work; struct work_struct crash_handler; + spinlock_t crash_handler_lock; + bool deleting; unsigned int crash_cnt; bool recovery_disabled; int max_notifyid; --=20 2.53.0 From nobody Fri Jul 24 05:24:08 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC2BA3655C9 for ; Thu, 23 Jul 2026 03:52:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784778774; cv=none; b=jD4Gu+/w5oj0Pm0p/hXModK+F/rdPRAxTGwskKu6853ZGu4TW0pFosWNqRBEQFb1oyGX+jJBvAp+ROb9WGOXaBzOZLp1115+pio80WxdQhCl64EjdNKAzR5327t1H8mMPa4ExgxjiwIOl4f3D2XXeOUolD1YsenOdFOUO+tOHvE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784778774; c=relaxed/simple; bh=irfiZOifeyWOUCtM47KfCZDnE9mtbMMGQ5BGkiJSl0k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=loOj3GCg6RWgkDuaE+09xnDo/dGkcpRHxStX21BBndFdHYZTr8EyuznQ19ek5Nhqfx7LJ+e4XQqHadkeqhdMsLDJbH9v0OdqoRqIFSFwEo7j7cK/Nze1Qe3RqWOvY/zkufm9mYgBNcoTLqnMPFISqbg7bb8UNRZ4ovCzedC/8ao= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=ddedFOPt; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=XcAXLTdg; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="ddedFOPt"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="XcAXLTdg" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66N0WrqE2537735 for ; Thu, 23 Jul 2026 03:52:51 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= fZYXvJvVw8IEDkhOWbvRCtr0X0gY/RcbUzb6a0neVOo=; b=ddedFOPtcrI4+WjI HA8wZmVVrgA+yvPAPrKT3sX4jWNNHBaWE6qr76vt8ATLnYsj7qF49jgdZIo6aLek FxgI6za86OmMjcJfu1raN082ttDD2/6Z8CANB1ZqvG4Xacjnv4zeYJs2Z9UT3LPI CXS1cUcxuoRII/V826XHG+fTd8ASl33fWHcwdodPr4KUiqWCIO8hPUmF2Ba+C4o3 8zpl2AUy3fdj//y7VkW1sXdE3wHYhfiWyuq8gAHN20ITCCts2cj9Ip89qU1x1uzz 5Dd/kMsh3ftCkS6QCqzkde+SPJgk+m+0i/3WgMqUhvyboS2rHi4/XNlT3Kli0K7n l+ys/w== Received: from mail-oa1-f70.google.com (mail-oa1-f70.google.com [209.85.160.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fk5cc18gd-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 23 Jul 2026 03:52:51 +0000 (GMT) Received: by mail-oa1-f70.google.com with SMTP id 586e51a60fabf-44aeefa1a30so292567fac.3 for ; Wed, 22 Jul 2026 20:52:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784778771; x=1785383571; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=fZYXvJvVw8IEDkhOWbvRCtr0X0gY/RcbUzb6a0neVOo=; b=XcAXLTdgQYeeTi/g+RDC3xqu1U4/ReR/IWn4vE9vHbXbGCjjWl4kmYWGBJt6gmDS/6 nDgOIZJ+AVoEDF3HXdTcas3V28rBjD1Eh4n0nooCKL+dtIzflQPhDeY55VxNm+L5EK/o n/l56KoiXh3sXq/bxt5kSX/++zFID3QywcrjqPFOIYipOCd3nAn9ctYhivh13LZQpIGr +PHIR7kJWDfFbizsHYEIRx2ofsU8Jj3Sx7rFjwrsSJMa8Da/66mk4fka4/XXtPoWtuX7 br/BSqSN1PbAOz2xP5TVsM+Ujq0gDXYorX7i9XR3LN85rSfp7cSuqeBVvZpFts5u+sYU XW/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784778771; x=1785383571; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=fZYXvJvVw8IEDkhOWbvRCtr0X0gY/RcbUzb6a0neVOo=; b=pGU8HLxu/fql5Bdag/F9+ftRFaHEvMXFalJys4j0puMrFbEwqgEpjheBJ6BxqzK6Gz 4h32CmPNV7msBJT5K9vJ+on6jFpgE/UjSC3exzujNyb8t44Jxt5mxePxmIblMro8BKdy qQHlif7qrisOykvA56TfD54fXJnE01/kp7cbKqKQvJ/FlNMSbQAUO5xGqlkSO45niv/R YHWSDzO7e1UxYH7ngdSiTyT1CDtpMH+FSnyW+//AFiBOjnmL6yMAqnlzLkkUCpmBCFU+ iALP/7LUKBBeelsrAd29SQXxLHf+fU36f+lzT9b9gSSw8tX5/gPGookl9g6EqHYqZfkp fg1g== X-Forwarded-Encrypted: i=1; AHgh+Rq/FlI+fXyH/QfodLQsc50P7d2dFviokmC7tbSB41ZNkaTfC7BGh5LL8jBlcoIlExNVFwYTA56n1Qs2jhs=@vger.kernel.org X-Gm-Message-State: AOJu0YyGtrcKZMyBFjPR6aLG4vg/zL2e89IK30+c7O41p+E/Oaf8yoM7 74A4EM9UMGCs5gsqjl4J9vHTPzO7JLKlxCGn/HRoIAe4rAVh6eCZyTCG0wS7LBiuxBm1bVcnYI7 49T9Dq6WXmPXUHIDZdXiinY/CcHBOFtQ3FhPtcZYmLBCcwUGB6GknBvAPAHpdGTvpVLQ= X-Gm-Gg: AR+sD10JO6v5MciHr/AiRPn0Xl3CMvaagwrZj1apU41POeYNJ9ai8AZHGdO526KxieR xFwyHol75PS0hNymKwD1BvtBztdytpWfQGn1uHQj4HxPF0bqNGMcPk/H38/+x2UvhWNsghN6Bmo +dt82fyKvyQPSX5whUGrBVNPXbqs6zwjU8iDN24TAwoUmF/I8XpHqD9szEYj1VNpXAsEc4eB4gS XPXI1AmpVxjdKZq7LPt4+Mcs0GfHUHDoJUnxnGv5K7dDv/6Kz5u2StIdnrhw/S/O33rL6HBVltl XoY4aYAIOs6hq7IoN7yW7jpZ042NYRNnRWw0E0hfNFAJQmlk9wVehYhqESInY7YEMv2m83PGkVy 6kzm5sfwt6csPejpZRd8= X-Received: by 2002:a05:6870:15cc:b0:456:b3d9:336d with SMTP id 586e51a60fabf-457a0fae90dmr706970fac.20.1784778771020; Wed, 22 Jul 2026 20:52:51 -0700 (PDT) X-Received: by 2002:a05:6870:15cc:b0:456:b3d9:336d with SMTP id 586e51a60fabf-457a0fae90dmr706960fac.20.1784778770587; Wed, 22 Jul 2026 20:52:50 -0700 (PDT) Received: from [172.17.0.2] ([104.57.184.186]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-45766f238b0sm3302323fac.8.2026.07.22.20.52.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jul 2026 20:52:49 -0700 (PDT) From: Bjorn Andersson Date: Thu, 23 Jul 2026 03:52:29 +0000 Subject: [PATCH 3/3] remoteproc: Force shutdown during device removal Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260723-rproc-rmmod-not-crashing-v1-3-546dfd5de0e6@oss.qualcomm.com> References: <20260723-rproc-rmmod-not-crashing-v1-0-546dfd5de0e6@oss.qualcomm.com> In-Reply-To: <20260723-rproc-rmmod-not-crashing-v1-0-546dfd5de0e6@oss.qualcomm.com> To: Bjorn Andersson , Mathieu Poirier , Shengjiu Wang , Fernando Guzman Lugo , Ohad Ben-Cohen Cc: linux-arm-msm@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, Bjorn Andersson X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3709; i=bjorn.andersson@oss.qualcomm.com; h=from:subject:message-id; bh=irfiZOifeyWOUCtM47KfCZDnE9mtbMMGQ5BGkiJSl0k=; b=owEBfAKD/ZANAwAKAQsfOT8Nma3FAcsmYgBqYZAL3utqaCRT7hZgpx8cjdZiIYGvBZDP2n5pf ANUun1yUgqJAkIEAAEKACwWIQQF3gPMXzXqTwlm1SULHzk/DZmtxQUCamGQCw4cYmpvcm5Aa3J5 by5zZQAKCRALHzk/DZmtxWMmD/4uqG8e1QtrFyMoj5/qZfCAR+qUMwVseDGbC2//SgZfxBAT6lN Rh6lhckJrOayIQihg2JzH6hlLSAihgzsGCU747cksfY0WwmMyUOGerizoumSTzu/CFUXFV67/OH mrjh/3ExF96cQgjoa8kmSpe+YH3PZGXXv9EhuC8+0HNA0SoJi9wv9I4yyxQ+eRkWY8xU60NwBM4 bewCYNq0HZuDZe2iBuC3DxZ9ujGoPtHqpiu/QVt0/RhFPJLNp44LDw4MjFnZxX/rLkssq6Pnr9+ 42lsUJAuAhiZy5eomPYsX90lhOlNA6hHcYViwyLDo5z4WuKFRiDQJJpQghpX1mhjXiyRAjb/Mfs qej2HMCSKPLIX0IHVH7lOpHTOlGbAQcSSmcpJqkW0xEsfbdJakUUn4514+XbG4JHcEbxQLaG7Fd p86+kFPpcgkWCOuQMIaP5a5TMMqOy5Fu9H6uhfhjazMMazcmd567F1DDNAOz+XiE9HgFHQrtxx9 hkxokycLl6u7Bie4nTylRJhw+AijEATPmBZP7fiPFUWzN+YUWr7sT9L0IKC6Z/EI1QvIWw2iQzM VO3Ngi6EnZdtaDhpDvu/lEsW4YM57nznmIZIJSccKKyxn6GtWgOX1K0zbNyIK09oikvtCa2M4MH sg5pVtHIrVZX5WMmj00oU54AG3U5/LQ/XcA== X-Developer-Key: i=bjorn.andersson@oss.qualcomm.com; a=openpgp; fpr=05DE03CC5F35EA4F0966D5250B1F393F0D99ADC5 X-Proofpoint-ORIG-GUID: dgNPdI5248PZY0X9BhHkADG6ykBqRy_R X-Proofpoint-GUID: dgNPdI5248PZY0X9BhHkADG6ykBqRy_R X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIzMDAzNCBTYWx0ZWRfX60O8Zm80OWJ/ bODW0Vrlr3t9Z8H9G+fcWpWVHyKdttxyrLHE2i3I9HWWpT+Kv+/2Z/YwAKS1ZsqYjk7TEg6SEns vQqYeSfBihoPNtoYOGLBDrVUKsuprA0= X-Authority-Analysis: v=2.4 cv=L/ItheT8 c=1 sm=1 tr=0 ts=6a619013 cx=c_pps a=nSjmGuzVYOmhOUYzIAhsAg==:117 a=DaeiM5VmU20ml6RIjrOvYw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=7YLAdywIGHMpCUzu5wgA:9 a=QEXdDO2ut3YA:10 a=1zu1i0D7hVQfj8NKfPKu:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIzMDAzNCBTYWx0ZWRfX2fl2nUjimOFr PkgBT4FH/Jq4jTSFGue69t98bx07z9DG0/ma9PBV5F+QC1+MYRtGAAGOnkRDQX/WFceAXfGXv90 cKdjnfyA2QBcrjRXTnv5vAtegiOD9MpWFeUMT1shEVMa77zk09mnUHC0iktGnyV2Q9QQXQ4YU8y UaEG4dHTt4vny4C6UVMCuosdWDcPHdjucb8zlcHSCTx1fb+IgB8ZWczO5kRjb3wfGLshCmqaXiU +jDoUqs6f+i2P2Y7Sy2VsOJVTAOOdL5fgSNEX++p5hEeupUfjNC/hwljDpuvQRh8i8Cs8NBYRVY ZIafcMvNkDfmrDsWnuDSCieDMjKf/sJcbYcFVDwoO9a7dT9fNAzAEcNCiZLih44Q8IC6B+stMXw DfnCnIgeLTmJMmiHYSMvaeyN8v22uzA8EbXg1L8dmW3/HYlSFVjD3WWlGQazEF8quu1ceLjbehz y9fTWa5ZM8u0x6Xo8AQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-23_01,2026-07-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 lowpriorityscore=0 adultscore=0 suspectscore=0 priorityscore=1501 impostorscore=0 spamscore=0 bulkscore=0 malwarescore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607230034 rproc_del() is subjected to the reference counted shutdown path, as such a remoteproc with more than one reference will be left running as its resources are released underneath it. Refactor the shutdown path such that the reference count value is ignored when called from rproc_del(). Assisted-by: OpenCode:GPT-5.5 Signed-off-by: Bjorn Andersson Reviewed-by: Konrad Dybcio --- drivers/remoteproc/remoteproc_core.c | 57 ++++++++++++++++++++------------= ---- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remo= teproc_core.c index 899d2058bc45..1ed406714849 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -1988,28 +1988,7 @@ int rproc_boot(struct rproc *rproc) } EXPORT_SYMBOL(rproc_boot); =20 -/** - * rproc_shutdown() - power off the remote processor - * @rproc: the remote processor - * - * Power off a remote processor (previously booted with rproc_boot()). - * - * In case @rproc is still being used by an additional user(s), then - * this function will just decrement the power refcount and exit, - * without really powering off the device. - * - * Every call to rproc_boot() must (eventually) be accompanied by a call - * to rproc_shutdown(). Calling rproc_shutdown() redundantly is a bug. - * - * Notes: - * - we're not decrementing the rproc's refcount, only the power refcount. - * which means that the @rproc handle stays valid even after rproc_shutd= own() - * returns, and users can still use it with a subsequent rproc_boot(), if - * needed. - * - * Return: 0 on success, and an appropriate error value otherwise - */ -int rproc_shutdown(struct rproc *rproc) +static int __rproc_shutdown(struct rproc *rproc, bool force) { struct device *dev =3D &rproc->dev; bool crashed; @@ -2029,9 +2008,10 @@ int rproc_shutdown(struct rproc *rproc) } crashed =3D rproc->state =3D=3D RPROC_CRASHED; =20 - /* if the remote proc is still needed, bail out */ - if (!atomic_dec_and_test(&rproc->power)) + if (!atomic_dec_and_test(&rproc->power) && !force) { + /* The remote processor is still needed by another user. */ goto out; + } =20 ret =3D rproc_stop(rproc, crashed); if (ret) { @@ -2055,6 +2035,32 @@ int rproc_shutdown(struct rproc *rproc) mutex_unlock(&rproc->lock); return ret; } + +/** + * rproc_shutdown() - power off the remote processor + * @rproc: the remote processor + * + * Power off a remote processor (previously booted with rproc_boot()). + * + * In case @rproc is still being used by an additional user(s), then + * this function will just decrement the power refcount and exit, + * without really powering off the device. + * + * Every call to rproc_boot() must (eventually) be accompanied by a call + * to rproc_shutdown(). Calling rproc_shutdown() redundantly is a bug. + * + * Notes: + * - we're not decrementing the rproc's refcount, only the power refcount. + * which means that the @rproc handle stays valid even after rproc_shutd= own() + * returns, and users can still use it with a subsequent rproc_boot(), if + * needed. + * + * Return: 0 on success, and an appropriate error value otherwise + */ +int rproc_shutdown(struct rproc *rproc) +{ + return __rproc_shutdown(rproc, false); +} EXPORT_SYMBOL(rproc_shutdown); =20 /** @@ -2621,8 +2627,7 @@ int rproc_del(struct rproc *rproc) if (cancel_work_sync(&rproc->crash_handler)) pm_relax(rproc->dev.parent); =20 - /* TODO: make sure this works with rproc->power > 1 */ - rproc_shutdown(rproc); + __rproc_shutdown(rproc, true); =20 rproc_delete_debug_dir(rproc); =20 --=20 2.53.0