OPAL_ELOG: Error logging¶
OPAL provides an abstraction to platform specific methods of storing and retrieving error logs. Some service processors may be able to store information in the Platform Error Log (PEL) format. These may be generated at runtime by the service processor or OPAL in reaction to certain events. For example, an IPL failure could be recorded in an error log, as could the reason and details of an unexpected shut-down/reboot (e.g. hard thermal limits, check-stop).
There are five OPAL calls from host to OPAL on error log:
#define OPAL_ELOG_READ 71 #define OPAL_ELOG_WRITE 72 #define OPAL_ELOG_ACK 73 #define OPAL_ELOG_RESEND 74 #define OPAL_ELOG_SIZE 75
Note: OPAL_ELOG_WRITE (72) Unused for now, might be supported in the future.
Not all platforms support these calls, so it’s important for a host Operating System to use the OPAL_CHECK_TOKEN call first. If OPAL_ELOG_READ, OPAL_ELOG_ACK, OPAL_ELOG_RESEND, or OPAL_ELOG_SIZE is present, then the rest of that group is also present. The presence of OPAL_ELOG_WRITE must be checked separately.
TODO: we need a good explanation of the notification mechanism and in what order and when to call each of the OPAL APIs.
The OPAL_ELOG_READ call will copy the error log identified by
buffer of size
OPAL_ELOG_READ accepts 3 parameters:
uint64_t *elog_buffer uint64_t elog_size uint64_t elog_id
When there are no error logs to read, or
OPAL_ELOGcalls are done in the wrong order.
iddoes not match the log id that is available.
Error log is copied to
Other generic OPAL error codes may also be returned and should be treated like OPAL_INTERNAL_ERROR.
Acknowledging (ACKing) an error log tells OPAL and the service processor that the host operating system has dealt with the error log successfully. This allows OPAL and the service processor to delete the error log from their memory/storage.
OPAL_ELOG_ACK accepts 1 parameter:
OPAL failed to send acknowledgement to the error log creator.
Other generic OPAL error codes may also be returned, and should be treated like OPAL_INTERNAL_ERROR.
The OPAL_ELOG_RESEND call will cause OPAL to resend notification to the host operating system of all outstanding error logs. This is commonly used (although doesn’t have to be) in a kexec scenario.
The call registered with this token accepts no parameter and returns type is void.
The OPAL_ELOG_SIZE call retrieves information about an error log.
type specifies error log format. Supported types are :
0 -> Platform Error Log
OPAL_ELOG_SIZE accepts 3 parameters:
uint64_t *elog_id uint64_t *elog_size uint64_t *elog_type
Other general OPAL errors may be returned.