]> git.baikalelectronics.ru Git - kernel.git/commit
vga_switcheroo: Drop client power state VGA_SWITCHEROO_INIT
authorLukas Wunner <lukas@wunner.de>
Tue, 8 Sep 2015 12:17:47 +0000 (14:17 +0200)
committerDave Airlie <airlied@redhat.com>
Thu, 5 Nov 2015 01:07:36 +0000 (11:07 +1000)
commit01e05d652d49ea3f7b1b7e8161726c41efb2dd20
tree42a0829fb93bb05559b140211fdcc2d2b20cd40c
parentd9c5c91e2cea4a2ad136938085551255564178fb
vga_switcheroo: Drop client power state VGA_SWITCHEROO_INIT

hda_intel.c:azx_probe() defers initialization of an audio controller
on the discrete GPU if the GPU is powered off. The power state of the
GPU is determined by calling vga_switcheroo_get_client_state().

vga_switcheroo_get_client_state() returns VGA_SWITCHEROO_INIT if
vga_switcheroo is not enabled, i.e. if no second GPU or no handler
has registered.

This can go wrong in the following scenario:
- Driver for the integrated GPU is not loaded.
- Driver for the discrete GPU registers with vga_switcheroo, uses driver
  power control to power down the GPU, handler cuts power to the GPU.
- Driver for the audio controller gets loaded after the GPU was powered
  down, calls vga_switcheroo_get_client_state() which returns
  VGA_SWITCHEROO_INIT instead of VGA_SWITCHEROO_OFF.
- Consequence: azx_probe() tries to initialize the audio controller even
  though the GPU is powered down.

The power state VGA_SWITCHEROO_INIT was introduced by 9e7988133243
("vga_switcheroo: Add a helper function to get the client state").
It is not apparent what its benefit might be. The idea seems to
be to initialize the audio controller even if the power state is
VGA_SWITCHEROO_OFF (were vga_switcheroo enabled), but as shown
above this can fail.

Drop VGA_SWITCHEROO_INIT to solve this.

Acked-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/vga/vga_switcheroo.c
include/linux/vga_switcheroo.h