On Wed, Jan 9, 2019 at 6:47 PM Keith Busch <keith.busch@xxxxxxxxx> wrote: > > The Heterogeneous Memory Attribute Table (HMAT) header has different > field lengths than the existing parsing uses. Add the HMAT type to the > parsing rules so it may be generically parsed. > > Cc: Dan Williams <dan.j.williams@xxxxxxxxx> > Signed-off-by: Keith Busch <keith.busch@xxxxxxxxx> Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > --- > drivers/acpi/tables.c | 9 +++++++++ > include/linux/acpi.h | 1 + > 2 files changed, 10 insertions(+) > > diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c > index 967e1168becf..d9911cd55edc 100644 > --- a/drivers/acpi/tables.c > +++ b/drivers/acpi/tables.c > @@ -51,6 +51,7 @@ static int acpi_apic_instance __initdata; > > enum acpi_subtable_type { > ACPI_SUBTABLE_COMMON, > + ACPI_SUBTABLE_HMAT, > }; > > struct acpi_subtable_entry { > @@ -232,6 +233,8 @@ acpi_get_entry_type(struct acpi_subtable_entry *entry) > switch (entry->type) { > case ACPI_SUBTABLE_COMMON: > return entry->hdr->common.type; > + case ACPI_SUBTABLE_HMAT: > + return entry->hdr->hmat.type; > } > return 0; > } > @@ -242,6 +245,8 @@ acpi_get_entry_length(struct acpi_subtable_entry *entry) > switch (entry->type) { > case ACPI_SUBTABLE_COMMON: > return entry->hdr->common.length; > + case ACPI_SUBTABLE_HMAT: > + return entry->hdr->hmat.length; > } > return 0; > } > @@ -252,6 +257,8 @@ acpi_get_subtable_header_length(struct acpi_subtable_entry *entry) > switch (entry->type) { > case ACPI_SUBTABLE_COMMON: > return sizeof(entry->hdr->common); > + case ACPI_SUBTABLE_HMAT: > + return sizeof(entry->hdr->hmat); > } > return 0; > } > @@ -259,6 +266,8 @@ acpi_get_subtable_header_length(struct acpi_subtable_entry *entry) > static enum acpi_subtable_type __init > acpi_get_subtable_type(char *id) > { > + if (strncmp(id, ACPI_SIG_HMAT, 4) == 0) > + return ACPI_SUBTABLE_HMAT; > return ACPI_SUBTABLE_COMMON; > } > > diff --git a/include/linux/acpi.h b/include/linux/acpi.h > index 7c3c4ebaded6..53f93dff171c 100644 > --- a/include/linux/acpi.h > +++ b/include/linux/acpi.h > @@ -143,6 +143,7 @@ enum acpi_address_range_id { > /* Table Handlers */ > union acpi_subtable_headers { > struct acpi_subtable_header common; > + struct acpi_hmat_structure hmat; > }; > > typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *table); > -- > 2.14.4 >