fix bug with GPU hotplugging while VT switched
- reenable reverse optimus
This commit is contained in:
parent
becc53e876
commit
9620f4c049
@ -1,4 +1,4 @@
|
|||||||
From 388c8278cf81848635d8b4af75f0ccc189344acf Mon Sep 17 00:00:00 2001
|
From 3adc5f9a82ea9aeb2fa5eb2337fb9dd0502082df Mon Sep 17 00:00:00 2001
|
||||||
From: Dave Airlie <airlied@redhat.com>
|
From: Dave Airlie <airlied@redhat.com>
|
||||||
Date: Wed, 9 Jan 2013 14:32:50 +1000
|
Date: Wed, 9 Jan 2013 14:32:50 +1000
|
||||||
Subject: [PATCH] randr: report changes when we disconnect a GPU slave
|
Subject: [PATCH] randr: report changes when we disconnect a GPU slave
|
||||||
@ -15,8 +15,8 @@ Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|||||||
Signed-off-by: Fedora X Ninjas <x@fedoraproject.org>
|
Signed-off-by: Fedora X Ninjas <x@fedoraproject.org>
|
||||||
---
|
---
|
||||||
hw/xfree86/common/xf86platformBus.c | 3 ++-
|
hw/xfree86/common/xf86platformBus.c | 3 ++-
|
||||||
hw/xfree86/modes/xf86RandR12.c | 2 ++
|
hw/xfree86/modes/xf86RandR12.c | 9 +++++++--
|
||||||
2 files changed, 4 insertions(+), 1 deletion(-)
|
2 files changed, 9 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
||||||
index 2b02e79..4ccb005 100644
|
index 2b02e79..4ccb005 100644
|
||||||
@ -40,22 +40,32 @@ index 2b02e79..4ccb005 100644
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
|
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
|
||||||
index 01fc9c5..7f570cf 100644
|
index 01fc9c5..f259730 100644
|
||||||
--- a/hw/xfree86/modes/xf86RandR12.c
|
--- a/hw/xfree86/modes/xf86RandR12.c
|
||||||
+++ b/hw/xfree86/modes/xf86RandR12.c
|
+++ b/hw/xfree86/modes/xf86RandR12.c
|
||||||
@@ -1895,10 +1895,12 @@ xf86RandR14ProviderDestroy(ScreenPtr screen, RRProviderPtr provider)
|
@@ -1892,15 +1892,20 @@ xf86RandR14ProviderDestroy(ScreenPtr screen, RRProviderPtr provider)
|
||||||
|
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
|
||||||
|
|
||||||
|
if (config->randr_provider == provider) {
|
||||||
|
+ Bool detached = FALSE;
|
||||||
if (config->randr_provider->offload_sink) {
|
if (config->randr_provider->offload_sink) {
|
||||||
DetachOffloadGPU(screen);
|
DetachOffloadGPU(screen);
|
||||||
config->randr_provider->offload_sink = NULL;
|
config->randr_provider->offload_sink = NULL;
|
||||||
+ RRSetChanged(screen);
|
+ RRSetChanged(screen);
|
||||||
|
+ detached = TRUE;
|
||||||
}
|
}
|
||||||
else if (config->randr_provider->output_source) {
|
- else if (config->randr_provider->output_source) {
|
||||||
|
+ if (config->randr_provider->output_source) {
|
||||||
DetachOutputGPU(screen);
|
DetachOutputGPU(screen);
|
||||||
config->randr_provider->output_source = NULL;
|
config->randr_provider->output_source = NULL;
|
||||||
+ RRSetChanged(screen);
|
+ RRSetChanged(screen);
|
||||||
|
+ detached = TRUE;
|
||||||
}
|
}
|
||||||
else if (screen->current_master)
|
- else if (screen->current_master)
|
||||||
|
+ if (!detached && screen->current_master)
|
||||||
DetachUnboundGPU(screen);
|
DetachUnboundGPU(screen);
|
||||||
|
}
|
||||||
|
config->randr_provider = NULL;
|
||||||
--
|
--
|
||||||
1.8.1.4
|
1.8.2
|
||||||
|
|
||||||
|
@ -595,6 +595,7 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%changelog
|
%changelog
|
||||||
* Fri Apr 12 2013 Dave Airlie <airlied@redhat.com> 1.14.0-4
|
* Fri Apr 12 2013 Dave Airlie <airlied@redhat.com> 1.14.0-4
|
||||||
- fix bug with GPU hotplugging while VT switched
|
- fix bug with GPU hotplugging while VT switched
|
||||||
|
- reenable reverse optimus
|
||||||
|
|
||||||
* Fri Mar 22 2013 Dan Horák <dan@danny.cz> 1.14.0-3
|
* Fri Mar 22 2013 Dan Horák <dan@danny.cz> 1.14.0-3
|
||||||
- libunwind exists only on selected arches
|
- libunwind exists only on selected arches
|
||||||
|
@ -1,19 +1,41 @@
|
|||||||
From 536626891b60039c0f3f9b4cd96156e9fe810f39 Mon Sep 17 00:00:00 2001
|
From 37d51acb3b6a38af1717bfaa7925043c35bfb447 Mon Sep 17 00:00:00 2001
|
||||||
From: Dave Airlie <airlied@redhat.com>
|
From: Dave Airlie <airlied@redhat.com>
|
||||||
Date: Fri, 17 Aug 2012 09:49:24 +1000
|
Date: Fri, 17 Aug 2012 09:49:24 +1000
|
||||||
Subject: [PATCH] autobind GPUs to the screen, (v2)
|
Subject: [PATCH] autobind GPUs to the screen, (v3)
|
||||||
|
|
||||||
this is racy and really not what we want for hotplug going forward,
|
this is racy and really not what we want for hotplug going forward,
|
||||||
but until DE support is in GNOME its probably for the best.
|
but until DE support is in GNOME its probably for the best.
|
||||||
|
|
||||||
v2: fix if config or slave config is NULL
|
v2: fix if config or slave config is NULL
|
||||||
|
v3: fix multi useful slaves
|
||||||
DO NOT UPSTREAM.
|
DO NOT UPSTREAM.
|
||||||
---
|
---
|
||||||
hw/xfree86/common/xf86Init.c | 12 ++++++++++++
|
dix/dispatch.c | 2 --
|
||||||
hw/xfree86/common/xf86platformBus.c | 3 +++
|
hw/xfree86/common/xf86Init.c | 12 ++++++++++++
|
||||||
hw/xfree86/modes/xf86Crtc.c | 28 ++++++++++++++++++++++++++++
|
hw/xfree86/common/xf86platformBus.c | 3 +++
|
||||||
3 files changed, 43 insertions(+)
|
hw/xfree86/modes/xf86Crtc.c | 32 ++++++++++++++++++++++++++++++++
|
||||||
|
4 files changed, 47 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/dix/dispatch.c b/dix/dispatch.c
|
||||||
|
index 0ce10c2..c2ab8f9 100644
|
||||||
|
--- a/dix/dispatch.c
|
||||||
|
+++ b/dix/dispatch.c
|
||||||
|
@@ -3933,7 +3933,6 @@ void
|
||||||
|
AttachOutputGPU(ScreenPtr pScreen, ScreenPtr new)
|
||||||
|
{
|
||||||
|
assert(new->isGPU);
|
||||||
|
- assert(!new->current_master);
|
||||||
|
xorg_list_add(&new->output_head, &pScreen->output_slave_list);
|
||||||
|
new->current_master = pScreen;
|
||||||
|
}
|
||||||
|
@@ -3950,7 +3949,6 @@ void
|
||||||
|
AttachOffloadGPU(ScreenPtr pScreen, ScreenPtr new)
|
||||||
|
{
|
||||||
|
assert(new->isGPU);
|
||||||
|
- assert(!new->current_master);
|
||||||
|
xorg_list_add(&new->offload_head, &pScreen->offload_slave_list);
|
||||||
|
new->current_master = pScreen;
|
||||||
|
}
|
||||||
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
|
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
|
||||||
index d231ced..89629c1 100644
|
index d231ced..89629c1 100644
|
||||||
--- a/hw/xfree86/common/xf86Init.c
|
--- a/hw/xfree86/common/xf86Init.c
|
||||||
@ -45,7 +67,7 @@ index d231ced..89629c1 100644
|
|||||||
if (sigio_blocked)
|
if (sigio_blocked)
|
||||||
OsReleaseSIGIO();
|
OsReleaseSIGIO();
|
||||||
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
||||||
index a73aea2..3810076 100644
|
index 0525e39..82fef32 100644
|
||||||
--- a/hw/xfree86/common/xf86platformBus.c
|
--- a/hw/xfree86/common/xf86platformBus.c
|
||||||
+++ b/hw/xfree86/common/xf86platformBus.c
|
+++ b/hw/xfree86/common/xf86platformBus.c
|
||||||
@@ -387,6 +387,8 @@ xf86platformProbeDev(DriverPtr drvp)
|
@@ -387,6 +387,8 @@ xf86platformProbeDev(DriverPtr drvp)
|
||||||
@ -66,10 +88,10 @@ index a73aea2..3810076 100644
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
||||||
index 8f05c53..ba84e6b 100644
|
index 3011f13..34c1848 100644
|
||||||
--- a/hw/xfree86/modes/xf86Crtc.c
|
--- a/hw/xfree86/modes/xf86Crtc.c
|
||||||
+++ b/hw/xfree86/modes/xf86Crtc.c
|
+++ b/hw/xfree86/modes/xf86Crtc.c
|
||||||
@@ -3321,3 +3321,31 @@ xf86DetachAllCrtc(ScrnInfoPtr scrn)
|
@@ -3323,3 +3323,35 @@ xf86DetachAllCrtc(ScrnInfoPtr scrn)
|
||||||
crtc->x = crtc->y = 0;
|
crtc->x = crtc->y = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,6 +102,7 @@ index 8f05c53..ba84e6b 100644
|
|||||||
+ RRProviderPtr master_provider;
|
+ RRProviderPtr master_provider;
|
||||||
+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(master);
|
+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(master);
|
||||||
+ xf86CrtcConfigPtr slave_config = XF86_CRTC_CONFIG_PTR(pScrn);
|
+ xf86CrtcConfigPtr slave_config = XF86_CRTC_CONFIG_PTR(pScrn);
|
||||||
|
+ Bool unbound = FALSE;
|
||||||
+
|
+
|
||||||
+ if (!config || !slave_config)
|
+ if (!config || !slave_config)
|
||||||
+ return;
|
+ return;
|
||||||
@ -91,16 +114,19 @@ index 8f05c53..ba84e6b 100644
|
|||||||
+ /* source offload */
|
+ /* source offload */
|
||||||
+
|
+
|
||||||
+ DetachUnboundGPU(pScrn->pScreen);
|
+ DetachUnboundGPU(pScrn->pScreen);
|
||||||
|
+ unbound = TRUE;
|
||||||
+ AttachOffloadGPU(master->pScreen, pScrn->pScreen);
|
+ AttachOffloadGPU(master->pScreen, pScrn->pScreen);
|
||||||
+ slave_config->randr_provider->offload_sink = master_provider;
|
+ slave_config->randr_provider->offload_sink = master_provider;
|
||||||
+ } else if ((master->capabilities & RR_Capability_SourceOutput) &&
|
+ }
|
||||||
|
+ if ((master->capabilities & RR_Capability_SourceOutput) &&
|
||||||
+ pScrn->capabilities & RR_Capability_SinkOutput) {
|
+ pScrn->capabilities & RR_Capability_SinkOutput) {
|
||||||
+ /* sink offload */
|
+ /* sink offload */
|
||||||
+ DetachUnboundGPU(pScrn->pScreen);
|
+ if (!unbound)
|
||||||
|
+ DetachUnboundGPU(pScrn->pScreen);
|
||||||
+ AttachOutputGPU(master->pScreen, pScrn->pScreen);
|
+ AttachOutputGPU(master->pScreen, pScrn->pScreen);
|
||||||
+ slave_config->randr_provider->output_source = master_provider;
|
+ slave_config->randr_provider->output_source = master_provider;
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
--
|
--
|
||||||
1.7.10.2
|
1.8.1
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user