[PATCH 5/5] ACPI: Tie ACPI backlight devices to PCI devices if possible

Rafael J. Wysocki rjw at sisk.pl
Sun Feb 6 12:35:07 PST 2011


On Friday, January 14, 2011, Matthew Garrett wrote:
> Dual-GPU machines may provide more than one ACPI backlight interface. Tie
> the backlight device to the GPU in order to allow userspace to identify
> the correct interface.
> 
> Signed-off-by: Matthew Garrett <mjg at redhat.com>

Sorry for the late response, but I've just realized there's a problem with this
patch.

> ---
>  drivers/acpi/video.c |   15 ++++++++++++++-
>  1 files changed, 14 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
> index a9eec8c..a18e497 100644
> --- a/drivers/acpi/video.c
> +++ b/drivers/acpi/video.c
> @@ -782,6 +782,9 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
>  
>  	if (acpi_video_backlight_support()) {
>  		struct backlight_properties props;
> +		struct pci_dev *pdev;
> +		acpi_handle acpi_parent;
> +		struct device *parent = NULL;
>  		int result;
>  		static int count = 0;
>  		char *name;
> @@ -794,10 +797,20 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
>  			return;
>  		count++;
>  
> +		acpi_get_parent(device->dev->handle, &acpi_parent);
> +
> +		pdev = acpi_get_pci_dev(acpi_parent);
> +		if (pdev) {
> +			parent = &pdev->dev;
> +			pci_dev_put(pdev);
> +		}

I'm afraid you can't do that or suspend problems will happen.

Namely, the PM core assumes that parents will be registered before their
children and it is a very strong assumption.  If violated, it may lead to
a suspend sequence deadlock.

Unfortunately, it looks like the ACPI video device is registered before the
PCI device that's becoming it's parent, so the above assumption will be
violated.

Thanks,
Rafael


More information about the dri-devel mailing list