Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b60e7f61 authored by Igor Murzov's avatar Igor Murzov Committed by Len Brown
Browse files

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: default avatarIgor Murzov <e-mail@date.by>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent ea9f8856
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -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);