aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-03-14 13:48:14 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-03-14 13:48:14 -0400
commit3b319ee220a8795406852a897299dbdfc1b09911 (patch)
treec53184210dea587128f16fd769f39bc243ddb678
parent9352ca585b2ac7b67d2119b9386573b2a4c0ef4b (diff)
parentb6e88119f1edcdc1fa3fd3a168310ac2d433a873 (diff)
Merge tag 'acpi-5.1-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull more ACPI updates from Rafael Wysocki: "These fix a couple of issues and do some cleanups on top of the previous ACPI changes for 5.1-rc1. Specifics: - Fix a crash caused by unloading an SSDT overlay (Andy Shevchenko) - Prevent user space from getting confusing error values on failing ACPI sysfs accesses (Rafael Wysocki) - Simplify leaf node detection in the PPTT parsing code by using a new flag defined in ACPI 6.3 (Jeremy Linton) - Add missing "static" in some places in the ACPI configfs code (Andy Shevchenko) - Fix acpidbg tool path in the ACPI documentation (Flavio Suligoi)" * tag 'acpi-5.1-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: ACPI: sysfs: Prevent get_status() from returning acpi_status ACPI / device_sysfs: Avoid OF modalias creation for removed device ACPI / configfs: Mark local data structures static ACPI / configfs: Mark local functions static ACPI: tables: Simplify PPTT leaf node detection ACPI: Documentation: Fix path for acpidbg tool
-rw-r--r--Documentation/acpi/aml-debugger.txt4
-rw-r--r--drivers/acpi/acpi_configfs.c25
-rw-r--r--drivers/acpi/device_sysfs.c6
-rw-r--r--drivers/acpi/pptt.c3
-rw-r--r--drivers/acpi/sysfs.c21
5 files changed, 35 insertions, 24 deletions
diff --git a/Documentation/acpi/aml-debugger.txt b/Documentation/acpi/aml-debugger.txt
index e851cc5de63f..75ebeb64ab29 100644
--- a/Documentation/acpi/aml-debugger.txt
+++ b/Documentation/acpi/aml-debugger.txt
@@ -23,7 +23,7 @@ kernel.
23 23
24 The resultant userspace tool binary is then located at: 24 The resultant userspace tool binary is then located at:
25 25
26 tools/acpi/power/acpi/acpidbg/acpidbg 26 tools/power/acpi/acpidbg
27 27
28 It can be installed to system directories by running "make install" (as a 28 It can be installed to system directories by running "make install" (as a
29 sufficiently privileged user). 29 sufficiently privileged user).
@@ -35,7 +35,7 @@ kernel.
35 35
36 # mount -t debugfs none /sys/kernel/debug 36 # mount -t debugfs none /sys/kernel/debug
37 # modprobe acpi_dbg 37 # modprobe acpi_dbg
38 # tools/acpi/power/acpi/acpidbg/acpidbg 38 # tools/power/acpi/acpidbg
39 39
40 That spawns the interactive AML debugger environment where you can execute 40 That spawns the interactive AML debugger environment where you can execute
41 debugger commands. 41 debugger commands.
diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c
index b58850389094..81bfc6197293 100644
--- a/drivers/acpi/acpi_configfs.c
+++ b/drivers/acpi/acpi_configfs.c
@@ -97,12 +97,12 @@ static ssize_t acpi_table_aml_read(struct config_item *cfg,
97 97
98CONFIGFS_BIN_ATTR(acpi_table_, aml, NULL, MAX_ACPI_TABLE_SIZE); 98CONFIGFS_BIN_ATTR(acpi_table_, aml, NULL, MAX_ACPI_TABLE_SIZE);
99 99
100struct configfs_bin_attribute *acpi_table_bin_attrs[] = { 100static struct configfs_bin_attribute *acpi_table_bin_attrs[] = {
101 &acpi_table_attr_aml, 101 &acpi_table_attr_aml,
102 NULL, 102 NULL,
103}; 103};
104 104
105ssize_t acpi_table_signature_show(struct config_item *cfg, char *str) 105static ssize_t acpi_table_signature_show(struct config_item *cfg, char *str)
106{ 106{
107 struct acpi_table_header *h = get_header(cfg); 107 struct acpi_table_header *h = get_header(cfg);
108 108
@@ -112,7 +112,7 @@ ssize_t acpi_table_signature_show(struct config_item *cfg, char *str)
112 return sprintf(str, "%.*s\n", ACPI_NAME_SIZE, h->signature); 112 return sprintf(str, "%.*s\n", ACPI_NAME_SIZE, h->signature);
113} 113}
114 114
115ssize_t acpi_table_length_show(struct config_item *cfg, char *str) 115static ssize_t acpi_table_length_show(struct config_item *cfg, char *str)
116{ 116{
117 struct acpi_table_header *h = get_header(cfg); 117 struct acpi_table_header *h = get_header(cfg);
118 118
@@ -122,7 +122,7 @@ ssize_t acpi_table_length_show(struct config_item *cfg, char *str)
122 return sprintf(str, "%d\n", h->length); 122 return sprintf(str, "%d\n", h->length);
123} 123}
124 124
125ssize_t acpi_table_revision_show(struct config_item *cfg, char *str) 125static ssize_t acpi_table_revision_show(struct config_item *cfg, char *str)
126{ 126{
127 struct acpi_table_header *h = get_header(cfg); 127 struct acpi_table_header *h = get_header(cfg);
128 128
@@ -132,7 +132,7 @@ ssize_t acpi_table_revision_show(struct config_item *cfg, char *str)
132 return sprintf(str, "%d\n", h->revision); 132 return sprintf(str, "%d\n", h->revision);
133} 133}
134 134
135ssize_t acpi_table_oem_id_show(struct config_item *cfg, char *str) 135static ssize_t acpi_table_oem_id_show(struct config_item *cfg, char *str)
136{ 136{
137 struct acpi_table_header *h = get_header(cfg); 137 struct acpi_table_header *h = get_header(cfg);
138 138
@@ -142,7 +142,7 @@ ssize_t acpi_table_oem_id_show(struct config_item *cfg, char *str)
142 return sprintf(str, "%.*s\n", ACPI_OEM_ID_SIZE, h->oem_id); 142 return sprintf(str, "%.*s\n", ACPI_OEM_ID_SIZE, h->oem_id);
143} 143}
144 144
145ssize_t acpi_table_oem_table_id_show(struct config_item *cfg, char *str) 145static ssize_t acpi_table_oem_table_id_show(struct config_item *cfg, char *str)
146{ 146{
147 struct acpi_table_header *h = get_header(cfg); 147 struct acpi_table_header *h = get_header(cfg);
148 148
@@ -152,7 +152,7 @@ ssize_t acpi_table_oem_table_id_show(struct config_item *cfg, char *str)
152 return sprintf(str, "%.*s\n", ACPI_OEM_TABLE_ID_SIZE, h->oem_table_id); 152 return sprintf(str, "%.*s\n", ACPI_OEM_TABLE_ID_SIZE, h->oem_table_id);
153} 153}
154 154
155ssize_t acpi_table_oem_revision_show(struct config_item *cfg, char *str) 155static ssize_t acpi_table_oem_revision_show(struct config_item *cfg, char *str)
156{ 156{
157 struct acpi_table_header *h = get_header(cfg); 157 struct acpi_table_header *h = get_header(cfg);
158 158
@@ -162,7 +162,8 @@ ssize_t acpi_table_oem_revision_show(struct config_item *cfg, char *str)
162 return sprintf(str, "%d\n", h->oem_revision); 162 return sprintf(str, "%d\n", h->oem_revision);
163} 163}
164 164
165ssize_t acpi_table_asl_compiler_id_show(struct config_item *cfg, char *str) 165static ssize_t acpi_table_asl_compiler_id_show(struct config_item *cfg,
166 char *str)
166{ 167{
167 struct acpi_table_header *h = get_header(cfg); 168 struct acpi_table_header *h = get_header(cfg);
168 169
@@ -172,8 +173,8 @@ ssize_t acpi_table_asl_compiler_id_show(struct config_item *cfg, char *str)
172 return sprintf(str, "%.*s\n", ACPI_NAME_SIZE, h->asl_compiler_id); 173 return sprintf(str, "%.*s\n", ACPI_NAME_SIZE, h->asl_compiler_id);
173} 174}
174 175
175ssize_t acpi_table_asl_compiler_revision_show(struct config_item *cfg, 176static ssize_t acpi_table_asl_compiler_revision_show(struct config_item *cfg,
176 char *str) 177 char *str)
177{ 178{
178 struct acpi_table_header *h = get_header(cfg); 179 struct acpi_table_header *h = get_header(cfg);
179 180
@@ -192,7 +193,7 @@ CONFIGFS_ATTR_RO(acpi_table_, oem_revision);
192CONFIGFS_ATTR_RO(acpi_table_, asl_compiler_id); 193CONFIGFS_ATTR_RO(acpi_table_, asl_compiler_id);
193CONFIGFS_ATTR_RO(acpi_table_, asl_compiler_revision); 194CONFIGFS_ATTR_RO(acpi_table_, asl_compiler_revision);
194 195
195struct configfs_attribute *acpi_table_attrs[] = { 196static struct configfs_attribute *acpi_table_attrs[] = {
196 &acpi_table_attr_signature, 197 &acpi_table_attr_signature,
197 &acpi_table_attr_length, 198 &acpi_table_attr_length,
198 &acpi_table_attr_revision, 199 &acpi_table_attr_revision,
@@ -232,7 +233,7 @@ static void acpi_table_drop_item(struct config_group *group,
232 acpi_tb_unload_table(table->index); 233 acpi_tb_unload_table(table->index);
233} 234}
234 235
235struct configfs_group_operations acpi_table_group_ops = { 236static struct configfs_group_operations acpi_table_group_ops = {
236 .make_item = acpi_table_make_item, 237 .make_item = acpi_table_make_item,
237 .drop_item = acpi_table_drop_item, 238 .drop_item = acpi_table_drop_item,
238}; 239};
diff --git a/drivers/acpi/device_sysfs.c b/drivers/acpi/device_sysfs.c
index 545e91420cde..8940054d6250 100644
--- a/drivers/acpi/device_sysfs.c
+++ b/drivers/acpi/device_sysfs.c
@@ -202,11 +202,15 @@ static int create_of_modalias(struct acpi_device *acpi_dev, char *modalias,
202{ 202{
203 struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER }; 203 struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER };
204 const union acpi_object *of_compatible, *obj; 204 const union acpi_object *of_compatible, *obj;
205 acpi_status status;
205 int len, count; 206 int len, count;
206 int i, nval; 207 int i, nval;
207 char *c; 208 char *c;
208 209
209 acpi_get_name(acpi_dev->handle, ACPI_SINGLE_NAME, &buf); 210 status = acpi_get_name(acpi_dev->handle, ACPI_SINGLE_NAME, &buf);
211 if (ACPI_FAILURE(status))
212 return -ENODEV;
213
210 /* DT strings are all in lower case */ 214 /* DT strings are all in lower case */
211 for (c = buf.pointer; *c != '\0'; c++) 215 for (c = buf.pointer; *c != '\0'; c++)
212 *c = tolower(*c); 216 *c = tolower(*c);
diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c
index ad31c50de3be..065c4fc245d1 100644
--- a/drivers/acpi/pptt.c
+++ b/drivers/acpi/pptt.c
@@ -209,6 +209,9 @@ static int acpi_pptt_leaf_node(struct acpi_table_header *table_hdr,
209 struct acpi_pptt_processor *cpu_node; 209 struct acpi_pptt_processor *cpu_node;
210 u32 proc_sz; 210 u32 proc_sz;
211 211
212 if (table_hdr->revision > 1)
213 return (node->flags & ACPI_PPTT_ACPI_LEAF_NODE);
214
212 table_end = (unsigned long)table_hdr + table_hdr->length; 215 table_end = (unsigned long)table_hdr + table_hdr->length;
213 node_entry = ACPI_PTR_DIFF(node, table_hdr); 216 node_entry = ACPI_PTR_DIFF(node, table_hdr);
214 entry = ACPI_ADD_PTR(struct acpi_subtable_header, table_hdr, 217 entry = ACPI_ADD_PTR(struct acpi_subtable_header, table_hdr,
diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
index 41324f0b1bee..fa76f5e41b5c 100644
--- a/drivers/acpi/sysfs.c
+++ b/drivers/acpi/sysfs.c
@@ -648,26 +648,29 @@ static void acpi_global_event_handler(u32 event_type, acpi_handle device,
648 } 648 }
649} 649}
650 650
651static int get_status(u32 index, acpi_event_status *status, 651static int get_status(u32 index, acpi_event_status *ret,
652 acpi_handle *handle) 652 acpi_handle *handle)
653{ 653{
654 int result; 654 acpi_status status;
655 655
656 if (index >= num_gpes + ACPI_NUM_FIXED_EVENTS) 656 if (index >= num_gpes + ACPI_NUM_FIXED_EVENTS)
657 return -EINVAL; 657 return -EINVAL;
658 658
659 if (index < num_gpes) { 659 if (index < num_gpes) {
660 result = acpi_get_gpe_device(index, handle); 660 status = acpi_get_gpe_device(index, handle);
661 if (result) { 661 if (ACPI_FAILURE(status)) {
662 ACPI_EXCEPTION((AE_INFO, AE_NOT_FOUND, 662 ACPI_EXCEPTION((AE_INFO, AE_NOT_FOUND,
663 "Invalid GPE 0x%x", index)); 663 "Invalid GPE 0x%x", index));
664 return result; 664 return -ENXIO;
665 } 665 }
666 result = acpi_get_gpe_status(*handle, index, status); 666 status = acpi_get_gpe_status(*handle, index, ret);
667 } else if (index < (num_gpes + ACPI_NUM_FIXED_EVENTS)) 667 } else {
668 result = acpi_get_event_status(index - num_gpes, status); 668 status = acpi_get_event_status(index - num_gpes, ret);
669 }
670 if (ACPI_FAILURE(status))
671 return -EIO;
669 672
670 return result; 673 return 0;
671} 674}
672 675
673static ssize_t counter_show(struct kobject *kobj, 676static ssize_t counter_show(struct kobject *kobj,