Re: [PATCH v4 0/5] powerpc/eeh: Add RTAS-based error injection support on pSeries

Narayana Murty N <[email protected]>
Newsgroups gmane.linux.ports.ppc.embedded,gmane.linux.kernel
Message-ID <[email protected]>
Hi,

I noticed that I missed adding the changelog in the v4 cover letter. 
Adding it here for reference v4 changes from v3:


On 31/08/26 12:24 PM, Narayana Murty N wrote:
> The pSeries EEH error-injection backend currently implements a limited
> software-generated MMIO failure and does not use the error-injection
> services provided by RTAS.
> 
> This series replaces that implementation with the PAPR-defined RTAS
> workflow based on:
> 
>    - ibm,open-errinjct
>    - ibm,errinjct
>    - ibm,close-errinjct
> 
> The implementation opens an RTAS error-injection session, prepares the
> firmware work buffer, performs the requested injection, and closes the
> session on both success and failure paths.
> 
> The existing EEH userspace ABI is preserved. EEH_ERR_TYPE_32 and
> EEH_ERR_TYPE_64 continue to represent generic 32-bit and 64-bit IOA
> bus-error injection requests. The pSeries backend maps these values to
> the corresponding RTAS error types, while the PowerNV backend
> explicitly maps them to the corresponding OPAL types.
> 
> Additional generic EEH error types (EEH_ERR_TYPE_RECOVERED_SPECIAL_EVENT,
> EEH_ERR_TYPE_CORRUPTED_PAGE, and the cache/TLB corruption types) are now
> defined in the UAPI header and mapped explicitly to RTAS firmware encodings
> by the pSeries backend. Platform backends that do not support a valid
> generic type return -EOPNOTSUPP.
> 
> No existing userspace ABI values are changed.
> 
> The current injection path can be exercised for VFIO-assigned devices
> through VFIO_EEH_PE_INJECT_ERR. The guest or userspace VFIO application
> continues to use the same generic EEH type and function values,
> independent of whether the host platform uses RTAS or OPAL.
> 
> The series also handles the unusual return format of
> ibm,open-errinjct:
> 
> rets[0] = error-injection session token
> rets[1] = RTAS status
> 
> rtas_call() now returns rets[1] as the status and places the session
> token in outputs[0], preserving the normal kernel rtas_call()
> convention.
> 
> sys_rtas() is intentionally unchanged because it exposes the raw RTAS
> return cells to userspace. Userspace therefore continues to receive
> the session token and status in their PAPR-defined positions.
> 
> The RTAS work buffer is allocated during RTAS initialization below:
> 
> min(ppc64_rma_size, RTAS_INSTANTIATE_MAX)
> 
> using the same accessible-memory limit used for rtas_rmo_buf. The
> kernel populates the buffer through its virtual mapping but passes its
> physical address to firmware.
> 
> The complete open, inject and close sequence is serialized with a
> mutex. RTAS busy and extended-delay return values are handled for all
> three calls. A session token value of zero is accepted, and session
> state is tracked independently from the token value.
> 
> The patches are organised as follows:
> 
> Handle the special ibm,open-errinjct return format in rtas_call().
> Allocate an RTAS-accessible error-injection work buffer.
> Add pSeries RTAS parameter validation and buffer encoding helpers.
> Implement RTAS-based pSeries EEH error injection.
> Explicitly map generic EEH error types to OPAL types on PowerNV.
> 
> Testing was performed on PowerVM with firmware providing the RTAS
> error-injection services and with the corresponding QEMU support:
> 
> https://lore.kernel.org/qemu-devel/[email protected]/
> 
> Signed-off-by: Narayana Murty N <[email protected]>

The corresponding QEMU v5 series is posted here:
https://lore.kernel.org/qemu-devel/[email protected]/ 


Change Log:

V3 -> V4:
  * Use the RTAS work area allocator instead of adding a dedicated 
global error-injection buffer.
  * Keep sys_rtas() raw return-cell semantics unchanged while handling 
the special ibm,open-errinjct return format in rtas_call().
  * Treat ibm,open-errinjct with fewer than two return cells as invalid
rtas_call() usage instead of interpreting rets[0] as status.
  * Use normal Linux errno values in internal validation helpers instead 
of RTAS status values.
  * Simplify the pSeries RTAS open/inject/close flow.
  * Keep close-session failure as cleanup reporting without overwriting 
the primary operation status.
  * Add VFIO sPAPR-side address normalization before dispatching IOA 
error injection to the platform EEH backend.
  * Normalize IOA addresses based on the IOA error type, not only 
selected function codes.
  * Keep the generic EEH ABI values unchanged and keep pSeries RTAS and
PowerNV OPAL mappings explicit.

V2 -> V3:
  * Fixed ibm,open-errinjct return handling to correctly process 
firmware responses.
  * Allocate the error-injection buffer in RTAS-accessible memory 
instead of general kernel memory.
  * Pass the physical address of the error-injection buffer to firmware 
(previously incorrect address type).
  * Accept session token zero as a valid token (previously rejected 
erroneously).
  * Handle RTAS busy and extended-delay return codes for open-inject, 
and close calls.
  * Simplified the validation helper — reduced complexity and removed 
redundant checks.
  * Simplified the buffer-preparation helper for cleaner, more 
maintainable code.
  * Validate that all required RTAS tokens are present before attempting 
to open a session.
  * Added explicit generic EEH-to-OPAL error-type mapping for the 
PowerNV platform.

v1 -> v2: 
https://lore.kernel.org/all/[email protected]/
  * Addressed all review comments from Sourabh Jain
    - Removed unnecessary empty line in rtas_call()
    - Enhanced comment to explain PAPR specification requirements
    - Corrected misleading comment about output handling
    - Improved else block comment for better code clarity
  * Fixed kernel test robot warnings
    - Fixed kernel-doc warning for __maybe_unused parameter
    - Confirmed sparse warnings are false positives (correct endianness 
handling)
  * Added PowerNV platform abstraction layer (new Patch 5)
    - Maps EEH error types to OPAL-specific types
    - Simplifies type handling by direct variable update
  * Improved code comments and documentation throughout
  * Added Reported-by tags for kernel test robot findings
  * Split into logical 5-patch series for better review

RFC -> v1: 
https://lore.kernel.org/all/[email protected]/
  * Initial 4-patch series
  * Fixed PAPR ibm,open-errinjct output format (token,status order)
  * Added pr_fmt handling for EEH subsystem compatibility
  * Implemented comprehensive validation helpers

RFC: 
https://lore.kernel.org/all/[email protected]/
  * Initial RFC implementation

Thanks,
Narayana
> 
> Narayana Murty N (5):
>    powerpc/rtas: Handle ibm,open-errinjct return format
>    vfio/spapr_tce: Normalize EEH IOA error injection addresses
>    powerpc/pseries/eeh: Add RTAS error validation helpers
>    powerpc/pseries/eeh: Implement RTAS-based EEH error injection
>    powerpc/powernv/eeh: Map VFIO EEH error injection to OPAL
> 
>   arch/powerpc/kernel/rtas.c                   |  78 ++++-
>   arch/powerpc/platforms/powernv/eeh-powernv.c |  27 +-
>   arch/powerpc/platforms/pseries/eeh_pseries.c | 328 +++++++++++++++++--
>   drivers/vfio/vfio_iommu_spapr_tce.c          |  90 +++++
>   4 files changed, 484 insertions(+), 39 deletions(-)
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.