mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 10:00:03 -04:00
ACPI: sysfs: Properly map BERT and CCEL data to their ACPI tables
In the case of multiple BERT ACPI tables, one gets: sysfs: cannot create duplicate filename '/firmware/acpi/tables/data/BERT' This is because both: /firmware/acpi/tables/BERT1 /firmware/acpi/tables/BERT2 are attempted to be mapped to the same data table: /firmware/acpi/tables/data/BERT Address this problem by passing and using the same filename for data tables. Signed-off-by: Thomas Renninger <trenn@suse.de> Reported-by: Michal Suchanek <msuchanek@suse.com> Closes: https://bugzilla.suse.com/show_bug.cgi?id=1270211 [ rjw: Subject and changelog edits ] Link: https://patch.msgid.link/20260717065129.72924-3-trenn@suse.de Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
committed by
Rafael J. Wysocki
parent
f45c999e67
commit
e45ee607ca
@@ -316,6 +316,7 @@ struct acpi_table_attr {
|
||||
struct acpi_data_attr {
|
||||
struct bin_attribute attr;
|
||||
u64 addr;
|
||||
char filename[ACPI_NAMESEG_SIZE+ACPI_INST_SIZE];
|
||||
};
|
||||
|
||||
static ssize_t acpi_table_show(struct file *filp, struct kobject *kobj,
|
||||
@@ -453,7 +454,6 @@ static int acpi_bert_data_init(void *th, struct acpi_data_attr *data_attr)
|
||||
}
|
||||
data_attr->addr = bert->address;
|
||||
data_attr->attr.size = bert->region_length;
|
||||
data_attr->attr.attr.name = "BERT";
|
||||
|
||||
return sysfs_create_bin_file(tables_data_kobj, &data_attr->attr);
|
||||
}
|
||||
@@ -469,7 +469,6 @@ static int acpi_ccel_data_init(void *th, struct acpi_data_attr *data_attr)
|
||||
}
|
||||
data_attr->addr = ccel->log_area_start_address;
|
||||
data_attr->attr.size = ccel->log_area_minimum_length;
|
||||
data_attr->attr.attr.name = "CCEL";
|
||||
|
||||
return sysfs_create_bin_file(tables_data_kobj, &data_attr->attr);
|
||||
}
|
||||
@@ -484,7 +483,7 @@ static struct acpi_data_obj {
|
||||
|
||||
#define NUM_ACPI_DATA_OBJS ARRAY_SIZE(acpi_data_objs)
|
||||
|
||||
static int acpi_table_data_init(struct acpi_table_header *th)
|
||||
static int acpi_table_data_init(struct acpi_table_header *th, struct acpi_table_attr *table_attr)
|
||||
{
|
||||
struct acpi_data_attr *data_attr;
|
||||
int i;
|
||||
@@ -497,6 +496,8 @@ static int acpi_table_data_init(struct acpi_table_header *th)
|
||||
sysfs_attr_init(&data_attr->attr.attr);
|
||||
data_attr->attr.read = acpi_data_show;
|
||||
data_attr->attr.attr.mode = 0400;
|
||||
strscpy(data_attr->filename, table_attr->filename);
|
||||
data_attr->attr.attr.name = data_attr->filename;
|
||||
return acpi_data_objs[i].fn(th, data_attr);
|
||||
}
|
||||
}
|
||||
@@ -543,7 +544,7 @@ static int acpi_tables_sysfs_init(void)
|
||||
return ret;
|
||||
}
|
||||
list_add_tail(&table_attr->node, &acpi_table_attr_list);
|
||||
acpi_table_data_init(table_header);
|
||||
acpi_table_data_init(table_header, table_attr);
|
||||
}
|
||||
|
||||
kobject_uevent(tables_kobj, KOBJ_ADD);
|
||||
|
||||
Reference in New Issue
Block a user