From nobody Mon Jun 8 19:46:24 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (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 1AD1A3914EB for ; Wed, 27 May 2026 07:26:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779866776; cv=none; b=MakAeBBLcHBa9F5dxQvjvX/G30fXXJkaVMmUmnCGc6+9+mTxS3BH3BRzyOxrQJdAE5tcsy42bc5GdKxbIwc/1+hCuv/24P6jpkWd9ESPQaJ1iAw9JBBSwUXjWalfMwBZAu1JJKzhy1Ra8QbOfDUd2Du92QPESAmhSdmgfPbd/Xc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779866776; c=relaxed/simple; bh=U4aG9GuyqUAL2CqArUC2XR1h+S9cFDA2I1FUCJifLEQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KZX7fZhdRPODyw5lK1Zjyn4GYxgVhCA0pXVyQePhJVWifNGanXjijKnZMtIoRuwp5AHEbKbmLmpA1ZFqKNl7+C4isolANQm8sqBDjH/GHvdLgHxAVQvg0mngr7Ylp0KlBLjWoq6ta9uqyqDuO0OQ7WEIDkCq0PEhrTFZAeG4SuE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=q4zNuRDb; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="q4zNuRDb" Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64QL4c3u3810959; Wed, 27 May 2026 07:26:00 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=BY3j5Q7wTORXDWkZG CK/DHrsyRO2DBSmbFv85zy5Xnk=; b=q4zNuRDbvORcW35lfBK1TBlexxZCgXKu7 ISu3qCiyUOzwZgVYyElzTHB7ANzWmO8GXD5aFpp0SvNhrYxPAyYHcJkWLUbVW1Xu AIggKkC+PD52HihekIwaU30xY96hlSaNsKKzKBQZFD02wBBb/7ytJwcbR0ECJDmn G5g+v2cjaEPtaAKoeOg7w2+OycG8BYnx4FegaebCpvETukMIlt5mb4PuwYexIfUo RztB1AqD73UzjG5IW1X6n0mBRxnsWNu1up3D+VlK1ZExKNhO+AP9sf6J2HtUv52V 2FMclq39e/DvxhqAv3zFU0y+rJ19/YgQ/MXwFlJRDs6qs28e+pzNA== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4eb4qc03gm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 27 May 2026 07:25:59 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 64R7O8fx014805; Wed, 27 May 2026 07:25:58 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4edjrbhwvh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 27 May 2026 07:25:58 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 64R7PsZp13435390 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 27 May 2026 07:25:55 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CC0DB2004F; Wed, 27 May 2026 07:25:54 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8DD6220043; Wed, 27 May 2026 07:25:51 +0000 (GMT) Received: from dhcp-9-123-0-29.bl1-in.ibm.com (unknown [9.123.0.29]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 27 May 2026 07:25:51 +0000 (GMT) From: Narayana Murty N To: mahesh@linux.ibm.com, maddy@linux.ibm.com, mpe@ellerman.id.au, christophe.leroy@csgroup.eu, gregkh@linuxfoundation.org, oohall@gmail.com, npiggin@gmail.com Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, tyreld@linux.ibm.com, vaibhav@linux.ibm.com, sbhat@linux.ibm.com, ganeshgr@linux.ibm.com, sourabhjain@linux.ibm.com, haren@linux.ibm.com, nnmlinux@linux.ibm.com, thuth@redhat.com Subject: [PATCH v2 1/5] powerpc/rtas: Handle special return format for RTAS_FN_IBM_OPEN_ERRINJCT Date: Wed, 27 May 2026 12:54:29 +0530 Message-ID: <20260527072433.94510-2-nnmlinux@linux.ibm.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260527072433.94510-1-nnmlinux@linux.ibm.com> References: <20260527072433.94510-1-nnmlinux@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI3MDA2NyBTYWx0ZWRfX2BI383wXo9xN w5iKNrIk4J+QwQgZ4n0sxBmvL3BUHJKzsM618vd8wOU8XGu9RZwUK9EGJtHd4CuifgYHVfn48WF vcKXVqr1m01D/pE/363BInJF5Eb70rC7dIPUjGsbJdyZYK1vgohOleCr6hvy1+TYDxbqOHxa+Zx X8iKF0WinwudfbYJimsFxEseeNFEaJcoBZ53MHwg5Sm2oiCESTGcEgF0QezAWKAbl2bVs07nBtj wOTOdxFTDDhrIhMC4l8uFOsfA5PbOO0Mi5TAE0Cq9hibCLVki+kjOD1PMtKnYvdSx+HTpehTVjy Cl6O8rqz+sW7z/2Xu1iX/5AFnG0Cp+nw/ASp+RY8SMRXVpgLVekDTBjRlxVbNQ7Xkm4eCZc4KvH kWVxXc9Ck1cXjJN0g3L40krSw+p6LjOlH7hUuG0rV7vVk9qkpeS222q3ytYJi6j0KpF98hUAOfl G7nbHKp9tKBILrLkBSw== X-Authority-Analysis: v=2.4 cv=KItqylFo c=1 sm=1 tr=0 ts=6a169c88 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=1mVJ_uiqAAAA:8 a=VnNF1IyMAAAA:8 a=UamfBOe3sCdmUmwrGAcA:9 a=h67g7WpEjx8dfGT80pje:22 X-Proofpoint-ORIG-GUID: 1Nr7V_qxs0oEA1rhlIiVzEHr17Cb3hzz X-Proofpoint-GUID: wuEcADh9AJ6EP8IA0WQyPYCLMWkG4bey X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-05-26_05,2026-05-26_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 lowpriorityscore=0 spamscore=0 priorityscore=1501 clxscore=1015 adultscore=0 suspectscore=0 bulkscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605270067 Content-Type: text/plain; charset="utf-8" RTAS_FN_IBM_OPEN_ERRINJCT returns results in special format: rets[0] =3D session token (output) rets[1] =3D status code rets[2..] =3D additional outputs (if any) Unlike standard RTAS calls where: rets[0] =3D status code rets[1..] =3D outputs This patch adds special handling for OPEN_ERRINJCT to: 1. Check correct status position (rets[1]) for __fetch_rtas_last_error() 2. Copy all rets[0..nret-1] to outputs[] (including token at rets[0]) 3. Return status from rets[1] instead of rets[0] Reference: OpenPOWER PAPR documentation https://files.openpower.foundation/s/XFgfMaqLMD5Bcm8 Signed-off-by: Narayana Murty N --- arch/powerpc/kernel/rtas.c | 47 ++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 8d81c1e7a8db..a2dd94eed9d0 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -1183,7 +1183,7 @@ int rtas_call(int token, int nargs, int nret, int *ou= tputs, ...) unsigned long flags; struct rtas_args *args; char *buff_copy =3D NULL; - int ret; + int ret =3D 0; =20 if (!rtas.entry || token =3D=3D RTAS_UNKNOWN_SERVICE) return -1; @@ -1213,15 +1213,48 @@ int rtas_call(int token, int nargs, int nret, int *= outputs, ...) va_rtas_call_unlocked(args, token, nargs, nret, list); va_end(list); =20 + /* + * Special handling for RTAS_FN_IBM_OPEN_ERRINJCT: + * Per PAPR, ibm,open-errinjct has a unique return format: + * rets[0] =3D injection session token (output parameter) + * rets[1] =3D status code + * + * This differs from standard RTAS calls which return: + * rets[0] =3D status code + * rets[1..] =3D output parameters + * + * We must extract status from rets[1] (not rets[0]) to correctly + * detect errors and trigger __fetch_rtas_last_error() when status =3D=3D= -1. + */ /* A -1 return code indicates that the last command couldn't - be completed due to a hardware error. */ - if (be32_to_cpu(args->rets[0]) =3D=3D -1) + * be completed due to a hardware error. + */ + if (token =3D=3D rtas_function_token(RTAS_FN_IBM_OPEN_ERRINJCT) && nret >= 1) + ret =3D be32_to_cpu(args->rets[1]); + else if (nret > 0) + ret =3D be32_to_cpu(args->rets[0]); + + if (ret =3D=3D -1) buff_copy =3D __fetch_rtas_last_error(NULL); =20 - if (nret > 1 && outputs !=3D NULL) - for (i =3D 0; i < nret-1; ++i) - outputs[i] =3D be32_to_cpu(args->rets[i + 1]); - ret =3D (nret > 0) ? be32_to_cpu(args->rets[0]) : 0; + /* Copy all return values to caller's outputs buffer if provided */ + if (nret > 1 && outputs !=3D NULL) { + if (token =3D=3D rtas_function_token(RTAS_FN_IBM_OPEN_ERRINJCT)) { + /* Special case: rets[0]=3Dtoken, rets[1]=3Dstatus, rets[2..]=3Doutputs= */ + for (i =3D 0; i < nret; ++i) + outputs[i] =3D be32_to_cpu(args->rets[i]); + } else { + /* Normal case: rets[0]=3Dstatus, rets[1..]=3Doutputs */ + for (i =3D 0; i < nret - 1; ++i) + outputs[i] =3D be32_to_cpu(args->rets[i + 1]); + } + } else { + /* Either no outputs to copy (nret <=3D 1) or caller + * didn't provide output buffer ensure ret contains + * the status code for standard RTAS calls. + */ + ret =3D (nret > 0) ? be32_to_cpu(args->rets[0]) : 0; + } =20 lockdep_unpin_lock(&rtas_lock, cookie); raw_spin_unlock_irqrestore(&rtas_lock, flags); --=20 2.54.0 From nobody Mon Jun 8 19:46:24 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 22E091891A9 for ; Wed, 27 May 2026 07:26:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779866787; cv=none; b=Zazn4pUdkIVA4KX53odcU4YLU6swSwLNXIDS7Jy37LHrbz6s+SzAEgQn0NpAgSCko7yOwQ9MAt5h01GiNjiFSIN0QJ7gzuyjWGe3ha41r/w4aNzywKMoqHOJ5kdOaCNU/HTKWYFlEV8oZOZtB1GWlvRS2zvWRbArJmAWZtQeZj8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779866787; c=relaxed/simple; bh=nUK4oH/U8vnRXxNyG+me1Oln8vGElSgtW2OVefTuyj4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OITDzBd1/ue5nU54wn52NcJf7COlZEc119q2b+J8cWIPNnSQ/kk8+H5eMLZPDkADO9tDK+46aCT5gL1nhxaLi2tjrQH57i5UMu51rkzcXeB0w8js2rVEe3KCFz4LB8A8n0g+RCr6N9U14ukdGVlcIdm4UvNe1I8DOuPg792SRPc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=IdffYN0j; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="IdffYN0j" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64QL4doB272315; Wed, 27 May 2026 07:26:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=7BkrSip0CuyLy13h7 baplQZNYO9chFx3erDj1KT6m3A=; b=IdffYN0jsmmRz7JXQj1rmf5OJaOQVayQJ Ox11GKjGzwQFSQ6xKm7r7ktuAjHzMNAAjjoL0wF0miN+G7WYwLTyRn9xccNGoBz7 On8qDVMFGGBsLVjWq/F9IRLW3Hggegi/EPyCvIq0HjpJtohO8EW3Q+xVDmkwu+lz SnDl5TnejBMzpaKwEItQmdv6iTvhC8jHT/+axrIRDcENh4e1tAyloAexlESVJ1vd Z4qErj17HqF1nSAPkdYTTdyRaeKopXthuheQ5zB2NZPbUNo6sIU+BjzNHyDyrTRv LpeqVMkG7qgUA+H8BtVsTsN7epDWmHyhNzwa2JYUv+lxF/U9T3FDw== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4eb4nq6y86-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 27 May 2026 07:26:05 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 64R7OLKW025759; Wed, 27 May 2026 07:26:04 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4edjrb1wcj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 27 May 2026 07:26:04 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 64R7PxNg45285664 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 27 May 2026 07:25:59 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 615082004B; Wed, 27 May 2026 07:25:58 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2741120043; Wed, 27 May 2026 07:25:55 +0000 (GMT) Received: from dhcp-9-123-0-29.bl1-in.ibm.com (unknown [9.123.0.29]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 27 May 2026 07:25:54 +0000 (GMT) From: Narayana Murty N To: mahesh@linux.ibm.com, maddy@linux.ibm.com, mpe@ellerman.id.au, christophe.leroy@csgroup.eu, gregkh@linuxfoundation.org, oohall@gmail.com, npiggin@gmail.com Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, tyreld@linux.ibm.com, vaibhav@linux.ibm.com, sbhat@linux.ibm.com, ganeshgr@linux.ibm.com, sourabhjain@linux.ibm.com, haren@linux.ibm.com, nnmlinux@linux.ibm.com, thuth@redhat.com Subject: [PATCH v2 2/5] powerpc/pseries: Add RTAS error injection buffer infrastructure Date: Wed, 27 May 2026 12:54:30 +0530 Message-ID: <20260527072433.94510-3-nnmlinux@linux.ibm.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260527072433.94510-1-nnmlinux@linux.ibm.com> References: <20260527072433.94510-1-nnmlinux@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: LR6wZqV4erxc8L5uFk8Nu20X8-9EMCpv X-Proofpoint-ORIG-GUID: j-PAedMJOBLj3FEgbugFWhTTNcbtZv5d X-Authority-Analysis: v=2.4 cv=QIJYgALL c=1 sm=1 tr=0 ts=6a169c8d cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VnNF1IyMAAAA:8 a=wGYcmt_NxZN9edKSF48A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI3MDA2NyBTYWx0ZWRfX8jh1EvCkwoCh Yf6uJmRJvcpUTrC03PZ0DCmdzAOgUWazkHDpFZeZB0gTygOEdrD/3fyqZk1Qvfm0yU87Vo/CPPB fBHR7brKjhfOxlZ6Z5uuT+WYmMoVTrKAhtAZRHWUVyngG2GU1IeWFCdW54KfvEvP0KzJmQoDdle rR6Qq1V5eR0lwICwtrZlGX0I58PpvRHxPg4+8yd/1xB2S3m3UBCIQrY219K9awrtHimEWywLdnw 76YozdSy4IoSabZZTjdOJk8hiOs0bPUYnEAMqzBmnovdcm3By+pWyCBSwgu4k4VdNK+BPGi5MEe tMjgIqLb+oeBLdDDkb20zF8jLPunoM8mmjVETQJpkCodfSi4qcergUDiooV/aN8x/n4P1YRhhVU rQTI03uX0j/zLrhAe8vGfd7eVWIqNYcc0uxxLMNgOWgz0eGxxWSgcqSXL4yegf28Gk2jfrneuF2 xjzifiOKwIwsAxHULMw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-05-26_05,2026-05-26_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 spamscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605270067 Content-Type: text/plain; charset="utf-8" Adds global infrastructure required by the injection engine: - a 1KB aligned RTAS working buffer in rtas.c - a spinlock to serialize buffer access - UAPI definitions for error-injection tokens (added to eeh.h) Signed-off-by: Narayana Murty N --- arch/powerpc/include/asm/rtas.h | 21 +++++++++++++++++++++ arch/powerpc/include/uapi/asm/eeh.h | 18 ++++++++++++++++++ arch/powerpc/kernel/rtas.c | 12 ++++++++++++ 3 files changed, 51 insertions(+) diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rta= s.h index d046bbd5017d..82512f822c7a 100644 --- a/arch/powerpc/include/asm/rtas.h +++ b/arch/powerpc/include/asm/rtas.h @@ -519,6 +519,27 @@ int rtas_get_error_log_max(void); extern spinlock_t rtas_data_buf_lock; extern char rtas_data_buf[RTAS_DATA_BUF_SIZE]; =20 +/* + * RTAS Error Injection Buffer (PAPR-compliant) + * =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + * + * 1KB aligned, zero-initialized buffer for ibm,errinjct RTAS work area. + * Protected by rtas_errinjct_buf_lock for concurrent access safety. + * + * PAPR Requirement: ibm,errinjct requires a caller-allocated buffer passed + * via physical address. Buffer must accommodate largest error type layout= s: + * - IOA bus error (64-bit): 8x32-bit words (32 bytes) + * - All other types: <=3D4x32-bit words (16 bytes) + * + * Usage: + * prepare_errinjct_buffer() -> spin_lock() -> rtas_call() -> spin_unlock() + * + * Alignment: SZ_1K ensures PAPR firmware requirements and cache-line safe= ty. + */ +#define RTAS_ERRINJCT_BUF_SIZE 1024 +extern spinlock_t rtas_errinjct_buf_lock; +extern char rtas_errinjct_buf[RTAS_ERRINJCT_BUF_SIZE]; + /* RMO buffer reserved for user-space RTAS use */ extern unsigned long rtas_rmo_buf; =20 diff --git a/arch/powerpc/include/uapi/asm/eeh.h b/arch/powerpc/include/uap= i/asm/eeh.h index 3b5c47ff3fc4..86645cab2827 100644 --- a/arch/powerpc/include/uapi/asm/eeh.h +++ b/arch/powerpc/include/uapi/asm/eeh.h @@ -41,4 +41,22 @@ #define EEH_ERR_FUNC_DMA_WR_TARGET 19 #define EEH_ERR_FUNC_MAX 19 =20 +/* RTAS PCI Error Injection Token Types */ +#define RTAS_ERR_TYPE_FATAL 0x1 +#define RTAS_ERR_TYPE_RECOVERED_RANDOM_EVENT 0x2 +#define RTAS_ERR_TYPE_RECOVERED_SPECIAL_EVENT 0x3 +#define RTAS_ERR_TYPE_CORRUPTED_PAGE 0x4 +#define RTAS_ERR_TYPE_CORRUPTED_SLB 0x5 +#define RTAS_ERR_TYPE_TRANSLATOR_FAILURE 0x6 +#define RTAS_ERR_TYPE_IOA_BUS_ERROR 0x7 +#define RTAS_ERR_TYPE_PLATFORM_SPECIFIC 0x8 +#define RTAS_ERR_TYPE_CORRUPTED_DCACHE_START 0x9 +#define RTAS_ERR_TYPE_CORRUPTED_DCACHE_END 0xA +#define RTAS_ERR_TYPE_CORRUPTED_ICACHE_START 0xB +#define RTAS_ERR_TYPE_CORRUPTED_ICACHE_END 0xC +#define RTAS_ERR_TYPE_CORRUPTED_TLB_START 0xD +#define RTAS_ERR_TYPE_CORRUPTED_TLB_END 0xE +#define RTAS_ERR_TYPE_IOA_BUS_ERROR_64 0xF +#define RTAS_ERR_TYPE_UPSTREAM_IO_ERROR 0x10 + #endif /* _ASM_POWERPC_EEH_H */ diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index a2dd94eed9d0..c110965ea1d9 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -769,6 +769,18 @@ EXPORT_SYMBOL_GPL(rtas_data_buf); =20 unsigned long rtas_rmo_buf; =20 +/* + * RTAS Error Injection Buffer - Global Definitions + * Global 1KB buffer and spinlock for ibm,errinjct RTAS service. + * Exported for pseries EEH error injection usage. + */ + +DEFINE_SPINLOCK(rtas_errinjct_buf_lock); +EXPORT_SYMBOL_GPL(rtas_errinjct_buf_lock); + +char rtas_errinjct_buf[1024] __aligned(SZ_1K); +EXPORT_SYMBOL_GPL(rtas_errinjct_buf); + /* * If non-NULL, this gets called when the kernel terminates. * This is done like this so rtas_flash can be a module. --=20 2.54.0 From nobody Mon Jun 8 19:46:24 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 4CDB73C4545 for ; Wed, 27 May 2026 07:26:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779866790; cv=none; b=Z9apfY8s2NkuIbAada4I9bGx+rW2uMmwgwuxkvkDaYdnjXbPY7q/iefyzTOckPK+3tGVj3rjTnWvSiIWZNpD7i6MS9F1GXpIc9cycnRpd0eYCn/+P+aR34md0uVU8smYswybvKfTec8mguiTix1nUPL3Nf7NWfeaqrQdrUnJll0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779866790; c=relaxed/simple; bh=h+TlOTg2gJdGHFmXp9CFS3g1MgVu7NTIAP+ksF+PQ+M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qImosVOjUnpBjNPbJGfK2RI6cBg8+aKdZdhgHLz8RYjlxzJso2ORCUv5hINV22vTYFHjlTMvdM+GSePVFmJnqXAz2HpBE5OuwfDimMKtAbxFxe6n5J3VTa0F5q4dlVe6Rki0M57c2Xy1l8MQIPU4IkwWlaoiXdWKQXtMD68V0go= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=sqXU3TYB; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="sqXU3TYB" Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64QL4dob3851066; Wed, 27 May 2026 07:26:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=ujkvUGTlWWJ2pDAyP tqhYCsAD6l8e0/Ta1BDLCGCpFA=; b=sqXU3TYBQmkzWcZDnTTDdNvHqnBm+8EHv 9aK8bo6pVC3Eq5gu77nFziQh1tFwnPEb0Ih0LK7d9Vo17R7k7O06VjmZSZjN2oDS 9nMjCsOAd5cREdcQ2w8PpjIOg2j0QC4fs+uRJz7EDZDqs8QW7i2EAkICE5Ux37uc dUDUl+oaRuYEz3IZt+GDKoNwlBK73qVU3ZIfugKo2Moeq8mmd/7lQDUBssTmLLq0 x7kg/Ef8WM4biqnvxJYDavMat3BfsiEggQZ/TKst3U2eiZNeHCacu6bf2mLSFh+6 oSTIqfTNBku2lrqRTVNRrVxhMTvzR1eH/zV3H+1vwAFb7hClQhhMQ== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4eb4pdf08j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 27 May 2026 07:26:08 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 64R7O9wK026672; Wed, 27 May 2026 07:26:08 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4edjrb1wu9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 27 May 2026 07:26:08 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 64R7Q3aM46006652 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 27 May 2026 07:26:03 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 666D22004F; Wed, 27 May 2026 07:26:02 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B2F7C20043; Wed, 27 May 2026 07:25:58 +0000 (GMT) Received: from dhcp-9-123-0-29.bl1-in.ibm.com (unknown [9.123.0.29]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 27 May 2026 07:25:58 +0000 (GMT) From: Narayana Murty N To: mahesh@linux.ibm.com, maddy@linux.ibm.com, mpe@ellerman.id.au, christophe.leroy@csgroup.eu, gregkh@linuxfoundation.org, oohall@gmail.com, npiggin@gmail.com Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, tyreld@linux.ibm.com, vaibhav@linux.ibm.com, sbhat@linux.ibm.com, ganeshgr@linux.ibm.com, sourabhjain@linux.ibm.com, haren@linux.ibm.com, nnmlinux@linux.ibm.com, thuth@redhat.com Subject: [PATCH v2 3/5] powerpc/pseries: Add RTAS error injection validation helpers Date: Wed, 27 May 2026 12:54:31 +0530 Message-ID: <20260527072433.94510-4-nnmlinux@linux.ibm.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260527072433.94510-1-nnmlinux@linux.ibm.com> References: <20260527072433.94510-1-nnmlinux@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=OdqoyBTY c=1 sm=1 tr=0 ts=6a169c91 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VwQbUJbxAAAA:8 a=QyXUC8HyAAAA:8 a=VnNF1IyMAAAA:8 a=roLE4PQrIjLf_F_GOEgA:9 X-Proofpoint-GUID: 4h9Cck5qa-8muMBBCnj_hLPTzopRlvEo X-Proofpoint-ORIG-GUID: Zawl-2IVjz31bH1Y1Rg9DgmEY0Dq1I7C X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI3MDA2NyBTYWx0ZWRfXycmu2pleQMH6 uF9S//4EpKrF4bqGfmuIJeJjVzktuwSHXtUoPtSRNiFZ4BDDmen5MhRkqgHQT3R019C9FwfyIqJ IrgzDeavacoGlcegGhTU8hLys9cOiuYTGanf4F/+r2MUz6gUYjnT3SIL7gH24wuC8v8DDvzoSW+ Z2+T72mnJ4XJvzGPrXB6ZaNc+n3S0/YQ4+ilefL5TG0EILPtyrLN6VoBb9HwgXkHTX7ng0kCgkY dKVV0B0maRYrJ2DxPmwQY4VH6tBWrmCJmY9YulqHTdhRiv6PbrBEZF6xAdHvwsjcAyp94W/Vl6s ldZC1RZiuxlC4W1BdjW8nAc9V/WxG3jAcdqgPzOt/dPIg8n6EKxQ1Q5O6vEcYuljhL2Lfke6aei UIgNeyiBk6xKncA9acBBQ6dax8i3zxZBTyj+9oy5JCfjvChNKYeXfcgtWpRKKTCEBoWGBUMc5ra ZOumbmUNHnl1sZp0VkA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-05-26_05,2026-05-26_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 clxscore=1015 malwarescore=0 lowpriorityscore=0 bulkscore=0 suspectscore=0 adultscore=0 spamscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605270067 Content-Type: text/plain; charset="utf-8" Add comprehensive validation helpers for RTAS error injection parameters: - validate_addr_mask_in_pe(): BAR range validation - validate_err_type(): Token range check - Type-specific validators (special-event, corrupted-page, ioa-bus-error) Reported-by: kernel test robot Closes: https://lore.kernel.org/oe-kbuild-all/202512101130.EYUo0oZx-lkp@int= el.com/ Signed-off-by: Narayana Murty N --- arch/powerpc/platforms/pseries/eeh_pseries.c | 261 +++++++++++++++++++ 1 file changed, 261 insertions(+) diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/pl= atforms/pseries/eeh_pseries.c index b12ef382fec7..d6f2e0d43b89 100644 --- a/arch/powerpc/platforms/pseries/eeh_pseries.c +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c @@ -33,6 +33,10 @@ #include #include =20 +#ifndef pr_fmt +#define pr_fmt(fmt) "EEH: " fmt +#endif + /* RTAS tokens */ static int ibm_set_eeh_option; static int ibm_set_slot_reset; @@ -786,6 +790,263 @@ static int pseries_notify_resume(struct eeh_dev *edev) } #endif =20 +/** + * validate_addr_mask_in_pe - Validate that an addr+mask fall within PE's = BARs + * @pe: EEH PE containing one or more PCI devices + * @addr: Address to validate + * @mask: Address mask to validate + * + * Checks that @addr is mapped into a BAR/MMIO region of any device belong= ing + * to the PE. If @mask is non-zero, ensures it is consistent with @addr. + * + * Return: 0 if valid, RTAS_INVALID_PARAMETER on failure. + */ + +static int validate_addr_mask_in_pe(struct eeh_pe *pe, unsigned long addr, + unsigned long mask) +{ + struct eeh_dev *edev, *tmp; + struct pci_dev *pdev; + int bar; + resource_size_t bar_start, bar_len; + bool valid =3D false; + + /* nothing to validate */ + if (addr =3D=3D 0 && mask =3D=3D 0) + return 0; + + eeh_pe_for_each_dev(pe, edev, tmp) { + pdev =3D eeh_dev_to_pci_dev(edev); + if (!pdev) + continue; + + for (bar =3D 0; bar < PCI_NUM_RESOURCES; bar++) { + bar_start =3D pci_resource_start(pdev, bar); + bar_len =3D pci_resource_len(pdev, bar); + + if (!bar_len) + continue; + + if (addr >=3D bar_start && addr < (bar_start + bar_len)) { + /* ensure mask makes sense for the addr value */ + if ((addr & mask) !=3D addr) { + pr_err("Mask 0x%lx invalid for addr 0x%lx in BAR[%d] range 0x%llx-0x%= llx\n", + mask, addr, bar, + (unsigned long long)bar_start, + (unsigned long long)(bar_start + bar_len)); + return RTAS_INVALID_PARAMETER; + } + + pr_debug("addr=3D0x%lx with mask=3D0x%lx validated in BAR[%d] of %s\n", + addr, mask, bar, pci_name(pdev)); + valid =3D true; + } + } + } + + if (!valid) { + pr_err("addr=3D0x%lx not valid within any BAR of any device in PE\n", + addr); + return RTAS_INVALID_PARAMETER; + } + + return 0; +} + +/** + * validate_err_type - Basic sanity check for RTAS error type + * @type: RTAS error type + * + * Ensures that the error type is within the valid RTAS error type range. + * + * Return: true if valid, false otherwise. + */ + +static bool validate_err_type(int type) +{ + if (type < RTAS_ERR_TYPE_FATAL || + type > RTAS_ERR_TYPE_UPSTREAM_IO_ERROR) + return false; + + return true; +} + +/** + * validate_special_event - Validate parameters for special-event injection + * @addr: Address parameter (should be zero) + * @mask: Mask parameter (should be zero) + * + * Special-event error injection should not take addr/mask. Rejects if ei= ther + * is set. + * + * Return: 0 if valid, RTAS_INVALID_PARAMETER otherwise. + */ + +static int validate_special_event(unsigned long addr, unsigned long mask) +{ + if (addr || mask) { + pr_err("Special-event should not specify addr/mask\n"); + return RTAS_INVALID_PARAMETER; + } + return 0; +} + +/** + * validate_corrupted_page - Validate parameters for corrupted-page inject= ion + * @pe: EEH PE (__maybe_unused) + * @addr: Physical page address (required) + * @mask: Address mask (ignored if non-zero) + * + * Ensures a valid non-zero page address is provided. Warns if mask is set. + * + * Return: 0 if valid, RTAS_INVALID_PARAMETER otherwise. + */ + +static int validate_corrupted_page(struct eeh_pe *pe __maybe_unused, + unsigned long addr, unsigned long mask) +{ + if (!addr) { + pr_err("corrupted-page requires non-zero addr\n"); + return RTAS_INVALID_PARAMETER; + } + /* Mask not meaningful for corrupted-page */ + if (mask) + pr_warn("corrupted-page ignoring mask=3D0x%lx\n", mask); + + return 0; +} + +/** + * validate_ioa_bus_error - Validate parameters for IOA bus error injection + * @pe: EEH PE whose BARs are validated against + * @addr: Address parameter (optional) + * @mask: Mask parameter (optional) + * + * For IOA bus error injections, @addr and @mask are optional. If present, + * they must map into the PE's MMIO/CFG space. + * + * Return: 0 if valid or addr/mask absent, RTAS_INVALID_PARAMETER otherwis= e. + */ + +static int validate_ioa_bus_error(struct eeh_pe *pe, + unsigned long addr, unsigned long mask) +{ + /* Must map into BAR/MMIO/CFG space of PE */ + return validate_addr_mask_in_pe(pe, addr, mask); +} + + +/** + * prepare_errinjct_buffer - Prepare RTAS error injection work buffer + * @pe: EEH PE for the target device(s) + * @type: RTAS error type + * @func: Error function selector (semantics vary by type) + * @addr: Address argument (type-dependent) + * @mask: Mask argument (type-dependent) + * + * Clears the global error injection work buffer and populates it based on + * the error type and parameters provided. Performs inline validation of t= he + * arguments for each supported error type. + * + * Return: 0 on success, or RTAS_INVALID_PARAMETER / -EINVAL on failure. + */ + +static int prepare_errinjct_buffer(struct eeh_pe *pe, int type, int func, + unsigned long addr, unsigned long mask) +{ + __be64 *buf64; + __be32 *buf32; + + memset(rtas_errinjct_buf, 0, RTAS_ERRINJCT_BUF_SIZE); + buf64 =3D (__be64 *)rtas_errinjct_buf; + buf32 =3D (__be32 *)rtas_errinjct_buf; + + switch (type) { + case RTAS_ERR_TYPE_RECOVERED_SPECIAL_EVENT: + /* func must be 1 =3D non-persistent or 2 =3D persistent */ + if (func < 1 || func > 2) + return RTAS_INVALID_PARAMETER; + + if (validate_special_event(addr, mask)) + return RTAS_INVALID_PARAMETER; + + buf32[0] =3D cpu_to_be32(func); + break; + + case RTAS_ERR_TYPE_CORRUPTED_PAGE: + /* addr required: physical page address */ + if (addr =3D=3D 0) + return RTAS_INVALID_PARAMETER; + + if (validate_corrupted_page(pe, addr, mask)) + return RTAS_INVALID_PARAMETER; + + buf32[0] =3D cpu_to_be32(upper_32_bits(addr)); + buf32[1] =3D cpu_to_be32(lower_32_bits(addr)); + break; + + case RTAS_ERR_TYPE_IOA_BUS_ERROR: + /* 32-bit IOA bus error: addr/mask optional */ + if (func < EEH_ERR_FUNC_LD_MEM_ADDR || func > EEH_ERR_FUNC_MAX) + return RTAS_INVALID_PARAMETER; + + if (addr || mask) { + if (validate_ioa_bus_error(pe, addr, mask)) + return RTAS_INVALID_PARAMETER; + } + + buf32[0] =3D cpu_to_be32((u32)addr); + buf32[1] =3D cpu_to_be32((u32)mask); + buf32[2] =3D cpu_to_be32(pe->addr); + buf32[3] =3D cpu_to_be32(BUID_HI(pe->phb->buid)); + buf32[4] =3D cpu_to_be32(BUID_LO(pe->phb->buid)); + buf32[5] =3D cpu_to_be32(func); + break; + + case RTAS_ERR_TYPE_IOA_BUS_ERROR_64: + /* 64-bit IOA bus error: addr/mask optional */ + if (func < EEH_ERR_FUNC_MIN || func > EEH_ERR_FUNC_MAX) + return RTAS_INVALID_PARAMETER; + + if (addr || mask) { + if (validate_ioa_bus_error(pe, addr, mask)) + return RTAS_INVALID_PARAMETER; + } + + buf64[0] =3D cpu_to_be64(addr); + buf64[1] =3D cpu_to_be64(mask); + buf32[4] =3D cpu_to_be32(pe->addr); + buf32[5] =3D cpu_to_be32(BUID_HI(pe->phb->buid)); + buf32[6] =3D cpu_to_be32(BUID_LO(pe->phb->buid)); + buf32[7] =3D cpu_to_be32(func); + break; + + case RTAS_ERR_TYPE_CORRUPTED_DCACHE_START: + case RTAS_ERR_TYPE_CORRUPTED_DCACHE_END: + case RTAS_ERR_TYPE_CORRUPTED_ICACHE_START: + case RTAS_ERR_TYPE_CORRUPTED_ICACHE_END: + /* addr/mask optional, no strict validation */ + buf32[0] =3D cpu_to_be32(addr); + buf32[1] =3D cpu_to_be32(mask); + break; + + case RTAS_ERR_TYPE_CORRUPTED_TLB_START: + case RTAS_ERR_TYPE_CORRUPTED_TLB_END: + /* only addr field relevant */ + buf32[0] =3D cpu_to_be32(addr); + break; + + default: + pr_err("Unsupported error type 0x%x\n", type); + return -EINVAL; + } + + pr_debug("RTAS: errinjct buffer prepared: type=3D%d func=3D%d addr=3D0x%l= x mask=3D0x%lx\n", + type, func, addr, mask); + + return 0; +} + /** * pseries_eeh_err_inject - Inject specified error to the indicated PE * @pe: the indicated PE --=20 2.54.0 From nobody Mon Jun 8 19:46:24 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (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 503151990C7 for ; Wed, 27 May 2026 07:26:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779866787; cv=none; b=bS37BFFaL6BM1Q1+r9vnjohy64DlWUTgyangyJ1mLLSyrEBgX1DzbApSyxNekOYgKiL3UsBEh9837BLJVqE9wqBk+rRCPaI2QgR5bSCbjqeYxTV4okKWMD/9b6ciuzkOm/cUpuvTSmPI9zEfehpYa4q12VFjvD6hQXgUpfbGCPA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779866787; c=relaxed/simple; bh=YWnkEp5gLf+VpCByLl6KBbJHlzy964gEaYqbFW5nc6Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bLWLk6508rw4SSOnPOwZTK+j8NCF0T218KegxJWo3bMS5VoOvKXoW6bufW1pJfZ2YbiWj+NBgF43kRATm66wHQj8Uy8JlL6dUJexurvMvob93/OCVwoVFSv9Dx136clDvaR44Et444BoMATyMdUOypPudwONz7i1CsSp3UXPx3w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=JXIwFmmW; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="JXIwFmmW" Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64QL4v3S3811228; Wed, 27 May 2026 07:26:12 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=YARufalEVjRqn6s9L oc6JrLF5lN0Q95LYFgAFB9iPVc=; b=JXIwFmmWkPzO0Y5BJsrGVt+O3Pw32Qfqw MwdZCLkI+KAmqGJo3kdxUMX1d12rqJhap9dw7SEFtEkBPvfGgyc1gXEqL6DscXa2 vG3gxujsw2GhxCZMvjaHO+b5d8J1NNvjg9FkFOkMbC8zJ5BN0cLg0qjRCW5rztzc pFezcC4f9DsuWQsnd+ZrCMl4R14aHE6Jds4Ya+Y8ZG9IgpZm9ggGi0+P4Keoh1I0 h684xNAAiwoOXXjEWcQflaBd3lEeoIxBtI1QR0h/fhldjlCEDlPRf4yzabiiNmr0 vqLyOKSYEos/ApErXWlArYyOLXhf/12IJksh4sqZvwrsw+Zxdod7Q== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4eb4qc03h6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 27 May 2026 07:26:11 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 64R7O4wd025645; Wed, 27 May 2026 07:26:10 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4edjrb1wd1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 27 May 2026 07:26:10 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 64R7Q6q253477740 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 27 May 2026 07:26:06 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F34CD20043; Wed, 27 May 2026 07:26:05 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B80D12005A; Wed, 27 May 2026 07:26:02 +0000 (GMT) Received: from dhcp-9-123-0-29.bl1-in.ibm.com (unknown [9.123.0.29]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 27 May 2026 07:26:02 +0000 (GMT) From: Narayana Murty N To: mahesh@linux.ibm.com, maddy@linux.ibm.com, mpe@ellerman.id.au, christophe.leroy@csgroup.eu, gregkh@linuxfoundation.org, oohall@gmail.com, npiggin@gmail.com Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, tyreld@linux.ibm.com, vaibhav@linux.ibm.com, sbhat@linux.ibm.com, ganeshgr@linux.ibm.com, sourabhjain@linux.ibm.com, haren@linux.ibm.com, nnmlinux@linux.ibm.com, thuth@redhat.com Subject: [PATCH v2 4/5] powerpc/pseries: Implement RTAS error injection via pseries_eeh_err_inject Date: Wed, 27 May 2026 12:54:32 +0530 Message-ID: <20260527072433.94510-5-nnmlinux@linux.ibm.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260527072433.94510-1-nnmlinux@linux.ibm.com> References: <20260527072433.94510-1-nnmlinux@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI3MDA2NyBTYWx0ZWRfX99B63D8VrcSM 41ewJ/8vADhTkmhF7CdHzZt+vH/MLYAYo/pqj+KYBYEWwYVRFxiEucTQjUFDixBnTVu7ddsrHLj vC2RJ4YMMZUlLZJS1HsGjIGsJpyKFwhlHt5wJt4zxaLqMtcn5CIBzDKscrTqhOGtwWuetmcISyv 1GCElGnGF039wG4/4tbICZ+BKFKpyMevuDdQcbEwEGWx+fmQa6aDbCANdxqQLRbZ88do/E0wdnp n2NcHYJ/YLfbHdnjyfjzV4ai9kyXXeyp4jr9QTPbw9m1HI53uky06DN4Y19vsriU7d9YBp4kv/k fSAxgsJzUp8FwnTb2YDgKZSWqPeN8THIE5C5xV+0yAc+HEduEu6aEZtJkNgIAz9AwVZGxQwUMJO ao6KCIxRbTgPp72wHgNWfur3niUIE4oDs+uFFDTU+sNp/3Qa61cFlNigwU8AwVW47DNy2hoT3O+ wwvntNv4NnaCRJg0tyg== X-Authority-Analysis: v=2.4 cv=KItqylFo c=1 sm=1 tr=0 ts=6a169c94 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=yQ1QsqZ-4r5l6USac14A:9 X-Proofpoint-ORIG-GUID: l11vvsLfcwY0IMzOxzIrWrBHcOdAnT3I X-Proofpoint-GUID: p4AncKl3wjMM99Y6Hcg9-ArBvr0HQji8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-05-26_05,2026-05-26_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 lowpriorityscore=0 spamscore=0 priorityscore=1501 clxscore=1015 adultscore=0 suspectscore=0 bulkscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605270067 Content-Type: text/plain; charset="utf-8" Replace legacy MMIO error injection with full PAPR-compliant RTAS error injection supporting 14+ error types via - ibm,open-errinjct - ibm,errinjct - ibm,close-errinjct. Key features: - Complete open-session-inject-close cycle management - Special handling for ibm,open-errinjct output format (token,status) - Comprehensive buffer preparation per PAPR layouts - All pr_* logging uses pr_fmt("EEH: ") prefix Tested with corresponding QEMU patches: https://lore.kernel.org/all/20251029150618.186803-1-nnmlinux@linux.ibm.com/ Signed-off-by: Narayana Murty N --- arch/powerpc/platforms/pseries/eeh_pseries.c | 168 ++++++++++++++++--- 1 file changed, 147 insertions(+), 21 deletions(-) diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/pl= atforms/pseries/eeh_pseries.c index d6f2e0d43b89..6af2a153ec25 100644 --- a/arch/powerpc/platforms/pseries/eeh_pseries.c +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c @@ -902,8 +902,7 @@ static int validate_special_event(unsigned long addr, u= nsigned long mask) * Return: 0 if valid, RTAS_INVALID_PARAMETER otherwise. */ =20 -static int validate_corrupted_page(struct eeh_pe *pe __maybe_unused, - unsigned long addr, unsigned long mask) +static int validate_corrupted_page(unsigned long addr, unsigned long mask) { if (!addr) { pr_err("corrupted-page requires non-zero addr\n"); @@ -978,7 +977,7 @@ static int prepare_errinjct_buffer(struct eeh_pe *pe, i= nt type, int func, if (addr =3D=3D 0) return RTAS_INVALID_PARAMETER; =20 - if (validate_corrupted_page(pe, addr, mask)) + if (validate_corrupted_page(addr, mask)) return RTAS_INVALID_PARAMETER; =20 buf32[0] =3D cpu_to_be32(upper_32_bits(addr)); @@ -1047,6 +1046,97 @@ static int prepare_errinjct_buffer(struct eeh_pe *pe= , int type, int func, return 0; } =20 +/** + * rtas_open_errinjct_session - Open an RTAS error injection session + * + * Opens a session with the RTAS ibm,open-errinjct service. + * + * Return: Positive session token on success, negative error code on failu= re. + */ +static int rtas_open_errinjct_session(void) +{ + int open_token, args[2] =3D {0}; + int rc, status, session_token =3D -1; + + open_token =3D rtas_function_token(RTAS_FN_IBM_OPEN_ERRINJCT); + if (open_token =3D=3D RTAS_UNKNOWN_SERVICE) { + pr_err("RTAS: ibm,open-errinjct not available\n"); + return RTAS_UNKNOWN_SERVICE; + } + + /* Call open; original code treated rtas_call return as session token */ + rc =3D rtas_call(open_token, 0, 2, args); + status =3D args[1]; + if (status !=3D 0) { + pr_err("RTAS: open-errinjct failed: status=3D%d args[1]=3D%d rc=3D%d\n", + status, args[1], rc); + return status ? status : -EIO; + } + + session_token =3D args[0]; + pr_info("Opened injection session: token=3D%d\n", session_token); + return session_token; +} + +/** + * rtas_close_errinjct_session - Close an RTAS error injection session + * @session_token: Session token returned from open + * + * Attempts to close a previously opened error injection session. Best-eff= ort; + * logs warnings if close fails or if service is unavailable. + */ + +static void rtas_close_errinjct_session(int session_token) +{ + int close_token, args[2] =3D {0}; + + if (session_token <=3D 0) + return; + + close_token =3D rtas_function_token(RTAS_FN_IBM_CLOSE_ERRINJCT); + if (close_token =3D=3D RTAS_UNKNOWN_SERVICE) { + pr_warn("close-errinjct not available\n"); + return; + } + + args[0] =3D session_token; + rtas_call(close_token, 1, 1, args); + if (args[0]) + pr_warn("close-errinjct args[0]=3D%d\n", args[0]); +} + +/** + * do_errinjct_call - Invoke the RTAS error injection service + * @errinjct_token: RTAS token for ibm,errinjct + * @type: RTAS error type + * @session_token: RTAS error injection session token + * + * Issues the RTAS ibm,errinjct call with the prepared work buffer. Logs e= rrors + * on failure. + * + * Return: 0 on success, negative error code otherwise. + */ + +static int do_errinjct_call(int errinjct_token, int type, int session_toke= n) +{ + int rc, status; + + if (errinjct_token =3D=3D RTAS_UNKNOWN_SERVICE) + return -ENODEV; + + /* errinjct takes: type, session_token, workbuf pointer (3 in), returns s= tatus */ + rc =3D rtas_call(errinjct_token, 3, 1, &status, type, session_token, + rtas_errinjct_buf); + + if (rc || status !=3D 0) { + pr_err("RTAS: errinjct failed: rc=3D%d, status=3D%d\n", rc, status); + return status ? status : -EIO; + } + + pr_info("RTAS: errinjct ok: rc=3D%d, status=3D%d\n", rc, status); + return 0; +} + /** * pseries_eeh_err_inject - Inject specified error to the indicated PE * @pe: the indicated PE @@ -1060,30 +1150,66 @@ static int prepare_errinjct_buffer(struct eeh_pe *p= e, int type, int func, static int pseries_eeh_err_inject(struct eeh_pe *pe, int type, int func, unsigned long addr, unsigned long mask) { - struct eeh_dev *pdev; + int rc =3D 0; + int session_token =3D -1; + int errinjct_token; =20 - /* Check on PCI error type */ - if (type !=3D EEH_ERR_TYPE_32 && type !=3D EEH_ERR_TYPE_64) - return -EINVAL; + /* Validate type */ + if (!validate_err_type(type)) { + pr_err("RTAS: invalid error type 0x%x\n", type); + return RTAS_INVALID_PARAMETER; + } + pr_debug("RTAS: error type 0x%x\n", type); =20 - switch (func) { - case EEH_ERR_FUNC_LD_MEM_ADDR: - case EEH_ERR_FUNC_LD_MEM_DATA: - case EEH_ERR_FUNC_ST_MEM_ADDR: - case EEH_ERR_FUNC_ST_MEM_DATA: - /* injects a MMIO error for all pdev's belonging to PE */ - pci_lock_rescan_remove(); - list_for_each_entry(pdev, &pe->edevs, entry) - eeh_pe_inject_mmio_error(pdev->pdev); - pci_unlock_rescan_remove(); - break; - default: - return -ERANGE; + /* For IOA bus errors we must validate err_func and addr/mask in PE. + * For other types: if addr/mask present we'll still validate BAR range; + * otherwise skip function checks. + */ + if (type =3D=3D RTAS_ERR_TYPE_IOA_BUS_ERROR || + type =3D=3D RTAS_ERR_TYPE_IOA_BUS_ERROR_64) { + /* Validate that addr/mask fall in the PE's BAR ranges */ + rc =3D validate_addr_mask_in_pe(pe, addr, mask); + if (rc) + return rc; + } else if (addr || mask) { + /* If caller provided addr/mask for a non-IOA type, do a BAR check too */ + rc =3D validate_addr_mask_in_pe(pe, addr, mask); + if (rc) + return rc; } =20 - return 0; + /* Open RTAS session */ + session_token =3D rtas_open_errinjct_session(); + if (session_token < 0) + return session_token; + + /* get errinjct token */ + errinjct_token =3D rtas_function_token(RTAS_FN_IBM_ERRINJCT); + if (errinjct_token =3D=3D RTAS_UNKNOWN_SERVICE) { + pr_err("RTAS: ibm,errinjct not available\n"); + rc =3D -ENODEV; + goto out_close; + } + + /* prepare shared buffer while holding lock */ + spin_lock(&rtas_errinjct_buf_lock); + rc =3D prepare_errinjct_buffer(pe, type, func, addr, mask); + if (rc) { + spin_unlock(&rtas_errinjct_buf_lock); + goto out_close; + } + + /* perform the errinjct RTAS call */ + rc =3D do_errinjct_call(errinjct_token, type, session_token); + spin_unlock(&rtas_errinjct_buf_lock); + +out_close: + /* always attempt close if we opened a session */ + rtas_close_errinjct_session(session_token); + return rc; } =20 + static struct eeh_ops pseries_eeh_ops =3D { .name =3D "pseries", .probe =3D pseries_eeh_probe, --=20 2.54.0 From nobody Mon Jun 8 19:46:24 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 AF2AD3BE623 for ; Wed, 27 May 2026 07:26:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779866789; cv=none; b=BH0v3dzwlUZ4eSQf2H066LTZGqsTPHTaGx3CadK7cu+pTU6Thnl/QWHyMPejTi9QfVhjnrcsaWB3oK0t5UoQkHxv/3GJtMoLNsvuffw/KvM/fWX/McGbcn540IrIlQpCh4g0TpoSoTv11r7XlQp7/3CxkgAeXRG6xjUWJki9Ja0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779866789; c=relaxed/simple; bh=f15NwH3nPpwirHU0aDyJC2LY1CPiEzDmep38upI/UvY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FfqMdt6kTjVZwDItJC0ysm6l+k4HXsASXN/XQGVUEgQAmSS+godKz9xmY4CVbHrNk+zXOPJHBFJVSFJKr3xFMT2aH48SkhoguAkHXQ/uKlfjhKHBbYgpjxSWGL4ItvggEHvEZQNjFqMy3psLz0P64CtW7Ns9zExAan0GaEPSoF8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=n28H1suN; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="n28H1suN" Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64QL4vkq3851596; Wed, 27 May 2026 07:26:14 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=sMy/yg2bgPTpqRxfx UL65wrvYdAvGYyUjEGjNoudFL4=; b=n28H1suN5QwAjQC7ns/3egmpSDqrpA/+b 6SiMpzLxg+m2Io0MwAiyvzmke88EpcuK/+Ekypro8ZgzHSb2fwmP37yKOTAdbqM1 6eHtw//UJsWY3zhbRfikYwXEH3riuPhjhc1L6bhZtA+4yQfsioCibrwfJnlu5nXU MduxpJrHqjylRbF+UNJAe74Qnh2CpxVeY7drsqK95SRLOYqmiew3vi+ECctpdfZ5 O9shQ6ZED6oiTFQpeUDRt9Fw7mtuZkBk+4XAdGF6t2J9wJEInI4IF7dNh+Fmb+v4 hSVe8m9QZk7Fi1fRzU3qGWwxj1HMNaFgYhf9L9e/gyeYWp2yqlNNQ== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4eb4pdf08y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 27 May 2026 07:26:14 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 64R7O8g1014805; Wed, 27 May 2026 07:26:13 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4edjrbhww8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 27 May 2026 07:26:13 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 64R7Q9Un27001322 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 27 May 2026 07:26:09 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9837C20043; Wed, 27 May 2026 07:26:09 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 508B22004B; Wed, 27 May 2026 07:26:06 +0000 (GMT) Received: from dhcp-9-123-0-29.bl1-in.ibm.com (unknown [9.123.0.29]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 27 May 2026 07:26:06 +0000 (GMT) From: Narayana Murty N To: mahesh@linux.ibm.com, maddy@linux.ibm.com, mpe@ellerman.id.au, christophe.leroy@csgroup.eu, gregkh@linuxfoundation.org, oohall@gmail.com, npiggin@gmail.com Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, tyreld@linux.ibm.com, vaibhav@linux.ibm.com, sbhat@linux.ibm.com, ganeshgr@linux.ibm.com, sourabhjain@linux.ibm.com, haren@linux.ibm.com, nnmlinux@linux.ibm.com, thuth@redhat.com Subject: [PATCH v2 5/5] powerpc/powernv: Map EEH error types to OPAL error injection types Date: Wed, 27 May 2026 12:54:33 +0530 Message-ID: <20260527072433.94510-6-nnmlinux@linux.ibm.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260527072433.94510-1-nnmlinux@linux.ibm.com> References: <20260527072433.94510-1-nnmlinux@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Authority-Analysis: v=2.4 cv=OdqoyBTY c=1 sm=1 tr=0 ts=6a169c96 cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=aHHZtgvgEZ6nWDfOVG8A:9 X-Proofpoint-GUID: 2FjB6-LlE4KAwhul2vBTOsThNsA15i7F X-Proofpoint-ORIG-GUID: NWsKInkaMVpbUGQZ38N5cMPi0i1BDwfn X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI3MDA2NyBTYWx0ZWRfX955XKsFCGX7a U/sJSPB7oGX9QZFd/c95IH8+Yd6ovpzEy6cqrrZUnxnUIIqTDMf34/bRCaS6mfLNoKB8PDAmU9F m6qVmstlFuXciVwO+NVTq2poN4D/lfWghdbwcSl5JEDtQ+Ltzg9/lo6mMd2LbCkF5lutXLZn1PW ZPX0UnB918oqFCZX2jt9az8ihV5edjwOjN5uCvMsQ8c4DLSDFWtyftQmNpuXXWH4a0q2RJTeVIO khHjr6+ej42drSZj86mosirScm70mZh9ciEpqT7furzLXUaKZgboMRJ81pv/gmA6f5Cx57w0p8s ujWW+6FJlyzmCB3EmK8BMNBkGm5eOY8cwnh0PNLPx5uC8FkKAcMY+FjmRk2xtw8tRPWZmY5mJQP UOFkfljymf19PJqQDNdwLJevqzBkVpWvBYZ2A+Y7JWrOTK5YMBZKgbRL50P3eg3iZlvvI3S0H6M x4YLYyAVyvr4WOs/mCw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-05-26_05,2026-05-26_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 clxscore=1015 malwarescore=0 lowpriorityscore=0 bulkscore=0 suspectscore=0 adultscore=0 spamscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605270067 Content-Type: text/plain; charset="utf-8" Add a mapping layer in pnv_eeh_err_inject() to translate generic EEH error types to OPAL-specific error injection types. This decouples the VFIO error injection interface from OPAL implementation details. Map EEH_ERR_TYPE_32 to OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR and EEH_ERR_TYPE_64 to OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR64. Return -EINVAL for unsupported error types. This provides better abstraction between the generic EEH layer and platform-specific implementation. Signed-off-by: Narayana Murty N --- arch/powerpc/include/uapi/asm/eeh.h | 20 ++++++++++++++++++-- arch/powerpc/platforms/powernv/eeh-powernv.c | 11 +++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/arch/powerpc/include/uapi/asm/eeh.h b/arch/powerpc/include/uap= i/asm/eeh.h index 86645cab2827..d88d82796905 100644 --- a/arch/powerpc/include/uapi/asm/eeh.h +++ b/arch/powerpc/include/uapi/asm/eeh.h @@ -16,8 +16,24 @@ #define EEH_PE_STATE_UNAVAIL 5 /* Unavailable */ =20 /* EEH error types and functions */ -#define EEH_ERR_TYPE_32 0 /* 32-bits error */ -#define EEH_ERR_TYPE_64 1 /* 64-bits error */ +#define EEH_ERR_TYPE_FATAL 0x1 /* Fatal error */ +#define EEH_ERR_TYPE_RECOVERED_RANDOM 0x2 /* Recovered random even= t */ +#define EEH_ERR_TYPE_RECOVERED_SPECIAL 0x3 /* Recovered special eve= nt */ +#define EEH_ERR_TYPE_CORRUPTED_PAGE 0x4 /* Corrupted page */ +#define EEH_ERR_TYPE_CORRUPTED_SLB 0x5 /* Corrupted SLB */ +#define EEH_ERR_TYPE_TRANSLATOR_FAILURE 0x6 /* Translator failure */ +#define EEH_ERR_TYPE_32 0x7 /* 32-bit IOA bus error = */ +#define EEH_ERR_TYPE_PLATFORM_SPECIFIC 0x8 /* Platform specific */ +#define EEH_ERR_TYPE_CORRUPTED_DCACHE_START 0x9 /* Corrupted D-cache sta= rt */ +#define EEH_ERR_TYPE_CORRUPTED_DCACHE_END 0xA /* Corrupted D-cache end= */ +#define EEH_ERR_TYPE_CORRUPTED_ICACHE_START 0xB /* Corrupted I-cache sta= rt */ +#define EEH_ERR_TYPE_CORRUPTED_ICACHE_END 0xC /* Corrupted I-cache end= */ +#define EEH_ERR_TYPE_CORRUPTED_TLB_START 0xD /* Corrupted TLB start */ +#define EEH_ERR_TYPE_CORRUPTED_TLB_END 0xE /* Corrupted TLB end */ +#define EEH_ERR_TYPE_64 0xF /* 64-bit IOA bus error = */ +#define EEH_ERR_TYPE_UPSTREAM_IO_ERROR 0x10 /* Upstream IO error */ + +/* EEH supported function types */ #define EEH_ERR_FUNC_MIN 0 #define EEH_ERR_FUNC_LD_MEM_ADDR 0 /* Memory load */ #define EEH_ERR_FUNC_LD_MEM_DATA 1 diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/pl= atforms/powernv/eeh-powernv.c index db3370d1673c..ee156d397e93 100644 --- a/arch/powerpc/platforms/powernv/eeh-powernv.c +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c @@ -1169,8 +1169,15 @@ static int pnv_eeh_err_inject(struct eeh_pe *pe, int= type, int func, struct pnv_phb *phb =3D hose->private_data; s64 rc; =20 - if (type !=3D OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR && - type !=3D OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR64) { + /* Map generic EEH Type to OPAL Type */ + switch (type) { + case EEH_ERR_TYPE_32: + type =3D OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR; + break; + case EEH_ERR_TYPE_64: + type =3D OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR64; + break; + default: pr_warn("%s: Invalid error type %d\n", __func__, type); return -ERANGE; --=20 2.54.0