Commit 9254bc84 authored by Dmitry Torokhov's avatar Dmitry Torokhov Committed by Len Brown

ACPI: dock: fix oops when _DCK evaluation fails

Data returned by acpi_get_name in acpi_buffer is not acpi_object and
therefore should not be cast to it, otherwise we'll get an nice oops
trying to print error message.

Also print name of the ACPI object corresponding to the docking station
and elevate severity of the message printed when _DCK fails to KERN_ERR.
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
Cc: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 3f8698d4
...@@ -396,12 +396,11 @@ static void handle_dock(struct dock_station *ds, int dock) ...@@ -396,12 +396,11 @@ static void handle_dock(struct dock_station *ds, int dock)
union acpi_object arg; union acpi_object arg;
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
struct acpi_buffer name_buffer = { ACPI_ALLOCATE_BUFFER, NULL }; struct acpi_buffer name_buffer = { ACPI_ALLOCATE_BUFFER, NULL };
union acpi_object *obj;
acpi_get_name(ds->handle, ACPI_FULL_PATHNAME, &name_buffer); acpi_get_name(ds->handle, ACPI_FULL_PATHNAME, &name_buffer);
obj = name_buffer.pointer;
printk(KERN_INFO PREFIX "%s\n", dock ? "docking" : "undocking"); printk(KERN_INFO PREFIX "%s - %s\n",
(char *)name_buffer.pointer, dock ? "docking" : "undocking");
/* _DCK method has one argument */ /* _DCK method has one argument */
arg_list.count = 1; arg_list.count = 1;
...@@ -410,7 +409,8 @@ static void handle_dock(struct dock_station *ds, int dock) ...@@ -410,7 +409,8 @@ static void handle_dock(struct dock_station *ds, int dock)
arg.integer.value = dock; arg.integer.value = dock;
status = acpi_evaluate_object(ds->handle, "_DCK", &arg_list, &buffer); status = acpi_evaluate_object(ds->handle, "_DCK", &arg_list, &buffer);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
pr_debug("%s: failed to execute _DCK\n", obj->string.pointer); printk(KERN_ERR PREFIX "%s - failed to execute _DCK\n",
(char *)name_buffer.pointer);
kfree(buffer.pointer); kfree(buffer.pointer);
kfree(name_buffer.pointer); kfree(name_buffer.pointer);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment