ACPI video: Don't start video device until its associated input device 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>
This commit is contained in:
parent
ea9f8856bd
commit
b60e7f6166
|
@ -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));
|
||||
|
||||
|
@ -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),
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user