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.
OPAL_ELOG_READ¶
The OPAL_ELOG_READ call will copy the error log identified by id
into
the buffer
of size size
.
OPAL_ELOG_READ
accepts 3 parameters:
uint64_t *elog_buffer
uint64_t elog_size
uint64_t elog_id
Returns:
- OPAL_WRONG_STATE
When there are no error logs to read, or
OPAL_ELOG
calls are done in the wrong order.- OPAL_PARAMETER
The
id
does not match the log id that is available.- OPAL_SUCCESS
Error log is copied to
buffer
.
Other generic OPAL error codes may also be returned and should be treated like OPAL_INTERNAL_ERROR.
OPAL_ELOG_ACK¶
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:
uint64_t ack_id
Returns:
- OPAL_INTERNAL_ERROR
OPAL failed to send acknowledgement to the error log creator.
- OPAL_SUCCESS
Success!
Other generic OPAL error codes may also be returned, and should be treated like OPAL_INTERNAL_ERROR.
OPAL_ELOG_RESEND¶
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.
OPAL_ELOG_SIZE¶
The OPAL_ELOG_SIZE call retrieves information about an error log.
Here, 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
Returns:
- OPAL_WRONG_STATE
There is no error log to fetch information about.
- OPAL_SUCCESS
Success.
Other general OPAL errors may be returned.