aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor@insightbb.com>2007-07-18 01:10:24 -0400
committerLen Brown <len.brown@intel.com>2007-07-18 20:37:06 -0400
commit9254bc845db90a123cf992e983539d0ee409f22a (patch)
tree6fc33226de95d3e37db65180d344729cdee2f766
parent3f8698d4d3f72252980575fb8d7b4cafeb5dd0a2 (diff)
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: Dmitry Torokhov <dtor@mail.ru> Cc: Kristen Carlson Accardi <kristen.c.accardi@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--drivers/acpi/dock.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index dc3df93d2310..6192c8be66df 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -396,12 +396,11 @@ static void handle_dock(struct dock_station *ds, int dock)
396 union acpi_object arg; 396 union acpi_object arg;
397 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 397 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
398 struct acpi_buffer name_buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 398 struct acpi_buffer name_buffer = { ACPI_ALLOCATE_BUFFER, NULL };
399 union acpi_object *obj;
400 399
401 acpi_get_name(ds->handle, ACPI_FULL_PATHNAME, &name_buffer); 400 acpi_get_name(ds->handle, ACPI_FULL_PATHNAME, &name_buffer);
402 obj = name_buffer.pointer;
403 401
404 printk(KERN_INFO PREFIX "%s\n", dock ? "docking" : "undocking"); 402 printk(KERN_INFO PREFIX "%s - %s\n",
403 (char *)name_buffer.pointer, dock ? "docking" : "undocking");
405 404
406 /* _DCK method has one argument */ 405 /* _DCK method has one argument */
407 arg_list.count = 1; 406 arg_list.count = 1;
@@ -410,7 +409,8 @@ static void handle_dock(struct dock_station *ds, int dock)
410 arg.integer.value = dock; 409 arg.integer.value = dock;
411 status = acpi_evaluate_object(ds->handle, "_DCK", &arg_list, &buffer); 410 status = acpi_evaluate_object(ds->handle, "_DCK", &arg_list, &buffer);
412 if (ACPI_FAILURE(status)) 411 if (ACPI_FAILURE(status))
413 pr_debug("%s: failed to execute _DCK\n", obj->string.pointer); 412 printk(KERN_ERR PREFIX "%s - failed to execute _DCK\n",
413 (char *)name_buffer.pointer);
414 kfree(buffer.pointer); 414 kfree(buffer.pointer);
415 kfree(name_buffer.pointer); 415 kfree(name_buffer.pointer);
416} 416}