summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Mickler <florian@mickler.org>2011-05-15 16:32:50 +0200
committerDave Airlie <airlied@redhat.com>2011-05-16 08:57:04 +1000
commita67b8887ced9d54cab7759bdb19deafed37481eb (patch)
tree87ad4a1f9f2b5fd48d820949c827fea7264fa885
parent3a8ab79eae4500e6ac618a92a90cee63d6e804a8 (diff)
downloadlinux-stable-a67b8887ced9d54cab7759bdb19deafed37481eb.tar.gz
linux-stable-a67b8887ced9d54cab7759bdb19deafed37481eb.tar.bz2
linux-stable-a67b8887ced9d54cab7759bdb19deafed37481eb.zip
vga_switcheroo: don't toggle-switch devices
If the requested device is already active, ignore the request. This restores the original behaviour of the interface. The change was probably an unintended side effect of commit 66b37c6777c4 vga_switcheroo: split switching into two stages which did not take into account to duplicate the !active check in the split-off stage2. Fix this by factoring that check out of stage1 into the debugfs_write routine. References: https://bugzilla.kernel.org/show_bug.cgi?id=34252 Reported-by: Igor Murzov <e-mail@date.by> Tested-by: Igor Murzov <e-mail@date.by> Signed-off-by: Florian Mickler <florian@mickler.org> Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--drivers/gpu/vga/vga_switcheroo.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c
index e01cacba685f..498b284e5ef9 100644
--- a/drivers/gpu/vga/vga_switcheroo.c
+++ b/drivers/gpu/vga/vga_switcheroo.c
@@ -219,9 +219,6 @@ static int vga_switchto_stage1(struct vga_switcheroo_client *new_client)
int i;
struct vga_switcheroo_client *active = NULL;
- if (new_client->active == true)
- return 0;
-
for (i = 0; i < VGA_SWITCHEROO_MAX_CLIENTS; i++) {
if (vgasr_priv.clients[i].active == true) {
active = &vgasr_priv.clients[i];
@@ -372,6 +369,9 @@ vga_switcheroo_debugfs_write(struct file *filp, const char __user *ubuf,
goto out;
}
+ if (client->active == true)
+ goto out;
+
/* okay we want a switch - test if devices are willing to switch */
can_switch = true;
for (i = 0; i < VGA_SWITCHEROO_MAX_CLIENTS; i++) {