@@ -358,7 +358,8 @@ static struct apei_exec_ins_type erst_ins_type[] = {
static inline void erst_exec_ctx_init(struct apei_exec_context *ctx)
{
apei_exec_ctx_init(ctx, erst_ins_type, ARRAY_SIZE(erst_ins_type),
- ERST_TAB_ENTRY(erst_tab), erst_tab->entries);
+ ERST_TAB_ENTRY(erst_tab),
+ erst_tab->seri_header.entries);
}
static int erst_get_erange(struct erst_erange *range)
@@ -749,12 +750,14 @@ __setup("erst_disable", setup_erst_disable);
static int erst_check_table(struct acpi_table_erst *erst_tab)
{
- if (erst_tab->header_length != sizeof(struct acpi_table_erst))
+ if (erst_tab->common_header.length < sizeof(struct acpi_table_erst))
return -EINVAL;
- if (erst_tab->header.length < sizeof(struct acpi_table_erst))
+
+ if (erst_tab->seri_header.length != sizeof(struct acpi_erst_header))
return -EINVAL;
- if (erst_tab->entries !=
- (erst_tab->header.length - sizeof(struct acpi_table_erst)) /
+
+ if (erst_tab->seri_header.entries !=
+ (erst_tab->common_header.length - sizeof(struct acpi_table_erst)) /
sizeof(struct acpi_erst_entry))
return -EINVAL;
@@ -283,13 +283,21 @@ enum acpi_einj_command_status {
*
******************************************************************************/
-struct acpi_table_erst {
- struct acpi_table_header header; /* Common ACPI table header */
- u32 header_length;
+/* ERST Serialization Header */
+
+struct acpi_erst_header {
+ u32 length;
u32 reserved;
u32 entries;
};
+/* ERST Header */
+
+struct acpi_table_erst {
+ struct acpi_table_header common_header; /* Common ACPI table header */
+ struct acpi_erst_header seri_header; /* ERST Serialization Header */
+};
+
/* ERST Serialization Entries (actions) */
struct acpi_erst_entry {