From nobody Fri Nov 14 18:16:52 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1761764969; cv=none; d=zohomail.com; s=zohoarc; b=Ez32Do0J5Rrs2Imw4OqAxv6HaB4+2/Bkc5uXi7nVtlxRkquYUEch7ZuSavLTin9JC0H9dP0vlR71U3EvR6P9h7jE7rFwIH+YtDO9vys3H9LzvqAZB6wblsXih4wNwxNWgHEFO4CQnFudpvNu6uESa5d0doB4ov0QcElbCx+ccmU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761764969; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=XnC9Njsa3+9pTSXEc6m+ZkC6y8BZ0W+4yH/alKcG3dY=; b=GOqm/wY50tYAfSFbp3ZkItzkgUhsMmBTn37pIUZwEVCcXWGUYyAWbYRE8xbhW8kKzBGm58JXcDyQI4+a4iaCXUZxprgzaHc3N+3jxkcTR9t2Q4DiTQYcPikFt5oabPrxxBGZydRmirASYwcuFex4ajU4vuF7LTD5jUde5odEK3A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761764969306500.10162633624077; Wed, 29 Oct 2025 12:09:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vEBW5-0006Kd-M4; Wed, 29 Oct 2025 15:07:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vEBW3-0006KJ-RA; Wed, 29 Oct 2025 15:07:27 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vEBVu-0001Or-QS; Wed, 29 Oct 2025 15:07:27 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 59TBMOi8001087; Wed, 29 Oct 2025 19:07:08 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4a34ajmwm5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:07 +0000 (GMT) Received: from m0353725.ppops.net (m0353725.ppops.net [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.0.8) with ESMTP id 59TJ77RF012924; Wed, 29 Oct 2025 19:07:07 GMT 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 4a34ajmwm3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:07 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 59TGncxo023836; Wed, 29 Oct 2025 19:07:06 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4a33vx5117-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:06 +0000 Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 59TJ72Lg42402228 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 Oct 2025 19:07:02 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AB03620049; Wed, 29 Oct 2025 19:07:02 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 72EBE20040; Wed, 29 Oct 2025 19:07:01 +0000 (GMT) Received: from ltcd48-lp3.ltc.tadn.ibm.com (unknown [9.5.7.39]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 29 Oct 2025 19:07:01 +0000 (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=XnC9Njsa3+9pTSXEc 6m+ZkC6y8BZ0W+4yH/alKcG3dY=; b=tHTtuhFahZZXv66M4VgIXc87R150e4IOq Xb/Da2lq2hv0Y07C1oJKD+1acwxIaVjg11rmIbz42hE4u4Z8wn5byBCYjYf6yema oSMVOgc6MqjnOV/5G0tupuRb6jw8Df8fUaofP5aLxTceIbRNxa9CSGW+ML+JlWZj zY1lPurmy+qfTMxqZ6y7sqAmYzvyLJPmNEvcyyvON9jS+ZrDnda9m2W6razd8KFu qYKcArXgbvfBo8cTA+dPBn8vpTDPDcodoROkXlTc5Vfr+WAae+QGyrFChn7u6gft SET+QR/7q4ypu54Vjxr5zxH7/5LraQfRwZ86NWCqUArzZnswK3eyA== From: Narayana Murty N To: npiggin@gmail.com, harshpb@linux.ibm.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org Cc: mahesh@linux.ibm.com, ganeshgr@linux.ibm.com Subject: [RFC 1/4] ppc/spapr: Add VFIO EEH error injection backend Date: Wed, 29 Oct 2025 10:06:15 -0500 Message-ID: <20251029150618.186803-2-nnmlinux@linux.ibm.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029150618.186803-1-nnmlinux@linux.ibm.com> References: <20251029150618.186803-1-nnmlinux@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=C/XkCAP+ c=1 sm=1 tr=0 ts=690265db cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=x6icFKpwvdMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=qkVa7TRde7xkgx6zoNMA:9 X-Proofpoint-GUID: VXeibnPKf9mI4t4SC0aY4s6lBNbIYe33 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDI4MDE2NiBTYWx0ZWRfX4MfGKr7bKyAk vja9ZlzfdEjCNC4+08IScrJgWI5ED7y4QmVNr067NIzYHIk/7BfFHWo3Udl143zuO/s+k4sF+L/ NpmO0cUe9WiERA6bkkU+YMiwaf/GCEJH52N4ondRWzgKNrjZiqdxBHiBIp7sgW/Uajh63oqWdAm /Cfu5MZXoXBEAhdaDSd5wRoj3qx3wJPWhRPVMfKbVPYJgVTcfJY54tFaXWKRf1FGO1FRiqLf97O q3fmsYrpsatEKeULyMXnlBgV+oz6FkjPEJB1BjSXT2paC0tdHYKv9LaTOPJQDXRRe/vwhfUEdDQ RpKLsKu1F+6XUw3B5iBjCNCz3/T7evu7WL79SkJ9yCZsMb7A5W99q574NPGFbHMCO1I9PD9Xep4 g16paMtZy88tijjCccdJha9i+DaVcw== X-Proofpoint-ORIG-GUID: jPeWKrkU85FZZpuorzGlnP_9nX9lOCrK X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-10-29_07,2025-10-29_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 suspectscore=0 spamscore=0 phishscore=0 malwarescore=0 priorityscore=1501 clxscore=1011 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2510240000 definitions=main-2510280166 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=nnmlinux@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DATE_IN_PAST_03_06=1.592, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1761764972182154100 Content-Type: text/plain; charset="utf-8" Introduce 'spapr_phb_vfio_errinjct()' to inject PCI PHB error events via the VFIO passthrough backend. This function translates RTAS error injection parameters into VFIO EEH injection commands suitable for hardware emulation. The patch adds: - A minimal 'enum rtas_err_type' for error types used in VFIO path - EEH function code macros ('EEH_ERR_FUNC_...') - Backend stub and integration into 'spapr_pci_vfio.c' - Necessary header declarations for interfacing This forms the foundational layer for PCI error injection testing using VFIO passthrough devices on pseries guests. Signed-off-by: Narayana Murty N --- include/hw/pci-host/spapr.h | 7 +++++ include/hw/ppc/spapr.h | 44 ++++++++++++++++++++++++++++++ hw/ppc/spapr_pci_vfio.c | 53 +++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) diff --git a/include/hw/pci-host/spapr.h b/include/hw/pci-host/spapr.h index 0db87f1281..2e91e0fb38 100644 --- a/include/hw/pci-host/spapr.h +++ b/include/hw/pci-host/spapr.h @@ -125,6 +125,8 @@ int spapr_phb_vfio_eeh_get_state(SpaprPhbState *sphb, i= nt *state); int spapr_phb_vfio_eeh_reset(SpaprPhbState *sphb, int option); int spapr_phb_vfio_eeh_configure(SpaprPhbState *sphb); void spapr_phb_vfio_reset(DeviceState *qdev); +int spapr_phb_vfio_errinjct(SpaprPhbState *sphb, uint32_t func, + uint64_t addr, uint64_t mask, uint32_t type); #else static inline bool spapr_phb_eeh_available(SpaprPhbState *sphb) { @@ -151,6 +153,11 @@ static inline int spapr_phb_vfio_eeh_configure(SpaprPh= bState *sphb) static inline void spapr_phb_vfio_reset(DeviceState *qdev) { } +static int spapr_phb_vfio_errinjct(SpaprPhbState *sphb, uint32_t func, + uint64_t addr, uint64_t mask, uint32_t = type) +{ + return RTAS_OUT_HW_ERROR; +} #endif =20 void spapr_phb_dma_reset(SpaprPhbState *sphb); diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 39bd5bd5ed..331946ee57 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -691,6 +691,50 @@ void push_sregs_to_kvm_pr(SpaprMachineState *spapr); #define RTAS_EEH_PE_UNAVAIL_INFO 1000 #define RTAS_EEH_PE_RECOVER_INFO 0 =20 +/* EEH error types and functions */ +#define EEH_ERR_FUNC_MIN 0 +#define EEH_ERR_FUNC_LD_MEM_ADDR 0 /* Memory load */ +#define EEH_ERR_FUNC_LD_MEM_DATA 1 +#define EEH_ERR_FUNC_LD_IO_ADDR 2 /* IO load */ +#define EEH_ERR_FUNC_LD_IO_DATA 3 +#define EEH_ERR_FUNC_LD_CFG_ADDR 4 /* Config load */ +#define EEH_ERR_FUNC_LD_CFG_DATA 5 +#define EEH_ERR_FUNC_ST_MEM_ADDR 6 /* Memory store */ +#define EEH_ERR_FUNC_ST_MEM_DATA 7 +#define EEH_ERR_FUNC_ST_IO_ADDR 8 /* IO store */ +#define EEH_ERR_FUNC_ST_IO_DATA 9 +#define EEH_ERR_FUNC_ST_CFG_ADDR 10 /* Config store */ +#define EEH_ERR_FUNC_ST_CFG_DATA 11 +#define EEH_ERR_FUNC_DMA_RD_ADDR 12 /* DMA read */ +#define EEH_ERR_FUNC_DMA_RD_DATA 13 +#define EEH_ERR_FUNC_DMA_RD_MASTER 14 +#define EEH_ERR_FUNC_DMA_RD_TARGET 15 +#define EEH_ERR_FUNC_DMA_WR_ADDR 16 /* DMA write */ +#define EEH_ERR_FUNC_DMA_WR_DATA 17 +#define EEH_ERR_FUNC_DMA_WR_MASTER 18 +#define EEH_ERR_FUNC_DMA_WR_TARGET 19 +#define EEH_ERR_FUNC_MAX EEH_ERR_FUNC_DMA_WR_TARGET + +/* RTAS PCI Error Injection Token Types */ +enum rtas_err_type { + RTAS_ERR_TYPE_FATAL =3D 0x1, + RTAS_ERR_TYPE_RECOVERED_RANDOM_EVENT =3D 0x2, + RTAS_ERR_TYPE_RECOVERED_SPECIAL_EVENT =3D 0x3, + RTAS_ERR_TYPE_CORRUPTED_PAGE =3D 0x4, + RTAS_ERR_TYPE_CORRUPTED_SLB =3D 0x5, + RTAS_ERR_TYPE_TRANSLATOR_FAILURE =3D 0x6, + RTAS_ERR_TYPE_IOA_BUS_ERROR =3D 0x7, + RTAS_ERR_TYPE_PLATFORM_SPECIFIC =3D 0x8, + RTAS_ERR_TYPE_CORRUPTED_DCACHE_START =3D 0x9, + RTAS_ERR_TYPE_CORRUPTED_DCACHE_END =3D 0xA, + RTAS_ERR_TYPE_CORRUPTED_ICACHE_START =3D 0xB, + RTAS_ERR_TYPE_CORRUPTED_ICACHE_END =3D 0xC, + RTAS_ERR_TYPE_CORRUPTED_TLB_START =3D 0xD, + RTAS_ERR_TYPE_CORRUPTED_TLB_END =3D 0xE, + RTAS_ERR_TYPE_IOA_BUS_ERROR_64 =3D 0xF, + RTAS_ERR_TYPE_UPSTREAM_IO_ERROR =3D 0x10 +}; + /* ibm,set-slot-reset */ #define RTAS_SLOT_RESET_DEACTIVATE 0 #define RTAS_SLOT_RESET_HOT 1 diff --git a/hw/ppc/spapr_pci_vfio.c b/hw/ppc/spapr_pci_vfio.c index a748a0bf4c..ed0b22a84a 100644 --- a/hw/ppc/spapr_pci_vfio.c +++ b/hw/ppc/spapr_pci_vfio.c @@ -317,6 +317,55 @@ int spapr_phb_vfio_eeh_configure(SpaprPhbState *sphb) return RTAS_OUT_SUCCESS; } =20 +int spapr_phb_vfio_errinjct(SpaprPhbState *sphb, + uint32_t func, uint64_t addr, + uint64_t mask, uint32_t type) +{ + VFIOLegacyContainer *container =3D vfio_eeh_as_container(&sphb->iommu_= as); + struct vfio_eeh_pe_op op =3D { + .op =3D VFIO_EEH_PE_INJECT_ERR, + .argsz =3D sizeof(op), + }; + + /* Set error type, address, and mask */ + op.err.type =3D type; + op.err.addr =3D addr; + op.err.mask =3D mask; + + /* Validate and set function code */ + switch (func) { + case EEH_ERR_FUNC_LD_MEM_ADDR: + case EEH_ERR_FUNC_LD_MEM_DATA: + case EEH_ERR_FUNC_LD_IO_ADDR: + case EEH_ERR_FUNC_LD_IO_DATA: + case EEH_ERR_FUNC_LD_CFG_ADDR: + case EEH_ERR_FUNC_LD_CFG_DATA: + case EEH_ERR_FUNC_ST_MEM_ADDR: + case EEH_ERR_FUNC_ST_MEM_DATA: + case EEH_ERR_FUNC_ST_IO_ADDR: + case EEH_ERR_FUNC_ST_IO_DATA: + case EEH_ERR_FUNC_ST_CFG_ADDR: + case EEH_ERR_FUNC_ST_CFG_DATA: + case EEH_ERR_FUNC_DMA_RD_ADDR: + case EEH_ERR_FUNC_DMA_RD_DATA: + case EEH_ERR_FUNC_DMA_RD_MASTER: + case EEH_ERR_FUNC_DMA_RD_TARGET: + case EEH_ERR_FUNC_DMA_WR_ADDR: + case EEH_ERR_FUNC_DMA_WR_DATA: + case EEH_ERR_FUNC_DMA_WR_MASTER: + op.err.func =3D func; + break; + default: + return RTAS_OUT_PARAM_ERROR; + } + + /* Perform the ioctl to inject the error */ + if (ioctl(container->fd, VFIO_EEH_PE_OP, &op) < 0) { + return RTAS_OUT_HW_ERROR; + } + + return RTAS_OUT_SUCCESS; +} #else =20 bool spapr_phb_eeh_available(SpaprPhbState *sphb) @@ -349,4 +398,8 @@ int spapr_phb_vfio_eeh_configure(SpaprPhbState *sphb) return RTAS_OUT_NOT_SUPPORTED; } =20 +int spapr_phb_vfio_errinjct(SpaprPhbState *sphb, int option) +{ + return RTAS_OUT_NOT_SUPPORTED; +} #endif /* CONFIG_VFIO_PCI */ --=20 2.51.0 From nobody Fri Nov 14 18:16:52 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1761764965; cv=none; d=zohomail.com; s=zohoarc; b=aL+vY0iRO83dUmEBWkjn59qMObz8xSUMVAE0/4tWHtqhdAUNRI18VHq1wXHVAZno0UUKpFqYwqRRkR/yAehQpgPs4W7nethbSGqEzhYcpIC0y1anJ8+aD52apmqt6JdKWnAD4DvvCem/LIF5PKQ1ZuRHWdRiAr1kJK57ImaBkT8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761764965; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WoGXQw6q2TVBRKVbYjkZeg21img8cNrMEz4VLL7uPzQ=; b=VyvGe8ZZV+YezmNQ4LKfVEMIryRijMovp7wOWq/jjh5kXVUmpnAXFZlM/rI2D1kIzbmjawG1rRF53sqBo6EVz1H/sKV9ekzKkp74BRwBGJBRWFpMD7GLP3TsejuczxmyuCbdWNUEcFT6eiBEJqL6YC6yDbQveera492FJrGkleI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761764965209442.26719076660663; Wed, 29 Oct 2025 12:09:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vEBWO-0006Pk-67; Wed, 29 Oct 2025 15:07:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vEBWK-0006OA-Ey; Wed, 29 Oct 2025 15:07:45 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vEBW3-0001Ou-Mk; Wed, 29 Oct 2025 15:07:44 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 59TCb60t030847; Wed, 29 Oct 2025 19:07:09 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4a34ajmwmd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:09 +0000 (GMT) Received: from m0353725.ppops.net (m0353725.ppops.net [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.0.8) with ESMTP id 59TJ7897012955; Wed, 29 Oct 2025 19:07:08 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4a34ajmwmb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:08 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 59TGcOba030770; Wed, 29 Oct 2025 19:07:08 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4a33wwn1mr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:08 +0000 Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 59TJ74wP22872538 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 Oct 2025 19:07:04 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4086F20049; Wed, 29 Oct 2025 19:07:04 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F35F920040; Wed, 29 Oct 2025 19:07:02 +0000 (GMT) Received: from ltcd48-lp3.ltc.tadn.ibm.com (unknown [9.5.7.39]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 29 Oct 2025 19:07:02 +0000 (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=WoGXQw6q2TVBRKVbY jkZeg21img8cNrMEz4VLL7uPzQ=; b=o+RUO1t8NAZImZDASnppqR8JAZ9eNTLD3 LgvbvT3P8OYAk6CVsAQK7+zonfxApcpZd8P30n4JyLkAhj34CqSPba/rFa5KF60V Khw2JVYBbBih6V31jKmgbN3bOvbauNX9Dc/kzL+8PLpZSgbieozvfhk+dSsYJIHM 3rgCPeE9iriVk6RGGUWCEaPtGhtdYLckxK6vUUEE6BUDUFd1LscQJSp5jWFSmBr5 E+2vQXVctex9goT/S28BSlurtRKneeKuK8BPSZfh9TgYTP038SOkgPF4fmj5cqju ykZeLLlJ+yJfsA1j85RZpznBHisMUcCujTOijlOjS3Y8moQZw0XrQ== From: Narayana Murty N To: npiggin@gmail.com, harshpb@linux.ibm.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org Cc: mahesh@linux.ibm.com, ganeshgr@linux.ibm.com Subject: [RFC 2/4] ppc/spapr: Add ibm,errinjct RTAS call handler Date: Wed, 29 Oct 2025 10:06:16 -0500 Message-ID: <20251029150618.186803-3-nnmlinux@linux.ibm.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029150618.186803-1-nnmlinux@linux.ibm.com> References: <20251029150618.186803-1-nnmlinux@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=C/XkCAP+ c=1 sm=1 tr=0 ts=690265dd cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=x6icFKpwvdMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=_MNm8bNPt0bhIkh_LCUA:9 X-Proofpoint-GUID: u2xGwuK7tTJzFsg8gSMZ089I-Q8JP7g- X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDI4MDE2NiBTYWx0ZWRfXw9PLgtkHLiub M/7Y+gNjz9cFus3GfIZXFvatkr1N9s8GcqbNyKZs3mxZ8NJ6yyab5Y3tbuwJ9/euIwDZS2woUyK JE6mVuWlgm0I/1FKyR6Y8LbrCT0WRJG18bFQS+lJiBmfA/E/SZWqYSMIRdaGoicbt+gTAOPBMKY vi3jUyF7+ma7dmNlV6QahpJaMGOGpvoZwMQOhCtth5FcFpgoXKBay5jYMEiYFsz2Q35q8AKtgsH 776gfGxrn22X184mtCxeKHuJk4l7uwCOD3kuq3ortNn0Tyz9bZII0UVnYSS2DyuWsv5P77sXal6 qgqGy4ZaCoHIt+lL1pPvYkMGJSB4AF8//B9HIrGydoR3yb/ZAEuFVzyEYv5YhM/05K/Ov5ukXwC 9Zhf+2ZXvbHioNlFzDYgxak/0BRdEA== X-Proofpoint-ORIG-GUID: OmayW4_-tlwlg4nFr84vfRAHOIAxxupd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-10-29_07,2025-10-29_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 suspectscore=0 spamscore=0 phishscore=0 malwarescore=0 priorityscore=1501 clxscore=1011 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2510240000 definitions=main-2510280166 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=nnmlinux@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DATE_IN_PAST_03_06=1.592, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1761764967033158500 Content-Type: text/plain; charset="utf-8" Implements the 'ibm,errinjct' RTAS call for PHB-level PCI error injection via firmware. This handler decodes the RTAS parameter buffer, validates arguments, and delegates the injection to the backend. The patch includes: - 'rtas_ibm_errinjct()' handler implementation - Registration of 'RTAS_IBM_ERRINJCT' token - RTAS error codes for result reporting - Helper macros used exclusively in RTAS code path Enables guest-initiated error injection for improved test coverage and diagnostics in EEH emulation flows. Signed-off-by: Narayana Murty N --- include/hw/ppc/spapr.h | 6 +- hw/ppc/spapr_pci.c | 155 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 160 insertions(+), 1 deletion(-) diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 331946ee57..f762be030c 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -715,6 +715,9 @@ void push_sregs_to_kvm_pr(SpaprMachineState *spapr); #define EEH_ERR_FUNC_DMA_WR_TARGET 19 #define EEH_ERR_FUNC_MAX EEH_ERR_FUNC_DMA_WR_TARGET =20 +#define EEH_ERR_EVENT_MODE_MIN 1 +#define EEH_ERR_EVENT_MODE_MAX 2 + /* RTAS PCI Error Injection Token Types */ enum rtas_err_type { RTAS_ERR_TYPE_FATAL =3D 0x1, @@ -814,8 +817,9 @@ enum rtas_err_type { #define RTAS_IBM_SUSPEND_ME (RTAS_TOKEN_BASE + 0x2A) #define RTAS_IBM_NMI_REGISTER (RTAS_TOKEN_BASE + 0x2B) #define RTAS_IBM_NMI_INTERLOCK (RTAS_TOKEN_BASE + 0x2C) +#define RTAS_IBM_ERRINJCT (RTAS_TOKEN_BASE + 0x2D) =20 -#define RTAS_TOKEN_MAX (RTAS_TOKEN_BASE + 0x2D) +#define RTAS_TOKEN_MAX (RTAS_TOKEN_BASE + 0x2E) =20 /* RTAS ibm,get-system-parameter token values */ #define RTAS_SYSPARM_SPLPAR_CHARACTERISTICS 20 diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index f9095552e8..219099f5aa 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -712,6 +712,158 @@ param_error_exit: rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR); } =20 +static int parse_and_verify_recovered_special_event(target_ulong param_buf, + uint64_t *addr) { + uint32_t mode =3D rtas_ld(param_buf, 0); + if (mode !=3D EEH_ERR_EVENT_MODE_MIN && mode !=3D EEH_ERR_EVENT_MODE_M= AX) { + return RTAS_OUT_PARAM_ERROR; + } + *addr =3D ((uint64_t)mode) << 32; + qemu_log("RTAS: recovered-special-event: mode=3D%u\n", mode); + return RTAS_OUT_SUCCESS; +} + +static int parse_and_verify_corrupted_page(target_ulong param_buf, + uint64_t *addr) { + *addr =3D ((uint64_t)rtas_ld(param_buf, 0) << 32) | rtas_ld(param_buf,= 1); + qemu_log("RTAS: corrupted-page: addr=3D0x%lx\n", *addr); + return (*addr) ? RTAS_OUT_SUCCESS : RTAS_OUT_PARAM_ERROR; +} + +static int parse_and_verify_ioa_bus_error(target_ulong param_buf, + bool is_64bit, + uint64_t *addr, uint64_t *mask, + uint64_t *buid, uint32_t *func) +{ + if (is_64bit) { + *addr =3D ((uint64_t)rtas_ld(param_buf, 0) << 32) | rtas_ld(param_= buf, 1); + *mask =3D ((uint64_t)rtas_ld(param_buf, 2) << 32) | rtas_ld(param_= buf, 3); + *buid =3D ((uint64_t)rtas_ld(param_buf, 5) << 32) | rtas_ld(param_= buf, 6); + *func =3D rtas_ld(param_buf, 7); + } else { + *addr =3D rtas_ld(param_buf, 0); + *mask =3D rtas_ld(param_buf, 1); + *buid =3D ((uint64_t)rtas_ld(param_buf, 3) << 32) | rtas_ld(param_= buf, 4); + *func =3D rtas_ld(param_buf, 5); + } + + /* Address/mask validation intentionally skipped for now */ + + return RTAS_OUT_SUCCESS; +} + +static int parse_and_verify_corrupted_dcache(target_ulong param_buf, + uint64_t *addr) +{ + uint32_t action =3D rtas_ld(param_buf, 0); + uint32_t nature =3D rtas_ld(param_buf, 1); + *addr =3D ((uint64_t)action << 32) | nature; + + return (action <=3D 2 && nature <=3D 2) ? RTAS_OUT_SUCCESS + : RTAS_OUT_PARAM_ERROR; +} + +static int parse_and_verify_corrupted_icache(target_ulong param_buf, + uint64_t *addr) +{ + uint32_t action =3D rtas_ld(param_buf, 0); + uint32_t nature =3D rtas_ld(param_buf, 1); + *addr =3D ((uint64_t)action << 32) | nature; + + return (action <=3D 3 && nature <=3D 2) ? RTAS_OUT_SUCCESS + : RTAS_OUT_PARAM_ERROR; +} + +static int parse_and_verify_corrupted_tlb(target_ulong param_buf, + uint64_t *addr) +{ + uint32_t nature =3D rtas_ld(param_buf, 0); + *addr =3D ((uint64_t)nature << 32); + + return (nature <=3D 2) ? RTAS_OUT_SUCCESS : RTAS_OUT_PARAM_ERROR; +} + +static void rtas_ibm_errinjct(PowerPCCPU *cpu, SpaprMachineState *spapr, + uint32_t token, uint32_t nargs, + target_ulong args, uint32_t nret, + target_ulong rets) +{ + SpaprPhbState *sphb; + target_ulong param_buf; + uint64_t addr =3D 0, mask =3D 0, buid =3D 0; + uint32_t func =3D 0; + uint32_t type, o_token; + int ret =3D -1; + + if ((nargs !=3D 3) || (nret !=3D 1)) { + goto param_error_exit; + } + + type =3D rtas_ld(args, 0); + o_token =3D rtas_ld(args, 1); + param_buf =3D rtas_ld(args, 2); + + if (o_token !=3D spapr->errinjct_token) { + goto param_error_exit; + } + + sphb =3D QLIST_FIRST(&spapr->phbs); + if (!sphb) { + goto param_error_exit; + } + + switch (type) { + case RTAS_ERR_TYPE_IOA_BUS_ERROR: + ret =3D parse_and_verify_ioa_bus_error(param_buf, false, &addr, + &mask, &buid, &func); + break; + case RTAS_ERR_TYPE_IOA_BUS_ERROR_64: + ret =3D parse_and_verify_ioa_bus_error(param_buf, true, &addr, + &mask, &buid, &func); + break; + case RTAS_ERR_TYPE_CORRUPTED_PAGE: + ret =3D parse_and_verify_corrupted_page(param_buf, &addr); + break; + case RTAS_ERR_TYPE_RECOVERED_SPECIAL_EVENT: + ret =3D parse_and_verify_recovered_special_event(param_buf, &addr); + break; + case RTAS_ERR_TYPE_CORRUPTED_DCACHE_START: + case RTAS_ERR_TYPE_CORRUPTED_DCACHE_END: + ret =3D parse_and_verify_corrupted_dcache(param_buf, &addr); + mask =3D 0; + break; + case RTAS_ERR_TYPE_CORRUPTED_ICACHE_START: + case RTAS_ERR_TYPE_CORRUPTED_ICACHE_END: + ret =3D parse_and_verify_corrupted_icache(param_buf, &addr); + mask =3D 0; + break; + case RTAS_ERR_TYPE_CORRUPTED_TLB_START: + case RTAS_ERR_TYPE_CORRUPTED_TLB_END: + ret =3D parse_and_verify_corrupted_tlb(param_buf, &addr); + mask =3D 0; + break; + default: + ret =3D RTAS_OUT_PARAM_ERROR; + break; + } + + if (ret !=3D RTAS_OUT_SUCCESS) { + goto param_error_exit; + } + + ret =3D spapr_phb_vfio_errinjct(sphb, func, addr, mask, type); + if (ret < 0) { + rtas_st(rets, 0, RTAS_OUT_HW_ERROR); + return; + } + + rtas_st(rets, 0, RTAS_OUT_SUCCESS); + return; + +param_error_exit: + rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR); +} + static void pci_spapr_set_irq(void *opaque, int irq_num, int level) { /* @@ -2405,6 +2557,9 @@ void spapr_pci_rtas_init(void) spapr_rtas_register(RTAS_IBM_SLOT_ERROR_DETAIL, "ibm,slot-error-detail", rtas_ibm_slot_error_detail); + spapr_rtas_register(RTAS_IBM_ERRINJCT, + "ibm,errinjct", + rtas_ibm_errinjct); } =20 static void spapr_pci_register_types(void) --=20 2.51.0 From nobody Fri Nov 14 18:16:52 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=reject dis=none) header.from=linux.ibm.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761765011153795.1814729962634; Wed, 29 Oct 2025 12:10:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vEBWL-0006O2-7U; Wed, 29 Oct 2025 15:07:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vEBWC-0006MX-PK; Wed, 29 Oct 2025 15:07:36 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vEBVz-0001P0-Nw; Wed, 29 Oct 2025 15:07:36 -0400 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 59TA1HfG026029; Wed, 29 Oct 2025 19:07:10 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4a34aamwxt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:10 +0000 (GMT) Received: from m0356516.ppops.net (m0356516.ppops.net [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.0.8) with ESMTP id 59TJ7AGS012794; Wed, 29 Oct 2025 19:07:10 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4a34aamwxp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:10 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 59TGj47Z030790; Wed, 29 Oct 2025 19:07:09 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4a33wwn1mv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:09 +0000 Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 59TJ75JE49414546 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 Oct 2025 19:07:05 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C039B20049; Wed, 29 Oct 2025 19:07:05 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8922620040; Wed, 29 Oct 2025 19:07:04 +0000 (GMT) Received: from ltcd48-lp3.ltc.tadn.ibm.com (unknown [9.5.7.39]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 29 Oct 2025 19:07:04 +0000 (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=iwkaVuBlwz+ePTv+h 51JfTzIRUzkqD2xxDdmV0GuXO0=; b=Xt5ZQQLq12qEfO1MUTCnq8i3hzmWeu5Co 2hH99IwvfI/EieebbIa2ah5s+i1nuEn9mZXNCHsNIm1FbZZ7NZLTXMKuy+OYM6bw wk0M4k+ELhIO/OCZNPRomq7gkxgm7WwAJoTs5U/3e4Km6uWyVIXQMo5j81iB7mbt 0anospeGFbilkRZZBhKrTO5sL6N+X1rCeMDpIsNxr9zusGGJzybVquYwjRQCpk9d BagUsPe84ugoZopxEO30EtKW+bzOf30iL9+Izjf2AuQkgIvQUXdfQUJk2KKkx0/q fAdDA7g4lkcHkgTjet6GXYWxZsvC9/f89njkmHjHbLH69cDHesRdg== From: Narayana Murty N To: npiggin@gmail.com, harshpb@linux.ibm.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org Cc: mahesh@linux.ibm.com, ganeshgr@linux.ibm.com Subject: [RFC 3/4] ppc/spapr: Add support for 'ibm, open-errinjct' and 'ibm, close-errinjct' Date: Wed, 29 Oct 2025 10:06:17 -0500 Message-ID: <20251029150618.186803-4-nnmlinux@linux.ibm.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029150618.186803-1-nnmlinux@linux.ibm.com> References: <20251029150618.186803-1-nnmlinux@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=ALkgKXG8 c=1 sm=1 tr=0 ts=690265de cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=x6icFKpwvdMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=QI9oHtSxlEyCc_VTGTAA:9 X-Proofpoint-ORIG-GUID: tehYuktGMqcdlCgtlgkbJkHa8P6PZg9i X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDI4MDE2NiBTYWx0ZWRfXxJGHan1RQWBe tbTN4QguP+fp0HLNisQWFhuaFBN1TvJg0/6ErJv48HnZ/VcJ4FamRI6xQ55k6m5VTbEOYCyWSi1 D/nMEjJ+XlucSEKl9c7Y+KPhi0HE32IXyOEYt6lmUmeew8TYo2KWmubRYcAp5hvj8ETBg5DEe1O I9d/KEY1hwE4MGnaRneeCsNv3KJOlfV/v6Z98LxNN/he6FpBuXCFkJ7Ig6VtXD/DuqCKYLWjJw/ 7EKm8PzBBWVNf9QPuROUFDSOJimpIchdgbMezN52k6nJQ8lpkRa2Elt/EQ/bfDLTNxbBsikMRHW Q3zPPClIizLJsvkxK8UKBZdhUvJpRu8y30qryAnZE2NELuWYiQZvbsE79TLdUfCLtHaggRg2Qgr z4uMFZVuMQ7EPxb7aR9blAjw8U4Y5w== X-Proofpoint-GUID: ZVjPVnMAMVs2bYxekaLED23ywGBv1Eif X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-10-29_07,2025-10-29_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 impostorscore=0 lowpriorityscore=0 clxscore=1011 adultscore=0 bulkscore=0 malwarescore=0 phishscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2510240000 definitions=main-2510280166 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=nnmlinux@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DATE_IN_PAST_03_06=1.592, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1761765017286158500 Content-Type: text/plain; charset="utf-8" Add support for the 'ibm,open-errinjct' and 'ibm,close-errinjct' RTAS calls. These handlers manage exclusive access to error injection facilities through a simple session-based mechanism. Updates include: - Implementation of rtas_ibm_open_errinjct() and rtas_ibm_close_errinjct() - Tracking field 'spapr->errinjct_token' in SpaprMachineState - New token definitions for the above RTAS calls - Return codes for already open or invalid close conditions This ensures that only one guest process can actively perform error injection at a time, improving reliability and preventing conflicts. Signed-off-by: Narayana Murty N --- --- include/hw/ppc/spapr.h | 8 +++++- hw/ppc/spapr_pci.c | 65 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index f762be030c..af9617b13e 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -283,6 +283,7 @@ struct SpaprMachineState { Error *fwnmi_migration_blocker; =20 SpaprWatchdog wds[WDT_MAX_WATCHDOGS]; + uint32_t errinjct_token; }; =20 #define H_SUCCESS 0 @@ -755,6 +756,9 @@ enum rtas_err_type { #define RTAS_OUT_PARAM_ERROR -3 #define RTAS_OUT_NOT_SUPPORTED -3 #define RTAS_OUT_NO_SUCH_INDICATOR -3 +#define RTAS_OUT_ALREADY_OPEN -4 +#define RTAS_OUT_NOT_OPEN -5 +#define RTAS_OUT_CLOSE_ERROR -6 #define RTAS_OUT_NOT_AUTHORIZED -9002 #define RTAS_OUT_SYSPARM_PARAM_ERROR -9999 =20 @@ -818,8 +822,10 @@ enum rtas_err_type { #define RTAS_IBM_NMI_REGISTER (RTAS_TOKEN_BASE + 0x2B) #define RTAS_IBM_NMI_INTERLOCK (RTAS_TOKEN_BASE + 0x2C) #define RTAS_IBM_ERRINJCT (RTAS_TOKEN_BASE + 0x2D) +#define RTAS_IBM_OPEN_ERRINJCT (RTAS_TOKEN_BASE + 0x2E) +#define RTAS_IBM_CLOSE_ERRINJCT (RTAS_TOKEN_BASE + 0x2F) =20 -#define RTAS_TOKEN_MAX (RTAS_TOKEN_BASE + 0x2E) +#define RTAS_TOKEN_MAX (RTAS_TOKEN_BASE + 0x30) =20 /* RTAS ibm,get-system-parameter token values */ #define RTAS_SYSPARM_SPLPAR_CHARACTERISTICS 20 diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index 219099f5aa..4723b87c65 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -864,6 +864,65 @@ param_error_exit: rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR); } =20 +static void rtas_ibm_open_errinjct(PowerPCCPU *cpu, + SpaprMachineState *spapr, + uint32_t token, + uint32_t nargs, + target_ulong args, + uint32_t nret, + target_ulong rets) +{ + /* Validate argument count */ + if ((nargs !=3D 0) || (nret !=3D 2)) { + rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR); + return; + } + + if (spapr->errinjct_token) { + /* Already open: return token=3D0 and code=3DALREADY_OPEN */ + rtas_st(rets, 0, 0); + rtas_st(rets, 1, RTAS_OUT_ALREADY_OPEN); + return; + } + + spapr->errinjct_token =3D 1; + + /* + * Unlike most RTAS calls, ibm,open-errinjct returns + * the session token in the first output parameter + * and the status in the second. + */ + rtas_st(rets, 0, spapr->errinjct_token); + rtas_st(rets, 1, RTAS_OUT_SUCCESS); +} + +static void rtas_ibm_close_errinjct(PowerPCCPU *cpu, + SpaprMachineState *spapr, + uint32_t token, + uint32_t nargs, + target_ulong args, + uint32_t nret, + target_ulong rets) +{ + uint32_t o_token; + + if ((nargs !=3D 1) || (nret !=3D 1)) { + rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR); + return; + } + + o_token =3D rtas_ld(args, 0); + + if (o_token !=3D spapr->errinjct_token) { + rtas_st(rets, 0, RTAS_OUT_NOT_OPEN); + return; + } + + spapr->errinjct_token =3D 0; + + rtas_st(rets, 0, RTAS_OUT_SUCCESS); +} + static void pci_spapr_set_irq(void *opaque, int irq_num, int level) { /* @@ -2560,6 +2619,12 @@ void spapr_pci_rtas_init(void) spapr_rtas_register(RTAS_IBM_ERRINJCT, "ibm,errinjct", rtas_ibm_errinjct); + spapr_rtas_register(RTAS_IBM_OPEN_ERRINJCT, + "ibm,open-errinjct", + rtas_ibm_open_errinjct); + spapr_rtas_register(RTAS_IBM_CLOSE_ERRINJCT, + "ibm,close-errinjct", + rtas_ibm_close_errinjct); } =20 static void spapr_pci_register_types(void) --=20 2.51.0 From nobody Fri Nov 14 18:16:52 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1761764994; cv=none; d=zohomail.com; s=zohoarc; b=d+W9uXlJmBtfnuq0z2Cpg3p6qSThpTRi/SZESZ93DNq1+aeDxbtfLKAAb0N86GT1gl+g+qOjjYT3AlS5ZsTfljNCFict43LsvkAgL6VXMCStLtXeZo5OlSjnwTLWiYhE4Lm4lQhWD+Xcgp5VUxGquCDH/Ozh1/jirVaZCIzzP+4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761764994; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ECb2xfE+GzOP0lSP63dCsi5rgcQWNkidDjZYytOst/8=; b=gdaJFuH52QCGRAe+BPCLU6uvwz4oHAdoyuNQTNx0BOKyxDugQ3uWgJI6IJ38pK2s4XBMI50rpD8sQCOJnNXR/ucuwBZo3ugT6pTjib75QZDuADmuwcirsIbqf2nLV+6t1eXAQ4p8lXl+5lHUj/68UJZ7PnDZZUwinug7BAvjyVw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761764994097280.7952369789533; Wed, 29 Oct 2025 12:09:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vEBWG-0006Mx-8g; Wed, 29 Oct 2025 15:07:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vEBWB-0006MI-Ms; Wed, 29 Oct 2025 15:07:35 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vEBW0-0001PK-4m; Wed, 29 Oct 2025 15:07:32 -0400 Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 59TC6kdr025645; Wed, 29 Oct 2025 19:07:13 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4a34acn2x8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:13 +0000 (GMT) Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.0.8) with ESMTP id 59TJ2Qnx029338; Wed, 29 Oct 2025 19:07:12 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4a34acn2x5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:12 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 59TGh1HW030714; Wed, 29 Oct 2025 19:07:11 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4a33wwn1n3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Oct 2025 19:07:11 +0000 Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 59TJ77B955771582 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 Oct 2025 19:07:07 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4CBA620049; Wed, 29 Oct 2025 19:07:07 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 14BDD20040; Wed, 29 Oct 2025 19:07:06 +0000 (GMT) Received: from ltcd48-lp3.ltc.tadn.ibm.com (unknown [9.5.7.39]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 29 Oct 2025 19:07:05 +0000 (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=ECb2xfE+GzOP0lSP6 3dCsi5rgcQWNkidDjZYytOst/8=; b=O6YrXUcT6mq2g9XwTtlS5h8n1kKNAX12Y DWCt9d3bWYiIRWNfc5J8L+SkIvboLP0eTJ0TuNcV+Mh8TDapRLPsjSrgzA+3Q/8D T9Uz9Nu9+V1qkOe+niyeC3H/mPI4fKwLe11DnhnPHFNovkzctbH62Rn2zeBG7c8T uxQvNFNMmyggOip8yV791fJ57TDChmrJPVLJJEdJJmerA9dkr8XWI4mcfiF2/mlb kHLYvPB8URN+g8MMvUv0QFhPNRmfG15bldaqTXLSdXq3p+CudjBVkwulNW9++Afh bB35dLMqcSR5o8d1uo4PiK0aQnzQs/Gix6OphRZVEy47qXfe0qKdg== From: Narayana Murty N To: npiggin@gmail.com, harshpb@linux.ibm.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org Cc: mahesh@linux.ibm.com, ganeshgr@linux.ibm.com Subject: [RFC 4/4] ppc/spapr: Advertise RTAS error injection call support via FDT property Date: Wed, 29 Oct 2025 10:06:18 -0500 Message-ID: <20251029150618.186803-5-nnmlinux@linux.ibm.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251029150618.186803-1-nnmlinux@linux.ibm.com> References: <20251029150618.186803-1-nnmlinux@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=XbuEDY55 c=1 sm=1 tr=0 ts=690265e1 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=x6icFKpwvdMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=nNPvQeRNBT9IKkD_gJkA:9 X-Proofpoint-ORIG-GUID: G45XxM0orDulbhSaYFtxnRNAtVMIroqb X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDI4MDE2NiBTYWx0ZWRfX7hLtUSEBY9UR gJ/xGVXuEddIsde0V3wE1r0iCtban+qEaQl+ib2CYqglSuX8m4tI6ssC/19U1PDNj2m95YYFd2h fLlsNmUfnxRvI7nuW6WBWmJUsy9TPJDHMgAS37H3p8zlvOtmx4lWE015+Mya+iZwK/aePX1X21J CrYSweDczS3bDtlDCA2gqxGzsmnJSudZhwIfsfpHceO1FxMiRxA6+fTO05/mTyOuofB8ZPzmfhN 1kNzs6EYAVj8OzGvVOWClm8iFILpxvn/Bu+zihxqD1ZgGR1Hs/WMynMlFTKFJpp6obsd0BqueWP KZ1PRA30/C/NoIC3ZwRSMiyv63RGrFPooGzUBwybcgVbPFMRLot8t2Y/Ly+4PsKHZw+h29335yW NmkUh5qgHXojl4EszRnBLC68c1oWNA== X-Proofpoint-GUID: tMn96BJAQp8FBZPB8PWG7uO6qNWMqSNH X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-10-29_07,2025-10-29_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 suspectscore=0 bulkscore=0 spamscore=0 impostorscore=0 phishscore=0 priorityscore=1501 clxscore=1011 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2510240000 definitions=main-2510280166 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=nnmlinux@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DATE_IN_PAST_03_06=1.592, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1761764996434154100 Content-Type: text/plain; charset="utf-8" Advertise RTAS error injection call support to guests through a new "ibm,errinjct-tokens" property under the RTAS node in the device tree. This patch introduces: - spapr_get_errinject_tokens(), which retrieves or constructs a blob of supported error injection tokens from the host or fallback data. - Integration of "ibm,errinjct-tokens" into the RTAS FDT node. - Addition of "ibm,open-errinjct" and "ibm,close-errinjct" properties to advertise open/close handlers for error injection sessions. The ibm,errinjct-tokens property allows guests to programmatically discover supported RTAS error injection facilities, enabling safe and dynamic usage. The helper routine allocates memory for the token blob, which the caller must free once it has been added to the FDT. If the device-tree file (/proc/device-tree/rtas/ibm,errinjct-tokens) is not available, a static fallback blob is generated internally. Signed-off-by: Narayana Murty N --- hw/ppc/spapr.c | 106 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index e0a2e5a984..0ca8c777d5 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -114,6 +114,8 @@ =20 #define PHANDLE_INTC 0x00001111 =20 +#define ERR_BLOB_MAX 512 + /* These two functions implement the VCPU id numbering: one to compute them * all and one to identify thread 0 of a VCORE. Any change to the first one * is likely to have an impact on the second one, so let's keep them close. @@ -900,10 +902,104 @@ static int spapr_dt_rng(void *fdt) return ret ? -1 : 0; } =20 +/* + * spapr_get_errinject_tokens: + * --------------------------- + * Retrieve or construct a binary blob representing supported RTAS error + * injection tokens. If the host device-tree path + * "/proc/device-tree/rtas/ibm,errinjct-tokens" exists, it is read directl= y. + * Otherwise, a static fallback list of tokens is generated. + * + * The caller receives a dynamically allocated buffer in @out_buf and + * its size in @out_size, both of which must be freed by the caller + * once used. + * + * Returns: + * 0 (EXIT_SUCCESS) - on success + * -EIO, -ENOMEM - on failure + */ +static int spapr_get_errinject_tokens(char **out_buf, size_t *out_size) +{ + char *path =3D NULL, *buf =3D NULL; + gsize len =3D 0; + uint8_t errinjct_blob[ERR_BLOB_MAX]; + + static const struct { + const char *name; + enum rtas_err_type token; + } errinjct_tokens[] =3D { + { "recovered-special-event", RTAS_ERR_TYPE_RECOVERED_SPECIAL_EVENT= }, + { "corrupted-page", RTAS_ERR_TYPE_CORRUPTED_PAGE }, + { "ioa-bus-error", RTAS_ERR_TYPE_IOA_BUS_ERROR }, + { "corrupted-dcache-start", RTAS_ERR_TYPE_CORRUPTED_DCACHE_START = }, + { "corrupted-dcache-end", RTAS_ERR_TYPE_CORRUPTED_DCACHE_END }, + { "corrupted-icache-start", RTAS_ERR_TYPE_CORRUPTED_ICACHE_START = }, + { "corrupted-icache-end", RTAS_ERR_TYPE_CORRUPTED_ICACHE_END }, + { "corrupted-tlb-start", RTAS_ERR_TYPE_CORRUPTED_TLB_START }, + { "corrupted-tlb-end", RTAS_ERR_TYPE_CORRUPTED_TLB_END }, + { "ioa-bus-error-64", RTAS_ERR_TYPE_IOA_BUS_ERROR_64 }, + }; + + path =3D g_strdup("/proc/device-tree/rtas/ibm,errinjct-tokens"); + + if (g_file_test(path, G_FILE_TEST_EXISTS)) { + qemu_log("RTAS: Found %s\n", path); + + if (!g_file_get_contents(path, &buf, &len, NULL)) { + error_report("RTAS: Failed to read %s", path); + g_free(path); + return -EIO; + } + + qemu_log("RTAS: Read %zu bytes from device-tree\n", len); + *out_buf =3D buf; + *out_size =3D len; + g_free(path); + return EXIT_SUCCESS; + } + + qemu_log("RTAS: %s not found, building fallback blob\n", path); + g_free(path); + len =3D 0; + + for (int i =3D 0; i < G_N_ELEMENTS(errinjct_tokens); i++) { + const char *name =3D errinjct_tokens[i].name; + size_t str_len =3D strlen(name) + 1; + + if (len + str_len + sizeof(uint32_t) > sizeof(errinjct_blob)) { + error_report("RTAS: Too many tokens for static buffer"); + return -ENOMEM; + } + + memcpy(&errinjct_blob[len], name, str_len); + len +=3D str_len; + + uint32_t be_token =3D cpu_to_be32(errinjct_tokens[i].token); + memcpy(&errinjct_blob[len], &be_token, sizeof(be_token)); + len +=3D sizeof(be_token); + } + + buf =3D g_malloc(len); + if (!buf) { + error_report("RTAS: Failed to allocate %zu bytes for blob", len); + return -ENOMEM; + } + + memcpy(buf, errinjct_blob, len); + *out_buf =3D buf; + *out_size =3D len; + + qemu_log("RTAS: Fallback blob built (%zu bytes)\n", len); + return EXIT_SUCCESS; +} + + static void spapr_dt_rtas(SpaprMachineState *spapr, void *fdt) { MachineState *ms =3D MACHINE(spapr); int rtas; + size_t size_tokens =3D 0; + g_autofree char *errinject_tokens; GString *hypertas =3D g_string_sized_new(256); GString *qemu_hypertas =3D g_string_sized_new(256); uint64_t max_device_addr =3D 0; @@ -1012,6 +1108,16 @@ static void spapr_dt_rtas(SpaprMachineState *spapr, = void *fdt) */ _FDT(fdt_setprop(fdt, rtas, "ibm,extended-os-term", NULL, 0)); =20 + if (!spapr_get_errinject_tokens(&errinject_tokens, &size_tokens)) { + _FDT(fdt_setprop(fdt, rtas, "ibm,errinjct-tokens", + errinject_tokens, size_tokens)); + + _FDT(fdt_setprop_string(fdt, rtas, "ibm,open-errinjct", + "ibm,open-errinjct")); + _FDT(fdt_setprop_string(fdt, rtas, "ibm,close-errinjct", + "ibm,close-errinjct")); + } + _FDT(fdt_setprop(fdt, rtas, "ibm,lrdr-capacity", lrdr_capacity, sizeof(lrdr_capacity))); =20 --=20 2.51.0