[Skiboot] [PATCH V6 12/12] opal/errorlog : Fixes the problem of different create date/time for same error log
Mukesh Ojha
mukesh02 at linux.vnet.ibm.com
Thu Sep 1 22:23:11 AEST 2016
I will send this patch as separate, As this does not look relevant to
the patchset.
-Mukesh
On Thursday 01 September 2016 01:09 AM, Mukesh Ojha wrote:
> In a situation when same OPAL error log sent both to the host and
> service processor, in both of the cases the create date/time is generated
> individually which eventually lead to the different create date/time
> for the same error log, which is meaningless.
>
> This patch solves this problem by adding field create date and time in
> the error log structure and filling it up much early in opal_elog_create()
> before handing over the error log buffer to the infrastructure that
> sends the log both to the host and service processor.
>
> Signed-off-by: Mukesh Ojha <mukesh02 at linux.vnet.ibm.com>
> ---
> Changes in V6:
> - New patch.
>
> core/errorlog.c | 4 ++++
> core/pel.c | 5 ++---
> include/errorlog.h | 2 ++
> 3 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/core/errorlog.c b/core/errorlog.c
> index efa6a92..7064cda 100644
> --- a/core/errorlog.c
> +++ b/core/errorlog.c
> @@ -24,6 +24,7 @@
> #include <errorlog.h>
> #include <pel.h>
> #include <pool.h>
> +#include <rtc.h>
>
> /*
> * Maximum number buffers that are pre-allocated
> @@ -97,6 +98,7 @@ static struct errorlog *get_write_buffer(int opal_event_severity)
> struct errorlog *opal_elog_create(struct opal_err_info *e_info, uint32_t tag)
> {
> struct errorlog *buf;
> + uint64_t ctime;
>
> buf = get_write_buffer(e_info->sev);
> if (buf) {
> @@ -107,6 +109,8 @@ struct errorlog *opal_elog_create(struct opal_err_info *e_info, uint32_t tag)
> buf->event_subtype = e_info->event_subtype;
> buf->reason_code = e_info->reason_code;
> buf->elog_origin = ORG_SAPPHIRE;
> + rtc_cache_get_datetime(&buf->create_date, &ctime);
> + buf->create_time = ctime >> 32;
>
> lock(&elog_lock);
> buf->plid = ++sapphire_elog_id;
> diff --git a/core/pel.c b/core/pel.c
> index 5df3e91..d0f7637 100644
> --- a/core/pel.c
> +++ b/core/pel.c
> @@ -148,7 +148,6 @@ static void create_user_header_section(struct errorlog *elog_data,
> static void create_private_header_section(struct errorlog *elog_data,
> char *pel_buffer, int *pel_offset)
> {
> - uint64_t ctime;
> struct opal_private_header_section *privhdr =
> (struct opal_private_header_section *)
> pel_buffer;
> @@ -160,8 +159,8 @@ static void create_private_header_section(struct errorlog *elog_data,
> privhdr->v6header.component_id = elog_data->component_id;
> privhdr->plid = elog_data->plid;
>
> - rtc_cache_get_datetime(&privhdr->create_date, &ctime);
> - privhdr->create_time = ctime >> 32;
> + privhdr->create_date = elog_data->create_date;
> + privhdr->create_time = elog_data->create_time;
> privhdr->section_count = 5;
>
> privhdr->creator_subid_hi = 0x00;
> diff --git a/include/errorlog.h b/include/errorlog.h
> index 46a9aa7..772dc11 100644
> --- a/include/errorlog.h
> +++ b/include/errorlog.h
> @@ -138,6 +138,8 @@ struct __attribute__((__packed__)) errorlog {
> uint32_t log_size;
> uint64_t elog_timeout;
> uint32_t ref_count;
> + uint32_t create_date;
> + uint32_t create_time;
>
> char user_data_dump[OPAL_LOG_MAX_DUMP];
> struct list_node link;
More information about the Skiboot
mailing list