Skip to content

Commit

Permalink
ACPI video: Don't start video device until its associated input devic…
Browse files Browse the repository at this point in the history
…e has been allocated

Quoth Dmitry Torokhov:
In addition to bus notifier we do install device notifier explicitly
so it might fire up early. The easiest fox would be to move
acpi_video_bus_start_devices() after input_allocate_device() but
before input_register_device() - unregistered input devices can handle
input_event() calls just fine.

May fix crashes reported in:
https://bugzilla.kernel.org/show_bug.cgi?id=40672

Signed-off-by: Igor Murzov <e-mail@date.by>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
Igor Murzov authored and Len Brown committed Mar 30, 2012
1 parent ea9f885 commit b60e7f6
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions drivers/acpi/video.c
Original file line number Diff line number Diff line change
Expand Up @@ -1658,16 +1658,17 @@ static int acpi_video_bus_add(struct acpi_device *device)
error = acpi_video_bus_get_devices(video, device);
if (error)
goto err_free_video;
error = acpi_video_bus_start_devices(video);
if (error)
goto err_put_video;

video->input = input = input_allocate_device();
if (!input) {
error = -ENOMEM;
goto err_stop_video;
goto err_put_video;
}

error = acpi_video_bus_start_devices(video);
if (error)
goto err_free_input_dev;

snprintf(video->phys, sizeof(video->phys),
"%s/video/input0", acpi_device_hid(video->device));

Expand All @@ -1688,7 +1689,7 @@ static int acpi_video_bus_add(struct acpi_device *device)

error = input_register_device(input);
if (error)
goto err_free_input_dev;
goto err_stop_video;

printk(KERN_INFO PREFIX "%s [%s] (multi-head: %s rom: %s post: %s)\n",
ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),
Expand All @@ -1706,10 +1707,10 @@ static int acpi_video_bus_add(struct acpi_device *device)

err_unregister_input_dev:
input_unregister_device(input);
err_free_input_dev:
input_free_device(input);
err_stop_video:
acpi_video_bus_stop_devices(video);
err_free_input_dev:
input_free_device(input);
err_put_video:
acpi_video_bus_put_devices(video);
kfree(video->attached_array);
Expand Down

0 comments on commit b60e7f6

Please sign in to comment.