From: Keith Owens <kaos@sgi.com>
To: linux-ia64@vger.kernel.org
Subject: [Linux-ia64] [patch] 2.4.20-021210 misaligned sal error record
Date: Tue, 25 Feb 2003 00:24:35 +0000 [thread overview]
Message-ID: <marc-linux-ia64-105590709805925@msgid-missing> (raw)
The fr entries in struct sal_processor_static_info are 16 bytes wide
but may not start on a 16 byte boundary in the sal record (it depends
on the size of min_state). Stop gcc from assuming that the fr entries
are 16 byte aligned.
This was misaligning the fr records within sal_processor_static_info.
In addition, because gcc thought that sal_processor_static_info
contained a 16 byte field, sal_processor_static_info was being forced
to 16 byte alignment within struct err_rec, destroying the mapping of
the sal error record (preceding sal record header is only 40 bytes).
Within sal_log_processor_info, the sal_log_mod_error_info_t entries are
fixed size but have a variable number of entries. Change the
definition from 16 (max) to 0 entries and add a function to calculate
the address of the processor static info within sal_log_processor_info,
based on what sal actually supplied. Use that function in
ia64_init_handler() to get the min_state data.
Against 2.4.20-ia64-021210.
Index: 20.5/include/asm-ia64/sal.h
--- 20.5/include/asm-ia64/sal.h Wed, 11 Dec 2002 20:58:53 +1100 kaos (linux-2.4/s/47_sal.h 1.1.3.2.3.1.1.1.1.3 644)
+++ 20.5(w)/include/asm-ia64/sal.h Tue, 25 Feb 2003 11:17:04 +1100 kaos (linux-2.4/s/47_sal.h 1.1.3.2.3.1.1.1.1.3 644)
@@ -351,7 +351,7 @@ typedef struct sal_processor_static_info
u64 ar[128];
u64 rr[8];
struct ia64_fpreg fr[128];
-} sal_processor_static_info_t;
+} __attribute__((packed)) sal_processor_static_info_t;
typedef struct sal_log_processor_info
{
@@ -373,11 +373,11 @@ typedef struct sal_log_processor_info
u64 proc_error_map;
u64 proc_state_parameter;
u64 proc_cr_lid;
- sal_log_mod_error_info_t cache_check_info[16];
- sal_log_mod_error_info_t tlb_check_info[16];
- sal_log_mod_error_info_t bus_check_info[16];
- sal_log_mod_error_info_t reg_file_check_info[16];
- sal_log_mod_error_info_t ms_check_info[16];
+ sal_log_mod_error_info_t cache_check_info[0];
+ sal_log_mod_error_info_t tlb_check_info[0];
+ sal_log_mod_error_info_t bus_check_info[0];
+ sal_log_mod_error_info_t reg_file_check_info[0];
+ sal_log_mod_error_info_t ms_check_info[0];
struct
{
u64 regs[5];
@@ -386,6 +386,23 @@ typedef struct sal_log_processor_info
sal_processor_static_info_t processor_static_info;
} sal_log_processor_info_t;
+/* Position of processor_static_info within processor_info is variable */
+static inline
+sal_processor_static_info_t *addr_processor_static_info(sal_log_processor_info_t *p)
+{
+ sal_processor_static_info_t *s + (sal_processor_static_info_t *)(
+ ((char *) &(p->processor_static_info)) +
+ (p->valid.num_cache_check +
+ p->valid.num_tlb_check +
+ p->valid.num_bus_check +
+ p->valid.num_reg_file_check +
+ p->valid.num_ms_check
+ ) * sizeof(sal_log_mod_error_info_t)
+ );
+ return s;
+}
+
/* platform error log structures */
typedef struct sal_log_mem_dev_err_info
Index: 20.5/arch/ia64/kernel/mca.c
--- 20.5/arch/ia64/kernel/mca.c Wed, 11 Dec 2002 20:58:53 +1100 kaos (linux-2.4/s/c/5_mca.c 1.1.3.2.3.1.1.1.1.3 644)
+++ 20.5(w)/arch/ia64/kernel/mca.c Tue, 25 Feb 2003 11:14:08 +1100 kaos (linux-2.4/s/c/5_mca.c 1.1.3.2.3.1.1.1.1.3 644)
@@ -910,7 +910,7 @@ ia64_init_handler (struct pt_regs *regs)
plog_ptr=(ia64_err_rec_t *)IA64_LOG_CURR_BUFFER(SAL_INFO_TYPE_INIT);
proc_ptr = &plog_ptr->proc_err;
- ia64_process_min_state_save(&proc_ptr->processor_static_info.min_state_area);
+ ia64_process_min_state_save(&(addr_processor_static_info(proc_ptr)->min_state_area));
/* Clear the INIT SAL logs now that they have been saved in the OS buffer */
ia64_sal_clear_state_info(SAL_INFO_TYPE_INIT);
next reply other threads:[~2003-02-25 0:24 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-02-25 0:24 Keith Owens [this message]
2003-02-25 1:42 ` [Linux-ia64] [patch] 2.4.20-021210 misaligned sal error record David Mosberger
2003-02-25 1:53 ` Keith Owens
2003-03-05 0:01 ` David Mosberger
2003-03-05 0:33 ` Keith Owens
2003-03-05 0:45 ` David Mosberger
2003-04-17 22:47 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=marc-linux-ia64-105590709805925@msgid-missing \
--to=kaos@sgi.com \
--cc=linux-ia64@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.